关系数据库 – 将关系分解成BCNF

前端之家收集整理的这篇文章主要介绍了关系数据库 – 将关系分解成BCNF前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我在建立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的规范化并不能保证这一点.

我希望这有帮助.

猜你在找的MsSQL相关文章