不合理的关系模式存在的异常问题
1.数据冗余
2.插入异常
3.删除异常
4.更新异常
产生上述问题的根本原因----属性间存在着数据依赖关系
函数依赖
平凡函数依赖----是子集((Sno,Sn,Age)确定时,(Sno,Age)自然也确定了)
非平凡函数依赖----不是子集
全集
F+
(a,b,c)的全集数量 = 2^3 * 2^3 = 64;
超码与候选码区别
超码虽然能决定所有属性,但其中可以包含候选码以外的其他属性(有冗余)
候选码求解算法
将属性分为L、R、N、LR四类,然后求属性的闭包
注意求候选码时,要严格按照候选码求解算法,找出所有候选码
最小函数依赖集求解算法(Fmin)
(1)将F中每个函数依赖的右边变成单属性
(2)去掉F中各函数依赖左边的多余属性,如BC->A,由B+=ABC,可将C去除
(3)去除F中冗余的函数依赖(传递函数依赖)
关系模式的分解
无损连接
保持依赖
无损分解的测试算法
---------------------------范式的规范化------------------------------------
第一范式
表中不能套表
第二范式
每个非主属性都完全函数依赖于R的主码
第三范式
每个非主属性都不传递函数依赖于R的主码
求解算法
1.先求出Fmin
2.如果Fmin有一函数依赖X->A,且XA=R,则直接输出,结束
3.如果有N类的属性,将他们构成关系模式,从R中将他们分出去,单独构成一个模式
4.对于Fmin中每一个函数依赖X->A,都单独构成一个关系子模式XA。若Fmin中有X->A1,X->A2,......则可以用XA1A2代替输出
保持函数依赖和无损连接的3NF算法
1.先根据上面的算法求出3NF
2.判断是否具有无损连接性,若无则将候选码作为新表加入集合
BC范式
消除任何属性(主属性和非主属性)对主码的部分函数依赖和传递函数依赖
如果一个范式是BCNF则必定是3NF,BCNF比第三范式更严格。