判断函数依赖

① 用分解的法则,使F中的任何一个函数依赖的右部仅含有一个属性;

② 去掉多余的函数依赖:从第一个函数依赖X→Y开始将其从F中去掉,然后在剩下的函数依赖中求X的闭包X+,看X+是否包含Y,若是,则去掉X→Y;否则不能去掉,依次做下去。直到找不到冗余的函数依赖;

③ 去掉各依赖左部多余的属性。一个一个地检查经过第②步去掉了多余依赖后的函数依赖左部非单个属性的依赖。例如XY→A,若要判Y为多余的,则以X→A代替XY→A是否等价?若A属于(X)+,则Y是多余属性,可以去掉。


对于求最小函数依赖,首先必须将右属性单一化,方便接下来的换算。接下来对于左属性的冗余判断和多余的函数依赖判断没有先后顺序,不过作为个人来说更习惯先将多余的函数依赖去掉,之后的判断多余的左属性更快。


已知R(U,F)U={a,b,c,d,e,f,g,h,i,j},F={abd->e,ab->g,b->f,c->j,cj->i,g->h }

求R(U,F)的最小函数依赖集

1.左属性单一化

F={abd->e,ab->g,b->f,c->j,cj->i,g->h};

2.去掉多余的依赖

①假设abd->e冗余,则在

F1={ab->g,b->f,c->j,cj->i,g->h} (abd)的闭包为abdgf,其中不包括e

所以abd->e不冗余

假设ab->g冗余,则在

F2={abd->e,b->f,c->j,cj->i,g->h} (ab)的闭包为abf,其中不包括g

所以ab->g不冗余

、、、、、、

同理如上,将每个依赖判断一下就能得到

F={abd->e,ab->g,b->f,c->j,cj->i,g->h}


注意:如果存在冗余的函数依赖,则将相关的函数依赖进行删除,在下面的关系判断中不能上一步出现的冗余函数依赖。


3、判断左属性的冗余

假如abd->e中的a冗余,则(bd)的闭包为bdf ,不包含e。同理的abd中不冗余。

cj->i中的c冗余,则(j)的闭包为j,不包含i;如果j冗余,则(c)的闭包为cji,包含i。所以j为冗余,改为c->i。

综上所得:F={abd->e,ab->g,b->f,c->j,c->i,g->h}

猜你喜欢

转载自blog.csdn.net/wuye1015/article/details/79561193