数据库学习笔记_11_canonical cover

   canonical cover:即函数依赖的最小覆盖,假设我们要在一个数据库里加上一条数据,那么我们得确定它不违背任意一条函数依赖,但是如果在函数依赖很多的情况下,那么这个检查就非常的costly.为了简化,我们得把目前的函数依赖变成一个简化的函数依赖,使得它满足其简化前和简化后的闭包相等,但是由于函数依赖的个数减少,检查就变得容易。

  定义extraneous attribute为外来属性,即在对应函数依赖中“不必要的属性”

1.A是属性集LA(a)的外来属性,如果A为LA(a)的子集,且F和(F-{LA(a)->LA(b)})并{(LA(a)-A)->LA(b)}的闭包相同

2.A是属性集LA(b)的外来属性,如果A为LA(b)的子集,且F和(F-{LA(a)->LA(b)})并{LA(a)->(LA(b)-A)}的闭包相同

  就算法来说,是:

  set Fc=F

  while(Fc change)

  {

    for any pair of fa(LA(a)->LA(b)),fb(LA(c)->LA(d))

      if(a==c) delete fa,fb,and add fc(LA(a)->LA(bd))

    for every fa in Fc test if it contains a extraneous attribute under Fc

      if it has then delete it.

  }

然后是extraneous attribute的判定

  如果A在LA(b)中,那么A为LA(b)的EA,if(这里的F指代的是检验时输入的函数依赖集)

    设F’=(F-LA(a)->LA(b))并{LA(a)->(LA(b)-A)}

    则在F’中求得LA(a)+ ,若A在LA(a+)中,说明A时多余的

  (拓展:其实讲道理,要求的化只需要求单个属性是否为EA就好了,因为若存在大于一个的属性集为EA时,其单个属性必定为EA,但是其加上其他属性却不一定为EA,故单个查找算是容易控制规模的方法)

  若A在LA(a)中,那么那么A为LA(a)的EA, if:

    设LA(y)为LA(a)-A,求得LA(y)+   查看LA(y)+ 是否包含LA(b),若包含,则A为多余属性

转载于:https://www.cnblogs.com/stultus/p/6855335.html

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值