我正在尝试学习BCNF。
假设
R =(A,B,C,D)
和
F = {C→D,C→A,B→C}
我猜R不是在BCNF中,因为C是C→A
,C→A
,而是B→C
。如何改善答案,如何分解使其成为BCNF?
短语“ R不在BCNF中”无效,因为只有功能依赖项(FD)才可能违反BCNF。
要根据您的情况进行分解,请先找到候选键(FD关闭后可以获取所有属性的最小键)
Key = B
,因为B + = {A,B,C,D}
BCNF的法则:left side of all FDs need to be superkeys
让我们从第一个FD开始,C-> D
[C -> D violates BCNF
因为C is not a superkey of B
分解公式:Assume X -> Y, R1 = X+, R2 = R - (X+ - X)
在我们的例子中,使用基本数学,R1 = (C,D), R2 = (A,B,C)
现在C-> D满足BCNF
第二FD:C -> A violates BCNF
,因为C is not a superkey of B
由于R2包含那些属性,因此使用与上面相同的公式分解R2:
R21 = (A,C), R22 = (B,C)
现在C-> A满足BCNF
让我们检查最后一个FD,B -> C satisfies BCNF
,因为B is superkey of B
因此分解后,R =(A,B,C,D)分解为
R1 = (C,D)
R2 = (A, C)
R3 = (B, C)