我无法确定时,关系是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形式,以及如何告诉当你做挣扎。 真的很感激任何解决这些问题时,谁可以走我通过他们的思维过程。 谢谢!
虽然这个问题是旧的,其他的问题/答案似乎没有提供有关确定和分解关系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并不能保证这一点。
我希望这有帮助。
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。