BCNF和功能依赖

时间:2018-02-25 11:45:44

标签: database database-normalization relational 3nf bcnf

我正在尝试了解对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。

1 个答案:

答案 0 :(得分:0)

当您检查分解关系的BNCF是否满意时,您必须检查每个关系的单独的功能依赖关系。

因此,在R1={D, A, B, C}中,唯一(候选)键是D(正如您所注意到的),所有非平凡的依赖关系只有D作为左侧部分;在R2 = {E,D,F,G}中,唯一(候选)键是E,其中所有非平凡的依赖关系仅剩下E作为左侧部分。因此,在这两种关系中都没有违反BCNF的(非平凡的)依赖关系,因此分解是正确的,不能做任何其他事情。