(1)关系R的候选码是(A,B,C),R∈1NF,因为R中存在非主属性D,E对候选码(A,B,C)的部分函数依赖。
(2)首先消除部分函数依赖
将关系分解为:
R1(A,B,C) (A,B,C)为候选码,
R1中不存在非平凡的函数依赖
R2(B,C,D,E),(B,C)为候选码,
R2的函数依赖集为:F2={(B,C)→D,D→E}
在关系R2中存在非主属性E对候选码(B,C)的传递函数依赖,所以将R2进一步分解:
R21(B,C,D) ,(B,C)为候选码,
R21的函数依赖集为:F21 = {(B,C)→D }
R22(D,E) ,D为候选码,
R22的函数依赖集为:F22 = { D→E }
在R1中已不存在非平凡的函数依赖,在R21、R22关系模式中函数依赖的决定因素均为候选码,所以上述三个关系模式均是BCNF。
这个分解结果唯一吗,我怎么比这个答案多了一个(AE)的函数依赖集
首先,关系R的侯选码为 (A,B,C),因为它能唯一确定一条记录。其次,R属于1NF而不是BCNF,因为它存在非主属性D、E对候选码 (A,B,C) 的部分函数依赖。因此,需要对 R 进行 BCNF 分解。
首先消除部分函数依赖,将 R 分解为 R1(A,B,C) 和 R2(B,C,D,E)。其中,R1 的候选码为 (A,B,C),R2 的候选码为 (B,C)。R2 中存在非主属性 E 对候选码 (B,C) 的传递函数依赖,所以将 R2 进一步分解为 R21(B,C,D),R22(D,E)。分别可以验证,R1、R21、R22 均满足 BCNF,而 R2 不满足 BCNF。
这个分解结果唯一,因为 R 只有一个候选码 (A,B,C),消除部分函数依赖的结果也是唯一的。同时,注意到 AE 并不存在于原始函数依赖集 F 中,因此 AE 不能作为上述分解中任何一个关系的依赖集。
根据所给关系R(A,B,C,D,E)和函数依赖集F={ABC→DE,BC→D,D→E,AE→B},先来求出该关系的候选码和范式。
A+ = A B+ = B C+ = C D+ = DEB E+ = E
根据所有属性的闭包确定候选码。候选码必须包含所有属性,且不能包含冗余属性。根据以上闭包,可得候选码为AC,AB,BC,AD,AE,BD,BE,CD,CE,DE。其中,AB、AD、AE是冗余的,故可以舍去,最终的候选码为AC、BC、BD、CD、CE、DE。
判断依赖关系是否满足范式要求。依据FD依赖的左侧属性包含候选码,且右侧属性非候选码,则存在部分依赖,需要分解为2NF。根据以上分析,F已经满足2NF,即不存在部分依赖,因此范式为2NF。
由于F已经满足2NF,因此按照BCNF的要求进行分解,即使得每个新的关系模式都满足BCNF。以下是分解的步骤:
根据F,把R分解成R1(A,B,C,D,E)和R2(B,C,D,E)。其中,R1包含了F中的所有属性,R2是从R1中分离出来的一部分。此时,R2满足BCNF,因为BCNF要求任何属性都能够成为候选码,而在R2中,B、C、D、E都只能成为候选码。
对R1进行进一步的分解。根据F,有如下的非平凡函数依赖:ABC→DE、D→E、AE→B。需要根据这些依赖进行分解。如果一个关系模式满足BCNF,则不需要进一步处理。
对于函数依赖ABC→DE,可以得到新的关系模式R3(ABC,DE)。由于ABC是R1的候选码,因此R3满足BCNF。
对于函数依赖D→E,可以得到新的关系模式R4(D,E)。由于D是R1的候选码,因此R4满足BCNF。
对于函数依赖AE→B,R1中没有AE属性,需要将AE加入某个关系模式中。可以将其加入R3或R5。这里选择将AE加入R3,因此新的关系模式为R3(ABC,AE,DE)。由于ABC是R1的候选码,因此R3满足BCNF。
最终的分解结果为R2(B,C,D,E)、R3(ABC,AE,DE)、R4(D,E)。这种分解结果是唯一的,因为它满足BCNF的要求。