分解到关系BCNF(Decomposing a relation into BCNF)

2019-08-17 05:25发布

我无法确定时,关系是BC范式以及如何分解它的信息BCNF如果事实并非如此。 鉴于这个例子:

R(A,C,B,d,E)具有功能性依赖关系:A - > B,C - > d

我该如何去分解呢?

我已经采取的步骤是:

A+ = AB  
C+ = CD  
R1 = A+ = **AB**  
R2 = ACDE (since elements of C+ still exist, continue decomposing)  
R3 = C+ = **CD**  

R4 = ACE(无封FD驻留在该关系)

所以,现在我知道,ACE将组成整体关系,但分解的答案是:AB,CD,ACE。

我想我和如何正确分解一个关系到BCNF形式,以及如何告诉当你做挣扎。 真的很感激任何解决这些问题时,谁可以走我通过他们的思维过程。 谢谢!

Answer 1:

虽然这个问题是旧的,其他的问题/答案似乎没有提供有关确定和分解关系BCNF一个非常明确的一步一步的一般的答案。

1.确定BCNF:
对于关系R是在BCNF,所有R中保持函数依赖(FDS)需要满足的特性,即决定X是R.即所有superkeys如果X->ý中的R成立,则X必须是一个超密钥R设定为在BCNF。

在你的情况下,可以证明的唯一候选键(最小的超密钥)是ACE。 因此,两个的FD:A-> B和C> d违反了BCNF为A和C两者都没有superkeys或R.

2.分解R导入BCNF形式:
如果R不属于BCNF,我们分解R导入一组关系S中的在BCNF的。
这可以用一个很简单的算法来实现:

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,B,C,d,E)被分解成一组关系的:R1(A,C,E),R 2(A,B)和R3(C,d)满足BCNF。

还要注意的是,在这种情况下,函数依赖被保留,但正常化BCNF并不能保证这一点。

我希望这有帮助。



Answer 2:

1NF - > 2NF - > 3NF - > BCNF

根据给定的FD集“ACE”形成的关键。 显然R(A,B,C,d,E)不在2NF。 2NF分解给出R1(A,B),R 2(C,d)和R3(A,C,E)。 这种分解分解关系是3NF,也属于BCNF。



文章来源: Decomposing a relation into BCNF