我正在尝试了解对BCNF的分解。我已经阅读了很多例子,但我仍然不了解一些事情。我按照这个answer尝试解决以下问题:
属性是客户名称(A),地址(B),电话(C),ID(D)和帐户有数字(E),类型(F)和余额(G)。
如果客户只有一个ID,姓名,地址和电话号码,并且帐户只有一个号码,类型和余额,并且只有一个客户拥有,那么功能依赖性是什么?使用R(ABCDEFG)
的这些依赖关系进行BCNF分解到目前为止我所得到的:
首先获得问题中指定的FD:
D -> ABC // If we agree on same customer ID, then we agree on the name, address and phone #
E -> DFG // If we agree Account number, then we agree on customer ID, account balance and account type
我们唯一的候选键是{E},因为可以使用此属性获取所有属性。
由于没有无关的左侧属性且没有冗余的FD,我来到了以下关系表:
R 1 = { D ,A,B,C}
R 2 = { E ,D,F,G}
这两个关系中的键以粗体
现在检查 BCNF ,我们检查是否有任何这些关系(R 1 ,R 2 )违反了的条件BCNF (即每个功能依赖X->Y
左侧(X
)必须 超级键 )。
现在我们可以看到 E - > DFG 的左侧是超级密钥。但是 D - > ABC 没有左手边是超级钥匙。因此FD违反了BCNF。但我不知道如何分解成BCNF。
答案 0 :(得分:0)
当您检查分解关系的BNCF是否满意时,您必须检查每个关系的单独的功能依赖关系。
因此,在R1={D, A, B, C}
中,唯一(候选)键是D
(正如您所注意到的),所有非平凡的依赖关系只有D
作为左侧部分;在R2 = {E,D,F,G}中,唯一(候选)键是E
,其中所有非平凡的依赖关系仅剩下E
作为左侧部分。因此,在这两种关系中都没有违反BCNF的(非平凡的)依赖关系,因此分解是正确的,不能做任何其他事情。