求最小依赖集方法(数据库 通俗易懂)

引言

 关于求最小依赖集的方法我查了很多,但都感觉讲得不是特别好,每个人的都或多或少有点不一样,有的说的还不清楚废话多,我这里就废话不多说,直接上题。

题目

 题目有如下依赖,{A—>C, AB—>C, C—>DI, CD—>I, EC—>AB, EI—>C},求最小依赖集。

分析

 求最小依赖一共就三步,1、右部化为单属性,2、逐个尝试,能否去掉依赖关系,3、逐个尝试,能否去掉左部多余的属性。第二步和第三步看起来不是很好理解,我们从解题的过程中就很容易明白了。

步骤一

第一步右部化为单属性,这一步很简单,经过分解后上述依赖集就变成如下依赖集{A—>C,
AB—>C, C—>D, C—>I, CD—>I, EC—>A, EC—>B, EI—>C},第一步完成。

步骤二

第二步尝试能否去掉依赖,你不需要自己找去掉哪一个,你只需要把第一步得到的依赖集从头到尾试,看把这个依赖去掉后,还能否导出这个依赖关系,如果能,就去掉;如果不能,就保留。举个例子,假如把A—>C去掉,就看A的闭包里是否有C,结果A(F+) = A,A的闭包只有A,不包含C,因此这个依赖不是多余的,需要保留。对于第二个,AB—>C,假设去掉AB—>C后,AB(F+) = ABCDI,包含C,因此AB—>C这个依赖关系是多余的,因此去掉。往后的每一个都这么做就好了。需要注意的是,当你去掉这个依赖关系后,再判断下一个依赖关系能否去掉时,就不能再用你前面去掉的依赖关系了!经过第二步后,这个依赖集变成了{A—>C, C—>D, CD—>I, EC—>A, EC—>B,
EI—>C}

步骤三

第三步和第二步几乎类似,就是把去掉依赖变成了去掉左边的属性了。我们这里还是举个例子说明一下。由于前两个左边都已经是单属性了,所以不用看,直接看CD—>I,看D(F+)里是否还含有I,结果D(F+) = D,不包含I,再看C(F+)里是否包含I,结果C(F+) = CDI,包含I,这说明不需要D也可以导出I,因此CD—>I左部中的D是多余的,该依赖便修改为C—>I。接下来对于另外的依赖同样做上述判断就好了。这里需要提醒的地方和第二步有所不同,在判断时,是需要使用正在判断的依赖关系,比如我正在判断CD—>I这个依赖关系,求C的闭包时,是可以使用CD—>I这个依赖了,当然前提是C可以导出D,这样才能用到CD—>I这个依赖关系。第三步进行完后,整个过程就结束了,最后的结果是{A—>C, C—>D, C—>I, EC—>A, EC—>B, EI—>C},看看你有没有做对呢!

感谢阅读!希望这篇文章能给您带来帮助!如有疑问欢迎在评论区留言。

评论 16
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值