0

所以我有一个与 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 部分感到困惑。

4

1 回答 1

0

在您的示例中,实际上是唯一违反 BCNF 的依赖项,因为在所有其他依赖项中, B → D左侧是一个键(实际上关系的所有键都是 (A D)(A B)和)。(B C)(C D)

因此,您可以通过将原始关系拆分为contains ,即 和 ,包含,即RR1,如您正确找到的那样进行分解。B+BDR2R - B+ + BABC

如果在任何分解的关系中存在一些违反 BCNF 的依赖关系,则应再次应用此过程。但情况并非如此,因为 中的唯一依赖项R1B → D,其中 B 是唯一的键,而依赖项AB → CBC → A中的依赖R2项具有键ABBC

此时可以终止进程,因为R1R2都在 BCNF 中。但我们也应该注意,这种分解不会保留依赖关系,因为CD → AAD → B已经丢失。

于 2017-03-31T20:45:45.110 回答