用分解的法則,使f中的任何乙個函式依賴的右部僅含有乙個屬性;
去掉多餘的函式依賴:從第乙個函式依賴x→y開始將其從f中去掉,然後在剩下的函式依賴中求x的閉包x( [y1]
閉包就是由乙個屬性直接或間接推導出的所有屬性的集合,例如:
f=,由a可直接得到b和d,間接得到c,則a的閉包就是
) ,看x+是否包含y,若是,則去掉x→y;否則不能去掉,依次做下去。直到找不到冗餘的函式依賴;
去掉各依賴左部多餘的屬性。乙個乙個地檢查函式依賴左部非單個屬性的依賴。例如xy→a,若要判y為多餘的,則以x→a代替xy→a是否等價?若a屬於(x)+,則y是多餘屬性,可以去掉。
(1)判斷右邊是否最簡,得f=
(2)第1步:
①假設b->d冗餘,則去掉b->d得:g=
b+ =b 不包含d,所以不冗餘,不能去掉。
②假設dg->c冗餘,則去掉dg->c,得:g=
(dg)+ =dg不包含c,所以不冗餘,不能去掉。
③假設bd->e冗餘,則去掉bd->e,
得:g=
(bd)+ =bd不包含e,所以不冗餘,不能去掉。
④假設ag->b冗餘,則去掉ag->b,得:g=,(ag)+ =ag不包含b,所以不冗餘,不能去掉。
⑤假設adg->b冗餘,則去掉adg->b,
得:g=
(adg)+ =abcdg包含b,所以冗餘,去掉。
⑥假設adg->c冗餘,則去掉adg->c,得:g=
(adg)+ =abcdg包含c,所以冗餘,去掉。
綜上:f=
第2步:
①假設d->c冗餘,d+ =d不包含c,所以g不能去掉。
②假設g->c冗餘,g+ =g不包含c,所以d不能去掉。
③假設b->e冗餘,b+ =bd不包含e,所以d不能去掉。
④假設d->e冗餘,d+ =d不包含e,所以b不能去掉。
⑤假設a->b冗餘,a+ =a不包含b,所以g不能去掉。
⑥假設g->b冗餘,g+ =g不包含b,所以a不能去掉。
所以,fm=
求最小依賴集
這個比較煩,要寫好多好多好多qaq。例 u a,b,c,d,e,g f 求f最小依賴集。解 第一步 右邊單一化。f1 第二步 逐個求,在去掉它的f中求閉包,如果包含右邊屬性,則表示這個函式依賴要去掉。bg c 求 bg bcdeg,包含右邊屬性c,所以去掉。bd e bd bd,不包含右邊e,所以不...
求最小函式依賴集的方法
求最小函式依賴集分三步 1.將f中的所有依賴右邊化為單一元素 此題fd 已經滿足 2.去掉f中的所有依賴左邊的冗餘屬性.作法是屬性中去掉其中的乙個,看看是否依然可以推導 此題 abd e,去掉a,則 bd 不含e,故不能去掉,同理b,d都不是冗餘屬性 ab g,也沒有 cj i,因為c 其中包含i所...
求最小函式依賴
第一步 對f中的函式依賴運用分解原則來建立乙個等價函式依賴集h,該集合中每乙個函式依賴的右部是單個屬性 第一步之後的結果h 第二步 考察每乙個函式依賴是否是必須的,去除非必要的函式依賴 1 考察bc a,去掉函式依賴集會得到新的函式依賴集j 則 bc j bcdegh,不包含a,因此bc a不能去掉...