目录
一、定义:
如果函数依赖集F满足下列条件,则称F为一个极小函数依赖集,亦称为最小依赖集或最小覆盖(minimal cover)。
(1)F中任一函数依赖的右部仅含有一个属性
(2)F中不存在这样的函数依赖X->A,使得F与F-{X->A}等价。
(3)F中不存在这样的函数依赖X->A,X有真子集Z使得F-{X->A}∪{Z->A}与F等价。
最小依赖集不是唯一的,它与对各函数依赖及X->A中X各属性的处置顺序有关。
二、求解方法
(1)分解多属性右部项:用分解的法则,使F中的任何一个函数依赖的右部仅含有一个属性
(2)去掉多余的函数依赖:从第一个函数依赖X→Y开始将其从F中去掉,然后在剩下的函数依赖中求X的闭包X+,看X+是否包含Y,若是,则去掉X→Y;否则不能去掉,依次做下去。直到找不到冗余的函数依赖;
(3)去掉各依赖左部多余的属性:把一个左部多项函数依赖的属性逐个去除,看能否再推出,能则去除,不行则保留。
三、实例
【例1】:设关系模式R(ABCDE)上的函数依赖集F={A→BC, BCD→E, B→D, A→D, E→A},求F的极小依赖集
解:步骤一:分解多属性右部项
因为A→BC,右部存在多属性,所以对其分解
可得F={A→B,A→C,BCD→E, B→D, A→D, E→A}
现在F中右部不存在多属性可进行步骤二
步骤二:去掉多余的函数依赖
假设去掉A→B:此时的A+ ={A},因为A->C,所以此时A+ = {A,C};因为A->D,所以此时A+={A,C,D};因为此时推不出其他属性所以A+ ={A,C,D},不包含B,所以不可去掉。
假设去掉A→C:此时A+ = {A},因为A->B,所以此时A+ = {A,B};为B->D,所以此时A+={A,B,D};因为此时推不出其他属性所以A+ ={A,B,D},不包含C,所以不可去掉。
假设去掉BCD→E:此时BCD+ = {B,C,D},因为此时推不出其他属性所以BCD+ ={B,C,D},不包含E,所以不可去掉。
假设去掉 B→D:此时B+ = {B},因为此时推不出其他属性所以B+ ={B},不包含D,所以不可去掉。
假设去掉A→D:此时A+ = {A},因为A->B,A→C所以此时A+ = {A,B,C};为B->D,所以此时A+={A,B,C,D};包含D,所以可以去掉。
假设去掉E→A:此时E+ = {E},因为此时推不出其他属性所以E+ ={E},不包含A,所以不可去掉。
此时F={A→B,A→C,BCD→E, B→D, E→A}
因为此时F中有BCD→E,存在左部冗余所以进行步骤三
步骤三:去掉各依赖左部多余的属性
假设去掉BCD中的B:因为此时推不出其他属性所以CD+ ={C,D},不包含B,所以不可去掉。
假设去掉BCD中的C:因为此时推不出其他属性所以BD+ ={B,D},不包含C,所以不可去掉。
假设去掉BCD中的D:因为B→D,所以此时BC+={B,C,D},包含D,所以可以去掉。
此时F={A→B,A→C,BC→E, B→D, E→A}
接下来再判断BC是否还可去掉
假设去掉BC中的B:因为此时推不出其他属性所以C+ ={C},不包含B,所以不可去掉。
假设去掉BC中的C:因为B→D所以此时B+ = {B,D};因为此时推不出其他属性所以B+ ={B,D},不包含C,所以不可去掉。
所以本题的最小函数依赖为:F={A→B,A→C,BC→E, B→D, E→A}