我有一个R(A,B,C,D)与功能依赖关系ABC -> D和D -> A。
问题是,这是否有BCNF,答案如下:

(c) ABCD不在BCNF中,因为D->A和D不是关键。然而,如果我们将R拆分为AD,BCD,我们不能保留依赖ABC -> D,因此没有BCNF分解。
现在,我的问题是,如果将关系式R拆分为R1(A,D)和R2(BCD),则无法保留ABC->D,但如果将R2(BCD)E 218更改为E 119r2(ABCD)E 220怎么办?那会不会保存下来呢?我们有什么理由不能这么做吗?
发布于 2014-06-07 18:14:58
您从两种方式将“所以没有BCNF分解”从上下文中取出来。没有(无损的) BCNF分解(1)为所有较小的关系(每comment) (2)保存所有的FDs (每comment)。
人们可以在保存FDs的同时,将其无损地分解为3NF,但BCNF可能无法保存它们。然而,这是一个无损的分解:组件,如果持有原来的投影,将加入到原始。但是,只要原图有一个给定的值,组件就应该是它的投影。(如果不是,则会出现错误,因此我们希望DBMS能够适当地约束组件。)因此,约束构件为原始投影是必要的,但也是足够的。ABC一点也不重要(因为它是关键)。这使得我们需要要求AD = ABCD项目{DA}。我们说组件必须满足“平等依赖”。
你可以永远不损失分解到5NF。如果要约束每个未保存的FDs的组件,则只需添加相等的依赖约束即可。
https://stackoverflow.com/questions/24073672
复制相似问题