本周我有一个数据库期中考试,但在识别 BCNF 违规行为时遇到了麻烦。我知道如何分解关系并找出哪个是键,哪个是超键。我还可以写出隐含的 FD。我正在观看以下视频:https ://www.youtube.com/watch?v=hTFyG5o8-EA 。
总结一下,解释的女士开始将 BCNF 算法应用于以下关系(她使用了学生示例,但我已将其转换为字母以简化它):
R(A, B, C, D, E, F, G, H) 带 FD:A -> BCG, G -> H, D -> EF。
我知道关键是 AD,因为它的关闭是 AD+ = ABCDEFGH。她说提出的所有 FD 都是违规行为,并开始应用该算法:
BCNF 尝试 #1:
R1 = D -> EF (D+ = DEF) // 没有违规,但为什么?不就是违规吗?
R2 = ABCDEFG - (DEF - D) = ABCDGH // 违规,也很困惑为什么?它包含两个键。
BCNF 在 R2 上尝试 #2:
R3 = G -> H (G+ = GH) // 没有违规,因为只有两个属性 GH,我相信
R4 = ABCDG // 违规,但我不知道为什么。
BCNF 在 R4 上尝试 #3:
R5 = A -> BCG // 无违规 (?)
R6 = AD // 没有违规 (?)
最终关系: R1、R2、R5、R6。