正则覆盖的求法与判断属性是否冗余
正则覆盖定义:一个依赖集F的正则覆盖Fc也是一个依赖集,F逻辑蕴含Fc中所有依赖,且Fc逻辑蕴涵F的所有依赖。Fc满足以下两个特性
·Fc中任何函数依赖都不含无关属性
·Fc中函数依赖左半部分都是唯一的,不允许重复
正则覆盖求解法:
一.使用合并律将所有左部相同的函数依赖合并成一个
例1:设有一函数依赖集F,其中有{A→B,A→E,……},则将这两个函数依赖合并为{A→BE,……}
二.在合并后的函数依赖集中寻找一个无关属性,将它删除
无关属性的定义是什么呢?下面马上就提到
三.重复1、2步骤,直到依赖集不再发生变化
无关属性的判断(又称冗余):
给定一个函数依赖集F:
若要判断的属性位于依赖的右侧,例如{AB→C,……},则删除该属性,在余下的函数依赖集F'中计算该依赖左部集合的闭包α+。若α+中包含要判断的属性,则该属性就是无关属性(冗余)
例2:F{A→BC,B→AC,C→AB}
关注B属性。它在依赖右侧。删除该属性,余下F'={A→C,B→AC,C→AB},计算左侧剩余属性集(A)的闭包(A)+。
因为A→C,C→AB,所以(A)+中包含删去的属性B
故B是无关属性
若要判断的属性位于依赖的左侧,例如{AB→C},则删除该属性,在原本的依赖集F中计算该依赖左部集合的闭包α+。若α+闭包中包含该依赖右侧所有的属性,则该属性则是无关属性
例3:函数依赖集F{Z→X,X→P,XY→WP,XYP→ZW}
关注到XYP中的P属性。它在左侧。删除它,求解左侧剩下属性集XY的闭包,求取域是原来的F{Z→X,X→P,XY→WP,XYP→ZW}。因为XY→WP,所以(XY)+ = XYWP;又因为XYP→ZW,所以(XY)+ = XYWPZ,包含依赖右侧ZW
故P是无关属性
例4:F{A→BC,B→C,AB→C}
关注AB→C的A属性。删除它后余下的部分B→C在F中已经存在,故A是无关属性
一道完整的正则覆盖的题目:
例5:F={Z→X,X→P,XY→WP,XYP→ZW},求出一个正则覆盖
第一次循环,未发现可合并项;直接快进至寻找无关属性
首先关注到XYP→ZW的P属性。根据例题③的步骤,得知它是无关属性,故删除,F'={Z→X,X→P,XY→WP,XY→ZW}
第二次循环。发现可以合并{XY→WP,XY→ZW},得F'={Z→X,X→P,XY→PWZ}
寻找无关属性。发现{XY→PWZ}中P属性。删除P属性后,F'={Z→X,X→P,XY→WZ},计算XY+ = XYWZP,包含P属性,故P属性无关,可以删除
Fc={Z→X,X→P,XY→WZ}中,每个元素都不是无关元素,无法再删,故解得正则覆盖