BCNF分解,什么时候停止分解?

时间:2014-03-19 03:10:54

标签: database database-schema bcnf

我很难理解BCNF分解。

如果我有:

R=(A,B,C)

FDs: AB -> C, C -> B

计算闭包,我得出结论,最小键是{AB}和{AC}。

Therefore, 
   AB --> C is NOT in BCNF violation because AB is a key
   C --> B IS in violation because C is not a key.

I decompose C --> B like this

R1 = Closure of C = (C,B)
R2 = (A,C)

我不确定如何从这里开始。如果需要进一步分解,我需要做什么?如果我应该在这里结束,你怎么知道何时停止分解?

3 个答案:

答案 0 :(得分:0)

  

计算闭包,我得出结论,最小键是{AB}和{AC}。

R的候选键是{AB}和{AC}。

您将R分解为这两个关系,并且识别每个关系中的所有候选键

  • R 1 { AB - > Ç}
  • R 2 { C - > B}

R 1 的唯一候选键是{AB}。

R 2 的唯一候选键是{C}。属性{C}不是R中的键,但 是R 2 中的键。

答案 1 :(得分:0)

R1和R2是你停止的时候。在分解之后,您可以识别新关系中的键和功能依赖关系。 R1中的键是C(FB:C - > B,没有BCNF违规),R2中的键是AC(也没有BCNF违规)。

答案 2 :(得分:0)

AB->CC->B编写闭包:

{A,B}+ = {A, B, C} 
{C}+= {C, B}

A + B是一个超级密钥,因此它没有违反BCNF。因此,我们使用违反FD (C->B)进行分解。

{A, B, C} - {B, C} = {A} 

然后将C->B的左侧添加到{A},并{A, C}{B, C} 因此,我们将R(A, B, C)分解为R(B, C)R(A, C)