求最小函数依赖集

如果函数依赖集F满足下列条件,则称F为一个最小函数依赖集,或称极小函数依赖集。

(1)F中的任一函数依赖的右部仅有一个属性,即无多余的属性。

(2)F中不存在这样的函数依赖X→A,使得F与F-{X→A}等价,即无多余的属性。

(3)F中不存在这样的函数依赖X→A,X有真子集Z使得F与F-{X→A}∪{Z→A}等价,即去掉各函数依赖左边的多余属性,A对X为完全函数依赖。

 

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

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

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

  ④若步骤③改变了函数依赖的左属性,重复②步骤一次。

 

【题1】关系模式R(U,F)中,U=ABCDEG,F={B->D,DG->C,BD->E,AG->B,ADG->BC},求F的最小函数依赖集。
解:
(1)分右

  F={B->D,DG->C,BD->E,AG->B,ADG->B,ADG->C}

(2)去多余依赖

  ①若B->D冗余,则去掉B->D,得G={DG->C,BD->E,AG->B,ADG->B,ADG->C}   

    B+ ={B}不包含D,所以不冗余,不能去掉。

  ②若DG->C冗余,则去掉DG->C,得G={B->D,BD->E,AG->B,ADG->B,ADG->C}

    (DG)+ ={DG}不包含C,所以不冗余,不能去掉。

  ③若BD->E冗余,则去掉BD->E,得G={B->D,DG->C,AG->B,ADG->B,ADG->C}

    (BD)+ ={BD}不包含E,所以不冗余,不能去掉。

  ④若AG->B冗余,则去掉AG->B,得G={B->D,DG->C,BD->E,ADG->B,ADG->C}

    (AG)+ ={AG}不包含B,所以不冗余,不能去掉。

  ⑤若ADG->B冗余,则去掉ADG->B,得G={B->D,DG->C,BD->E,AG->B,ADG->C}

    (ADG)+ ={ABCDEG}包含B,所以冗余,去掉。

  ⑥若ADG->C冗余,则去掉ADG->C,得G={B->D,DG->C,BD->E,AG->B}

    (ADG)+ ={ABCDEG}包含C,所以冗余,去掉。

  综上:F={B->D,DG->C,BD->E,AG->B}

(3)去左冗余
  ①看DG->C,若D->C冗余,D+ ={D}不包含C,所以G不能去掉。

  ②看DG->C,若G->C冗余,G+ ={G}不包含C,所以D不能去掉。

  ③看BD->E,若B->E冗余,B+ ={BD}不包含E,所以D不能去掉。

  ④看BD->E,若D->E冗余,D+ ={D}不包含E,所以B不能去掉。

  ⑤看AG->B,若A->B冗余,A+ ={A}不包含B,所以G不能去掉。

  ⑥看AG->B,若G->B冗余,G+ ={G}不包含B,所以A不能去掉。

  左属性没有变动,所以F的最小函数依赖集为Fm={B->D,DG->C,BD->E,AG->B}。

posted @ 2022-03-29 11:56  景池  阅读(570)  评论(0编辑  收藏  举报