数据库学习笔记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的子集,则该函数依赖被保存了

  在此不对这个算法的正确性做证明。

posted @ 2017-05-17 10:59  duskcloudxu  阅读(781)  评论(0编辑  收藏  举报