我正在尝试将表格从第三范式更改为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
我向您提供帮助,请您向我解释这个概念,以便我能理解,谢谢。
我认为那里没有足够的信息来确定如何从3NF到达BCNF。为了推断functional dependencies和candidate keys,我们需要了解表中各列之间的super keys。除了StudentCourse
已经符合BCNF之外,所有表都没有出现在多行中的信息无济于事。
查看数据,出于工作示例的目的,我们可以假定功能依赖关系。这并不意味着我提供的答案是正确的,但是在假定的情况下会给出一些见解。
让我们假定:
让我们还假定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
在这里,表中有两个函数依赖的情况:
Course Title, Lecturer
)->(Course Fee, Qualification
)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
,并且可以单行执行更新。
您可以在以下链接中找到更多有用的信息: