BCNF保持无损的分解方法
- 先求最小依赖集合
- 看每个依赖是否符合BCNF
- 是,结束
- 否,例如X->A,将X->A单独拿出来,将属性集合一分为二。第一部分是(XA),第二部分不包含A的集合。分别求最小依赖集合,重复步骤1步骤2,直到左边全是候选码为止
例子1 R(A,B,C,D,E) F={B->D,E->A,CD->E,A->BC}
- 先求最小依赖集合Fm={B->D,E->A,CD->E,A->B,A->C}
- 判断每个函数依赖是否符合BCNF
- B->D 不符合BCNF 一分为2,R1(BD) R2(A,B,C,E)
- 分别求R1,R2的最小依赖集合 Fm1={B->D} Fm2={A->B,A->C,A->E} (对于R2来说,A->B,B->D,则可以A->D,因为 A->C,所以将CD->E,替换成A->E)
- 此时Fm1 Fm2(左侧全部候选码)都符合BCNF
- R1(BD) R2(AB) R3(AC) R4(AE) 合并左侧R1(BD)R2(ABCE)