我试图了解如何将关系规范化为BCNF形式。
我知道BCNF的定义是什么,我知道为了规范它,我需要消除每个D -> X
D
不是关键候选者的一部分。
并创建(D,X)
和(S,X)
的新表格。
我也读过这个帖子:
但我遇到的问题是当X是超级密钥的一部分时如何使用算法。 我会解释一下:
假设我们有这种关系:
R = (a,b,c,d,e)
FD = { {a,b}->{c} , {a,b}->{d} , {a,b}->{e} , {d}->{b} }
显然,唯一的超级密钥是(a,b)
。显然,d
不是关键候选人。
d->b
违反了BCNF,但我们不能将b
从表中删除,因为它是超级密钥的一部分。
所以我的问题是:在这种情况下,我们如何将这种关系规范化为BCNF形式?
答案 0 :(得分:0)
回答我自己的问题(在Jonathan Leffler的帮助下):
这种关系应该标准化为:
R1 = (a,b,c,e). super-key is (a,b).
R2 = (b,d). super-key is (d).
即。每次方案S
都有违反BCNF的FD D->X
:
如果D
不是密钥的一部分,则新表格为(D,X)
和(S,X)
。
如果D
是密钥的一部分,则新表格为(D,X)
和(S,D)
。
如果D
和X
都是密钥的一部分,则关系无法从中标准化为BCNF。