【數據庫】極小函數依賴集/最小依賴集/最小覆蓋 定義+求解方法+實例

小聲bb:如果裏面有錯的地方請提出來~感激不盡XDDDD


一、定義

           如果函數依賴集F滿足下列條件,則稱F爲一個極小函數依賴集F_{m},亦稱爲最小依賴集最小覆蓋(minimal cover)。

(1)F中任一函數依賴的右部僅含有一個屬性

(2)F中不存在這樣的函數依賴X->A,使得F與F-{X->A}等價。

(3)F中不存在這樣的函數依賴X->A,X有真子集Z使得F-{X->A}∪{Z->A}與F等價。

          最小依賴集不是唯一的,它與對各函數依賴FD_{i}及X->A中X各屬性的處置順序有關。

二、分析(求解方法)

          對於條件(1),即將比如X->YZ,分解爲X->Y和X->Z。

          (對於條件2和3爲了便於理解我寫出了簡便的理解方式,大家可以通過舉F和F-某個依賴集來驗證以加深理解)

          對於條件(2),說明F_{m}中不能有多餘的函數依賴,此處多餘即爲可以通過推導得到:比如F{A->B,B->C,A->C},則A->C爲多餘的。但是F_{m}可以是{A->B,B->C,C->A},即把這個函數依賴刪去後剩下的F`與F不能相同。

          對於條件(3),有兩種情況(因爲F_{m}不唯一,但這兩種情況不能同時寫在一個F_{m}中),即把這個能互推的函數依賴刪去後剩下的F`與F不能相同。:

         1.F_{m}中不存在可以互相依賴的,比如F{A->B,B->A},則其中一個爲多餘的,刪去其中一個。

         2.條件中爲“真子集”,真子集不包含它本身,則F_{m}可以是{A->B,B->A}。

三、實例

【實例1:求最小依賴集】

問題:已知F={A->B,B->A,B->C,A->C,C->A},求F_{m}

解答

1.看條件(1):F函數依賴的右部都只含有一個屬性,滿足條件(1);

2.結合條件(2)和(3):

F中有 A->B,B->C,A->C,刪去A->C,得F_{m1}={A->B,B->A,B->C,C->A}

刪去B->A得F_{m2}={A->B,B->C,C->A};

留下所有可以相互推導的F_{m3}={A->B,B->A,A->C,C->A}

【實例2:判斷最小依賴集】

問題:U={A,B,C,D,E},判斷F_{1}={A->B,B->C,(A,D)->E},F_{2}={A->B,A->C,B->C,(A,D)->E,(A,B)->B}是否是最小依賴集。

解答:直接可以判斷出F_{1}是最小依賴集,F_{2}中有A->B,A->C,B->C,所以不是最小依賴集

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章