【问题标题】:Converting 3NF to BCNF将 3NF 转换为 BCNF
【发布时间】:2020-07-20 05:21:25
【问题描述】:

我正在尝试将我的表格从第三范式更改为 BCNF,但不确定我是否完全理解这个概念。

我设法通过了 1NF、2NF 和 3NF(我认为),但需要帮助才能将其带到 BCNF。

我有

**Students Table**

ID -- First Name -- Last Name -- Age
1  --   Joe      --   Jugg    -- 22
2  --   Ben      --   March   -- 23
3  --   Sally    -- Rainbow   -- 19



**StudentCourse Table**

ID -- Course Title -- Grade
1  -- Math         -- A
1  -- Physics      -- B
2  -- Math         -- C
3  -- Music        -- A


**Courses Table**

Course Title -- Course Fee -- Qualification -- Lecturer
Math         -- £1900      -- Advanced Level -- 2
Physics      -- £2300      -- Diploma        -- 1
Music        -- £1200      -- Certificate    -- 3



**Lecturers Table** 


Lecturer ID -- Lecturer Name
1           --  James Thomas
2           -- Harry Todd
3           -- Rachel Adam

如果您能向我解释这个概念以便我理解,我会感谢任何帮助,谢谢。

【问题讨论】:

  • 现在您只是要求我们用定制的教程重写您的教科书并完成您的(家庭)作业,而您没有表现出任何研究或其他努力。请参阅How to Ask,点击谷歌搜索“stackexchange 作业”和投票箭头鼠标悬停文本。按照教科书的理由展示您的工作步骤,并在您遇到困难时提出 1 个具体问题。 PS所有部分都是如此重复。 “任何帮助”不是有效的 SO 问题。您没有提供解决此问题所需的任何东西,因此您似乎不太了解基础知识。教科书。

标签: database-design database-normalization bcnf


【解决方案1】:

我认为那里没有足够的信息来确定如何从 3NF 到达 BCNF。为了推断candidate keyssuper keys,我们需要了解表中列之间的functional dependencies。除了 StudentCourse 已经满足 BCNF 之外,表中的所有信息都没有出现在多行中,这无济于事。

查看数据,我们可以假设函数依赖关系以用于工作示例。这并不意味着我提供的答案是正确的,但会根据假设提供一些见解。

让我们假设:

  • 由特定讲师教授的课程名称始终以相同的资格水平教授
  • 所有证书的费用为 1200 英镑
  • 所有高级资格认证的费用为 1900 英镑
  • 所有文凭的费用为 2300 英镑

我们还假设Courses 表有以下行(注意附加的第四行):

Course Title -- Course Fee -- Qualification -- Lecturer
Math         -- £1900      -- Advanced Level -- 2
Physics      -- £2300      -- Diploma        -- 1
Music        -- £1200      -- Certificate    -- 3
Music        -- £1900      -- Advanced Level -- 1

这里我们有一个表中有两个函数依赖的例子:

  • 候选键 #1 = (Course Title, Lecturer) -> (Course Fee, Qualification)
  • 候选键 #2 = (Qualification) -> (Course Fee)

如果我们想将高级资格认证的课程费用更改为 2000 英镑,那么由于我们必须更新 Courses 表中的两行,我们会遇到 update anomoly - 这违反了 BCNF。我们应该只需要更新 some 表中的一行。

为了满足 BCNF,我们需要新建一个Qualification 表,如下所示:

Qualification  -- Course Fee
Certificate    -- £1200
Advanced Level -- £1900
Diploma        -- £2300

...结合新表,我们将Courses 表更改为以下内容:

Course Title -- Qualification -- Lecturer
Math         -- Advanced Level -- 2
Physics      -- Diploma        -- 1
Music        -- Certificate    -- 3
Music        -- Advanced Level -- 4

我们现在遇到了 BCNF,因为我们在 Courses 表中不再有第二个候选键 (Qualification -> CourseFee),并且能够在单行上执行我们的更新。


您可以在以下链接中找到更多有用的信息:

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-01-02
    • 2013-01-28
    • 1970-01-01
    • 1970-01-01
    • 2013-11-14
    • 2012-07-31
    • 1970-01-01
    相关资源
    最近更新 更多