这些依赖项的 BCNF 分解是什么?
A->BCD
BC->DE
B->D
D->A
得到答案的过程是什么?
我们可以先将关系转换R
为 3NF,然后再转换为 BCNF。
要将关系R
和一组函数依赖项(FD's
)转换为3NF
您可以使用伯恩斯坦的综合。应用伯恩斯坦的综合 -
FD's
是最小覆盖FD
并使其成为自己的子模式。例如在你的情况下:
R = {A,B,C,D,E}
FD's = {A->BCD,BC->DE,B->D,D->A}
首先我们检查是否FD's
是最小覆盖(单例右侧,没有多余的左侧属性,没有多余的 FD)
C
从 FDBC->D
和中删除了多余的 LHS 属性BC->E
。所以现在我们有 FD 为 {A->B, A->C, A->D, B->D, B->E, B->D, D->A}其次,我们使每个子模式都有FD
自己的子模式。所以现在我们有了 - (每个关系的键都是粗体的)
R 1 ={ A ,B}
R 2 ={ A ,C}
R 3 ={ B ,D}
R 4 ={ B ,E}
R 5 ={ D ,A}
第三,我们看看是否可以组合任何子模式。我们看到R 1和R 2具有 LHS,因此它们可以组合。类似地, R 3和R 4可以组合。所以现在我们有 -
S 1 = { A ,B,C}
S 2 = { B ,D,E}
S 3 = { D ,A}
这是在3NF中。现在要检查BCNF,我们检查这些关系(S 1,S 2,S 3)是否违反BCNF的条件(即,对于每个函数依赖X->Y
,左侧 ( X
)必须是超键)。在这种情况下,这些都没有违反BCNF,因此它也被分解为BCNF。