3NF分解与BCNF分解

相关系列:
ER图转为关系模式
无损分解和保持依赖
3NF分解与BCNF分解
正则覆盖与候选码
如何设计ER图(弱实体集)
如何设计ER图(映射基数)


1. 3NF分解

3NF分解与BCNF分解_第1张图片

  1. 先求出正则覆盖Fc
  2. 对于Fc里面的所有函数依赖a->b,均转化为Ri=ab
  3. 对于所有的模式Ri
    • 如果包含候选码,进行第4
    • 如果都不包含候选码, 将任意一个候选码添加到模式Ri里面
  4. 如果一个模式被另一个模式包含,则去掉此被包含的模式。

例子:U={A,B,C,D,E,G},F={B->G,CE->B,C->A,CE->G,B->D,C->D}

  1. 正则覆盖为{B->DG,CE->B,C->AD}
  2. R1=BDG,R2=CEB,R3=CAD
  3. CE是候选码,R2包含CE
  4. R1,R2,R3没有包含关系
  5. 3NF分解为{BDG},{CEB},{CAD}

例子关系模式r(A,B,C,D,E,F),函数依赖集F: A->BCD,BC->DE,B->D,D->A
1.函数依赖是:A->BC.B->DE,D->A
2.R1=ABC,R2=BDE,R3=DA,不包含候选码(AF,BF,DF)中任意一个,所以任意添加一个R4=AF
3. 3NF分解为{ABC,BDE,DA,AF}

2.BCNF分解

给出R和函数依赖集F:

  1. 求出候选码
  2. 观察函数依赖集,如果左边不是超码(候选码),则不满足条件
  3. 用不满足条件的函数依赖(A->B)进行分解,这样分解之后就满足了
    • R1=AB(这样就满足了)
    • R2=(R-R1)∪A
    • F2={…}去掉B的所有函数依赖,尽可能写全
  4. 对F2进行步骤1的计算。
  5. 重复直到所有的满足条件

在这里插入图片描述在这里插入图片描述


例:R(A,B,C,D,E)
F={A->C,C->D ,B->C,DE->C,CE->A}
候选码为BE
考虑A->C,
R1=AC,R2=ABDE
F2={A->D,B->D,DE->D,BE->A,DE->A},候选码为BE,不是BCNF分解,所以继续分解。
考虑A->D
R21=AD,R22=ABE
F22={BE->A} 候选码为BE,全部满足
所以为{AC,AD,ABE}


例子:
在这里插入图片描述

R候选码为A,CD,BC,E
存在非候选码B,B->D
所以R不是BCNF分解。
考虑B->D,
R1=BD
R2=ABCE
F2={A->BC,BC->E,E->A,BC->A}候选码为A,E,BC
所以BCNF分解为{ABCE,BD}

你可能感兴趣的:(数据库)