所以我有一个与FD的关系模式,如下所示:
R(A,B,C,D): AB -> C, B -> D, CD -> A, AD -> B
现在我试图查找所有BCNF违规,然后分解表格。我计算了所有FD的左侧,发现了这个:
AB+ = {A, B, C, D}
B+ = {B, D} <- violation
CD+ = {C, D, A, B}
AD+ = {A, D, B, C}
所以我将表分解为这样:
R1 (B, D)
R2 (A, B, C)
唯一的问题是,我不确定在分解表格时是否需要做这些事情,或者我是否需要做更多事情。我主要对AB,CD和AD部分感到困惑。
答案 0 :(得分:0)
在您的示例中,B → D
实际上是唯一违反BCNF的依赖项,因为在所有其他依赖项中,左侧是一个键(实际上该关系的所有键都是(A D)
,(A B)
,(B C)
和(C D)
)。
因此,您可以通过拆分包含R
的{{1}}中的原始关系R1,
进行分解,B+
和BD
,包含{{1}你正确找到的那就是R2
。
然后,如果在任何分解关系中存在违反BCNF的某些依赖性,则应该再次应用此过程。但事实并非如此,因为R - B+ + B
中唯一的依赖项是ABC
,其中B是唯一的密钥,R1
和B → D
中的依赖项AB → C
},包含密钥BC → A
和R2
。
此时可以终止该过程,因为AB
和BC
都在BCNF中。但我们还应该注意,此分解不会保留依赖关系,因为R1
和R2
已丢失。