1

我试图了解如何将关系规范化为 BCNF 形式。我知道 BCNF 的定义是什么,并且我知道为了使其正常化,我需要消除所有不属于关键候选的D -> X地方。D并创建 和 的新(D,X)(S,X)

我也读了这个线程:

  1. 归一化为 BCNF
  2. BCNF分解
  3. 3NF和BCNF的区别

但是我面临的问题是当 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 形式?

4

1 回答 1

0

回答我自己的问题(在 Jonathan Leffler 的大力帮助下):

这种关系应该归一化为:

R1 = (a,b,c,e). super-key is (a,b).
R2 = (b,d). super-key is (d).

即,每当一个计划S有一个D->X违反 BCNF 的 FD 时:

如果D不是键的一部分,则新表是(D,X)and (S,X)
如果D 键的一部分,则新表是(D,X)and (S,D)
如果两者DX都是密钥的一部分,则关系不能从规范化为 BCNF。

于 2013-07-18T16:31:26.277 回答