如何产生第三种常规形式和BCNF分解

时间:2011-11-21 18:00:32

标签: database database-design normalization 3nf

我正在尝试生成模式的3NF和BCNF分解。我一直在研究算法,但我对如何做到这一点非常困惑。

如果我的最小封面说:F' = {A->F, A->G, CF->A, BG->C)并且我已经确定了该关系的一个候选键,则说它是A。那到底我该怎么办?

我一直在看例子,其中包含以下内容:

F = {A → AB,A → AC,A → B,A → C,B → BC}

最小封面:F′ = {A → B,B → C}

最终结果是:(AB,A → B), (BC,B → C)。他们是怎么做到的?

1 个答案:

答案 0 :(得分:1)

  

如果我有我的最小封面说:F'= {A-> F,A-> G,CF-> A,BG-> C)和I   已经确定了该关系的一个候选关键字,比如它是A.然后   我究竟该怎么做?

F'不是最小限度:你必须将A-> F和A-> G组合成A-> FG

即使值得A也不能是给定F'的候选键,因为B不属于A的闭包。可能的候选键是AB。

对于3NF,您首先要为F'中的每个依赖项创建表,即

R1(A,F,G) R2(A,C,F) R3(B,C,G)

接下来,检查其中一个表是否包含候选键。由于B仅出现在依赖项的左侧,因此B应始终是候选键的一部分。唯一带有B的表是R3,它不包含候选键(检查它!)。因此,我们添加一个带有候选键的新表R4作为属性

R4(A,B)

最后,我们检查其中一个表的属性集是否包含在另一个表的属性集中。对于我们的运行示例,情况并非如此。

因此,我们的3NF分解是

  R1(A,F,G) R2(A,C,F) R3(B,C,G)  R4(A,B)

对于BCNF,你从R(A,B,C,F,G)开始,寻找BCNF违规行为。

例如A-> FG违反了BCNF,因为这种依赖性不是微不足道的,A不是超级密钥。因此我们将R分成

R1(A,F,G) and R2(A,B,C)

获得的所有关系都不包含BCNF违规,因此此过程将在此处停止。