BCNF
这一范式要求:
对F中所有FD = {α -> β}:要么是Trival的FD, 要么α -> R(α 是超码)
检查是否为BCNF
等价于检查α是否是超码:在之前的函数依赖理论里已经提到如何判断α是否是超码
等价于 判断: α+ == R
【注】求α+只需要在F下即可,不需要在F+下,因为α在F下的closure满足是超码,在F+下一定也满足(F+由F通过Armstrong公理推导出来的)
【注注】上面的注仅可以在原R中使用,若发生了分解(左部发生了拆分),不可通过F来判断子关系是否满足BCNF,必须通过F+判断
分解:FD = {α -> β} , 分解出子关系 Ri = (αβ) //Ri 一定满足BCNF(因为α -> αβ是超码)
总结:
BCNF保证函数依赖集中每条函数依赖的左部都是R的超码(去除了冗余)
BCNF分解不总是保持依赖的
3NF
比BCNF弱一些的范式,允许存在冗余