数据库学习笔记12_无损拆分和依赖保护概念
无损拆分,指的是把一张表R拆成R1和R2,那么R=natural join of (R1,R2)。
对于一个关系实例R和一个其所拥有的函数依赖集F+ ,R拆封出R1,R2为无损拆分当:
R1与R2的并集->R1 or R1与R2的并集->R2 在F+ 中存在时
当然这里是可以用属性闭包的。
对于依赖保护,这个也是在拆分条件下说的,对于一个拆封出的关系实例R1,其拥有的依赖集为原集中F+ 中只有R1中元素的所有依赖的集合。
那么要测试一拆分是否为依赖保护,我们只需要将所有的拆分出的关系实例R所属的F做一个并集F’,然后求其闭包F’+ 查看是否与F+相等
鉴于上一个方法的效率不怎么高,我们有两个替换方法:
1.对于每个拆分出来的关系实例进行测试,看其是否满足原集F中的所有函数依赖,若满足,则为依赖保护,但是这个只是一个充分条件,并非必要条件。
2对于每一个在原集F中的f:LA(a)->LA(b),做以下算法:
set result=a;
while(result change)
{
for(Ri in the decomposition)
{
set t=(result并Ri)+ 并Ri
result=result并t
}
}
这里的+指的是在F下的属性闭包。
当做完以后,若LA(b)为result的子集,则该函数依赖被保存了
在此不对这个算法的正确性做证明。