判断左部属性是否多余:
已知alpha --> beta F(函数依赖集合)
A为alpha的一个子属性,若其多余,则
alpha-A --> beta (在F上求闭包)
alpha-A在F上求出来的闭包如果和alpha的闭包一致,则左部属性A多余。
判断右部属性是否多余:
已知alpha --> beta F(函数依赖集合)
A为beta的一个子属性,若其多余,则
alpha --> beta (在F'上求闭包 其中F'是 F-{alpha-->beta}∪{alpha-->beta-A})
alpha在F'上求出来的闭包如果和alpha在F上求出来的闭包一致,则右部属性A多余。
Fc(对于没有冗余的函数依赖使用合并规则得到):
合并规则: alpha-->beta & alpha-->gama ==》 alpha-->beta gama
∵A-->B A-->Y ==》 A-->AB AB-->BY
已知一个函数依赖集,求它的正则覆盖。也就是没有冗余的左部属性和右部属性。
求正则覆盖的算法:
{ 1.使用合并规则
2.判断是否冗余
3.若有,删去冗余
合并
}loop until Fc is steady
无损连接:分解为多个部分后通过自然连接可以恢复的分解称为无损连接分解。
保持依赖:
定义:原来的函数依赖都能在分解后连接得到的表内找到则称该分解是保持依赖的。
判断保持依赖的算法:
已知 F(函数依赖集) Ri(分解后的scheme),判断alpha -->A这个函数依赖是否被保持。
1.result = alpha
{ 2.t = (result∩Ri)的闭包 ∩ Ri
3.result = result ∪ t
}loop until result not change
如果alpha通过上面的算法,得到的result含有A,则称alpha-->A这个依赖在分解中被保持。