首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >BCNF分解查询

BCNF分解查询
EN

Stack Overflow用户
提问于 2014-06-06 03:20:29
回答 1查看 635关注 0票数 0

我有一个R(A,B,C,D)与功能依赖关系ABC -> DD -> 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怎么办?那会不会保存下来呢?我们有什么理由不能这么做吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-06-07 18:14:58

您从两种方式将“所以没有BCNF分解”从上下文中取出来。没有(无损的) BCNF分解(1)为所有较小的关系(每comment) (2)保存所有的FDs (每comment)。

来自this answer

人们可以在保存FDs的同时,将其无损地分解为3NF,但BCNF可能无法保存它们。然而,这是一个无损的分解:组件,如果持有原来的投影,将加入到原始。但是,只要原图有一个给定的值,组件就应该是它的投影。(如果不是,则会出现错误,因此我们希望DBMS能够适当地约束组件。)因此,约束构件为原始投影是必要的,但也是足够的。ABC一点也不重要(因为它是关键)。这使得我们需要要求AD = ABCD项目{DA}。我们说组件必须满足“平等依赖”。

你可以永远不损失分解到5NF。如果要约束每个未保存的FDs的组件,则只需添加相等的依赖约束即可。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24073672

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档