所以我有这组关系
AB->CDEF
G->H,我
ABJ->K
C->L
我应该如何分解这个?我感到很困惑。我应该先找到一组超级密钥吗?
所以我有这组关系
AB->CDEF
G->H,我
ABJ->K
C->L
我应该如何分解这个?我感到很困惑。我应该先找到一组超级密钥吗?
我们可以先将关系转换R
为 3NF,然后再转换为 BCNF。
要将关系R
和一组函数依赖项(FD's
)转换为3NF
您可以使用伯恩斯坦的综合。应用伯恩斯坦的综合 -
FD's
是最小覆盖FD
并使其成为自己的子模式。例如在你的情况下:
R = {A,B,C,D,E,F,G,H,I,J,K,L}
FD's = {AB->CDEF,G->HI,ABJ->K,C->L}
首先我们检查是否FD's
是最小覆盖(单例右侧,没有多余的左侧属性,没有多余的 FD)
其次,我们使每个子模式都有FD
自己的子模式。所以现在我们有了 - (每个关系的键都是粗体的)
R 1 ={ A,B ,C}
R 2 ={ A,B ,D}
R 3 ={ A,B ,E}
R 4 ={ A,B ,F}
R 5 ={ G ,H}
R 6 ={ G ,I}
R 7 ={ A,B,J ,K}
R 8 ={ C ,L}
第三,我们将所有子模式与相同的 LHS 结合起来。所以现在我们有 -
S 1 = { A,B ,C,D,E,F}
S 2 = { G ,H,I}
S 3 = { A,B,J ,K}
S 4 = { C ,L}
由于上述分解的关系都不包含R的键,我们需要创建一个附加的关系模式,其中包含R的键形式的属性。这是为了确保保留依赖关系的无损连接分解。所以我们添加 -
S 5 = { A,B,G,J }
ABGJ 是原始关系 R 的键
这是在3NF中。现在要检查BCNF,我们检查这些关系中的任何一个(S 1,S 2,S 3,S 4,S 5)是否违反了BCNF的条件(即,对于每个函数依赖X->Y
,左侧 ( X
)必须是超键) . 在这种情况下,这些都没有违反BCNF,因此它也被分解为BCNF。