繁体   English   中英

分解为BCNF

[英]Decomposition to BCNF

虽然我确实了解正常形式是什么,但在使用它们时遇到了麻烦。 我正在学习数据库系统的课程,因此在某种程度上我迷失了方向。 我尝试过Google,stackoverflow,课程幻灯片和书籍,但是每次出现的示例似乎都使我偏离了轨道。 如果我在这篇文章中做出一些错误的假设/结论,我将非常希望获得一些指导,但最后我还是会缺少一些指导。

我今天参加的一个具体练习是:给定此数据库,将其转换为BCNF:

DB:  
AB -> EF  
F -> AB  
A -> CD

据我了解,这里有两个可能的候选键。 AB和F。这是因为两者都可以派生整个DB,并且在它们都由一个左侧组成的意义上来说两者都是最小的。

假设我们将F作为主键。
最初: DB(F->AB)

对于1NF,似乎没有重复的基团。 校验。
对于2NF,似乎没有部分依赖性。 (用F作为唯一主键,这不是不可能吗?)
对于3NF,有一个问题! AB和A都不是键,而是确定其他属性。 为了解决这个问题,他们需要成为关键:(很抱歉,没有下划线,似乎没有选择下划线的选项)

DB(F->AB)
R1(AB->EF)
R2(A->CD)

据我了解,对于BCNF,该过程如下:将3NF DB与原始DB进行比较。 查找原始DB中出现的整个3NF DB,至少存在一个右侧的情况。 我不太确定怎么可能没有这个。 也许我误会了这部分。 无论如何,继续;

第一次出现是F-> AB。 这是主键,因此可以。
第二次出现是AB-> EF。 由于AB是候选键,因此也可以。
最后一次出现是A-> CD。 A只是候选密钥的一部分。 这违反了BCNF,必须重写。 这就是我完全下车的地方。 我不知道如何重写它,并且我不确定到目前为止该程序是否有意义。 谁能帮我把它包好吗?

您是对的:A-> CD是违反BCNF的依赖项。 您将关系分为两部分:

  • 违反依赖性的属性:ACD
  • 违反依赖项(A)右侧的属性以及其余属性:这样就得到ABEF

因为所有功能依赖项均符合BCND规则,所以在这里停止。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM