3NF分解与BCNF分解
1.3NF分解先求出正则覆盖Fc对于Fc里面的所有函数依赖a->b,均转化为Ri=ab对于所有的模式Ri如果包含候选码,进行第4如果都不包含候选码, 将任意一个候选码添加到模式Ri里面如果一个模式被另一个模式包含,则去掉此被包含的模式。例子:...
相关系列:
ER图转为关系模式
无损分解和保持依赖
3NF分解与BCNF分解
正则覆盖与候选码
如何设计ER图(弱实体集)
如何设计ER图(映射基数)
1. 3NF分解
- 先求出正则覆盖Fc
- 对于Fc里面的所有函数依赖a->b,均转化为Ri=ab
- 对于所有的模式Ri
- 如果包含候选码,进行第4
- 如果都不包含候选码, 将任意一个候选码添加到模式Ri里面
- 如果一个模式被另一个模式包含,则去掉此被包含的模式。
例子:U={A,B,C,D,E,G},F={B->G,CE->B,C->A,CE->G,B->D,C->D}
- 正则覆盖为{B->DG,CE->B,C->AD}
- R1=BDG,R2=CEB,R3=CAD
- CE是候选码,R2包含CE
- R1,R2,R3没有包含关系
- 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:
- 求出候选码
- 观察函数依赖集,如果左边不是超码(候选码),则不满足条件
- 用不满足条件的函数依赖(A->B)进行分解,这样分解之后就满足了
- R1=AB(这样就满足了)
- R2=(R-R1)∪A
- F2={…}去掉B的所有函数依赖,尽可能写全
- 对F2进行步骤1的计算。
- 重复直到所有的满足条件
例: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}
更多推荐
所有评论(0)