我在建立Boyce-Codd Normal Form之间的关系时遇到麻烦,如果不是,请将其分解为BCNF表单.给出这个例子:
具有功能依赖性的R(A,C,B,D,E):A→& B,C – > ð
我该怎么去分解呢?
我采取的步骤是:
A = AB
C = CD
R1 = A = AB
R2 = ACDE(由于C的元素仍然存在,继续分解)
R3 = C = CD
R4 = ACE(不存在FD关闭)
所以现在我知道ACE会组成整体关系,但分解的答案是:AB,CD,ACE.
我想我正在努力如何正确地将一个关系分解成BCNF表格,以及如何告诉你什么时候完成.真正感谢任何人在解决这些问题时能够走过思想过程.谢谢!
解决方法
虽然这个问题是旧的,但其他的问题/答案似乎并不能为确定和分解与BCNF的关系提供一个非常明确的一般性答案.
1.确定BCNF:
对于在BCNF中的关系R,保存在R中的所有功能依赖性(FD)需要满足决定因素X都是R的超级密钥的属性.即,如果X> Y保持在R中,则X必须是超键的R在BCNF.
在你的情况下,可以显示唯一候选键(最小超级键)是ACE.
因此,两个FD:A> B和C> D违反BCNF,因为A和C都不是超键或R.
将R分解成BCNF形式:
如果R不在BCNF中,则将R分解成BCNF中的一组关系S.
这可以用非常简单的算法来实现:
Initialize S = {R} While S has a relation R' that is not in BCNF do: Pick a FD: X->Y that holds in R' and violates BCNF Add the relation XY to S Update R' = R'-Y Return S
在你的情况下,迭代步骤如下:
S = {ABCDE} // Intialization S = {R} S = {ACDE,AB} // Pick FD: A->B which violates BCNF S = {ACE,AB,CD} // Pick FD: C->D which violates BCNF // Return S as all relations are in BCNF
因此,R(A,E)被分解成满足BCNF的一组关系:R1(A,E),R2(A,B)和R3(C,D)
还要注意,在这种情况下,功能依赖性被保留,但BCNF的规范化并不能保证这一点.
我希望这有帮助.