极小函数依赖集求解算法——数据库考试复习

前言

定义:如果函数依赖集F满足下列条件,则称F为一个极小函数依赖集。亦称为最小覆盖。
(1)F中任一函数依赖的右部仅含有一个属性。
(2)F中不存在这样的函数依赖X→A,使得F与F-{X→A}等价。
(3)F中不存在这样的函数依赖X→A, X有真子集Z使得(F- {X→A})∪{Z→A}与F等价

换句话说,极小函数依赖集就是消除函数依赖集中重复蕴含的依赖。极小函数依赖集是求候选码、判断模式分解无损连接性和进行保持函数依赖性3NF求解常用的工具,了解此算法非常重要。

算法

假设:关系模式R<U,F>,其中U属性集,F为属性集上的函数依赖,求F的极小函数依赖集的算法如下:
①应用分解规则,使得F中的每一个函数依赖的右部属性单一化。
②去掉多余的依赖:由第一个依赖开始,在F中去掉它(假设为:X->Y),在其余的函数依赖中求X在F其余依赖上的属性闭包,若闭包含有Y则可以去掉函数依赖X->Y,否则不能
③去掉左部多余的属性:逐一检查F左边非单属性的依赖,若XY->A,能否替换为X->A.具体做法在求X在F上的属性闭包,若包含A,则可替换,否则不可替换

示例

【例1】:设关系模式R(ABCDE)上的函数依赖集F={A→BC, BCD→E, B→D, A→D, E→A},求F的极小依赖集
解:第一步:将右部单一化
F={A→B,A→C, BCD→E, B→D, A→D, E→A}
第二步:去掉多余的函数依赖
假设去掉:A→B,F={A→C, BCD→E, B→D, A→D, E→A},求A F + _F^+ F+={ACD},不包含B,A→B不能去掉
假设去掉:A→C,F={A→B,BCD→E, B→D, A→D, E→A},求A F + _F^+ F+={ABD},不包含C,A→C不能去掉
假设去掉:BCD→C,F={A→B,A→C, B→D, A→D, E→A},求BCD F + _F^+ F+={BCD},不包含E,BCD→C不能去掉
假设去掉:B→D,F={A→B,A→C, BCD→E, A→D, E→A},求B F + _F^+ F+={BD},不包含E,B→D不能去掉
假设去掉:A→D,F={A→B,A→C, BCD→E, B→D, E→A},求A F + _F^+ F+={ABCD},包含D,A→D可以去掉,得到 F={A→B,A→C, BCD→E, B→D, E→A}
假设去掉:E→A, F={A→B,A→C, BCD→E, B→D},求E F + _F^+ F+={E},不包含A,E→A不能去掉
此时F={A→B,A→C, BCD→E, B→D, E→A}
第三步:去掉左部的冗余
尝试使用BC→E代替BCD→E,F={A→B,A→C, BCD→E, B→D, E→A},BC F + _F^+ F+={BCDE},包含E,可以使用BC代替BCD→E;
F={A→B,A→C, BC→E, B→D, E→A}
尝试使用B→E代替BC→E,F={A→B,A→C, BC→E, B→D, E→A},B F + _F^+ F+={BD},不包含E;不可替换
尝试使用C→E代替BC→E,F={A→B,A→C, BC→E, B→D, E→A},C F + _F^+ F+={C},不包含E;尝试使用D→E,D F + _F^+ F+={D},不包含E,不可替换
因此最小依赖集F‘={A→B,A→C, BC→E, B→D, E→A}

例2】设R(U,F)是一个关系模式,U=(A,B,C,D,E,G) F={BG→C,BD→E,DG→C,ADG→BC,AG→B,B→D},求F最小依赖集

  1. 右部单一化
    F={BG→C,BD→E,DG→C,ADG→B,ADG→C,AG→B,B→D}
  2. 消除冗余的函数依赖
    去掉BG→C,F={BD→E,DG→C,ADG→B,ADG→C,AG→B,B→D}, BG F + _F^+ F+={BGDEC},包含C,可以去掉
    去掉BD→E,F={DG→C,ADG→B,ADG→C,AG→B,B→D}, BD F + _F^+ F+={BD},不包含E,不能去掉
    去掉DG→C,F={BD→E,ADG→B,ADG→C,AG→B,B→D}, GD F + _F^+ F+={GD},不包含C,不能去掉
    去掉ADG→B,F={BD→E,DG→C,ADG→C,AG→B,B→D},ADG F + _F^+ F+={ABDGC},,包含B,可以去掉
    去掉ADG→C,F={BD→E,DG→C,AG→B,B→D},ADG F + _F^+ F+={ACDG},包含C,可以去掉
    去掉AG→B,F={BD→E,DG→C,B→D},AG F + _F^+ F+={AG},不包含B,非冗余
    去掉B→D,F={BD→E,DG→C,AG→B},B F + _F^+ F+={B},不包含D,非冗余
    最终结果为:F={BD→E,DG→C,AG→B,B→D}
  3. 消除左部冗余属性
    消除BD→E,冗余的左部,假设B→E,B F + _F^+ F+={BDE},包含E,可以使用B→E代替,BD→E;
    此时:F={B→E,DG→C,AG→B,B→D}
    消除DG→C,冗余的左部,假设D→C,D F + _F^+ F+={D},不包含C,不可替换;假设G→C,G F + _F^+ F+={G},不包含C,不可替换
    消除AG→B,冗余的左部,假设A→B,A F + _F^+ F+={A},不包含B,不可替换;假设G→B,B F + _F^+ F+={G},不包含B,不可替换
    极小依赖集为:F’={B→E,DG→C,AG→B,B→D}

总结

极小函数依赖集求解过程中,消除冗余的函数依赖是假设 α → β α→β αβ成立的条件下,F1=F − - { α → β α→β αβ},求 α α α在F1属性闭包。消除左部冗余的属性,假设消除后的消除冗余的函数依赖集合为F,XA→Y,去掉A,判断X→Y是否成立,是求X在F下的属性闭包,F中包含XA→Y,还要注意极小依赖集最终结果不唯一

  • 25
    点赞
  • 78
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值