将3NF转换为BCNF

问题描述 投票:0回答:1

我正在尝试将表格从第三范式更改为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

我向您提供帮助,请您向我解释这个概念,以便我能理解,谢谢。

database-design normalization database-normalization bcnf
1个回答
0
投票

我认为那里没有足够的信息来确定如何从3NF到达BCNF。为了推断functional dependenciescandidate keys,我们需要了解表中各列之间的super keys。除了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,因为我们在Qualification -> CourseFee表中不再有第二个候选键(Courses,并且可以单行执行更新。


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

© www.soinside.com 2019 - 2024. All rights reserved.