0

本周我有一个数据库期中考试,但在识别 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。

4

1 回答 1

2

中的违规R是部分和传递函数依赖。当这些 FD 被提取为单独的关系时,它们不再是部分的或传递的。这就是我们正常化的原因,因此它们在被隔离时不再是违规行为也就不足为奇了。

R1/R2:在REF取决于D,候选键的子集AD,所以它是部分依赖。当提取到R1D作为候选键时,依赖关系不再是部分的。剩下的R仍然R2包含部分 FD ( A -> BCG) 和传递 FD ( A -> G -> H)。

R3/R4:在中R2,传递 FD 也是。当提取到 时,它不再是可传递的。剩余部分变为但仍包含部分 FD ( )。A -> G -> HG -> HR3R2R4A -> BCG

R5/R6:在R4BCG取决于A哪个是候选键的子集AD。当提取到R5A作为候选键时,依赖关系不再是部分的。其余的R4变得R6没有任何重要的 FD。

你的最终答案应该是 R1、R3、R5 和 R6。

PS。请注意,并非所有 BCNF 违规都可以归类为部分或传递函数依赖。

于 2017-02-26T06:12:56.617 回答