如何将表规范化为BCNF表单

时间:2013-07-18 14:21:58

标签: database database-design normalization database-schema

我试图了解如何将关系规范化为BCNF形式。 我知道BCNF的定义是什么,我知道为了规范它,我需要消除每个D -> X D不是关键候选者的一部分。 并创建(D,X)(S,X)的新表格。

我也读过这个帖子:

  1. Normalisation into BCNF
  2. BCNF Decomposition
  3. Difference between 3NF and BCNF
  4. 但我遇到的问题是当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形式?

1 个答案:

答案 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)
如果DX都是密钥的一部分,则关系无法从中标准化为BCNF。