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}
1.正则覆盖为{B->DG,CE->B,C->AD}
2.R1=BDG,R2=CEB,R3=CAD
3.CE是候选码,R2包含CE
4.R1,R2,R2没有包含关系
5.3NF分解为{BDG},{CEB},{CAD}
2.BCNF分解
例:R(A,B,C,D,E)
F={A->C,C->D ,B->C,DE->C,CE->A}
考虑A->C,
R1=AC,R2=ABDE
F2={A->D,B->D,DE->D}
考虑A->D
R21=AD,R22=ABE
F22={BE->A}(由B->C, CE->A得到)
所以为{AC,AD,ABE}