您能否请我提供一篇文章,其中提供了3NF但不在BCNF中的数据库设计示例,然后说明如何将其转换为BCNF?我看到的所有试图解释BCNF的文章给出了1NF中表格的例子,然后将它们转换为BCNF。这不让我看到3NF和BCNF之间的区别。
提前致谢
答案 0 :(得分:0)
具有谓词和匹配约束。
| 员工(EMP_ID),电子邮件(EMAIL),参加年度(YR)课程(CRS_ID)。
每位员工和课程;该员工最多参加一次该课程,有可能不止一名员工参加该课程。
对于每位员工,该员工只有一封电子邮件。
对于每封电子邮件,只有一位员工拥有该电子邮件。
每位员工和课程;该员工在一年内完成了该课程。
每位员工和年份;该员工有可能在那一年参加过多门课程。
每个课程和年份;那一年可能有多名员工参加了该课程。
R {EMP_ID, EMAIL, CRS_ID, YR} KEY {EMP_ID, CRS_ID} KEY {EMAIL, CRS_ID}
这个的FD是
FD {EMP_ID, CRS_ID} --> {YR} FD {EMAIL, CRS_ID} --> {YR} FD {EMP_ID} --> {EMAIL} FD {EMAIL} --> {EMP_ID}
因此,考虑到FD X --> Y
中的每一个都认为 ,
,因此R
位于第3个NF。
对于BCNF,要求是FD X --> Y
中的任何非平凡R
,X都是超级密钥。
所以,现在我们可以将其分解为
{EMP_ID, EMAIL} {EMP_ID, CRS_ID, YR} OR {EMP_ID, EMAIL} {EMAIL, CRS_ID, YR}
将消除这两个FD到子键。
以下是2NF到BCNF的检查清单
--------------------------------------- For each nontrivial | NF FD X --> Y | at least one holds | 2nd 3rd BCNF --------------------------------------- X is a superkey ✔ ✔ ✔ Y is a subkey ✔ ✔ X is not a subkey ✔ --------------------------------------- FD X --> Y is trivial iff Y ⊆ X