2014-09-20 25 views
0

我想找到下列函數依賴集的最小覆蓋:如何找到一組函數依賴的最小封面?

A -> BC 

B -> C 

A -> B 

AB -> C 

第一步:打破下來每個函數依賴的RHS成一個單一的屬性:

A -> B 

A -> C 

B -> C 

A -> B 

AB -> C 

然後我將刪除兩個A -> B,所以我們會得到:

A -> B 

A -> C 

B -> C 

AB -> C 

第二步驟:試圖從每個函數依賴的LHS(其LHS具有2個或多個屬性)刪除不必要的屬性:

AB -> C,檢查是否有必要通過:

替換AB -> CB -> C因此,如果B +含有C則A是不必要的:

B+ = B (B -> C) 

    = BC (so A is unnecessary) 

檢查,如果B是必要的條件:

A -> C因此,如果A +含有C,則B是不必要的更換AB -> C

A+ = A (A -> B) 

    = AB (A -> C) 

    = ABC (so B is unnecessary) 

現在,我們有:

A -> B 

A -> C 

B -> C 

第三步驟:試圖除去不必要的函數依賴:

對於A -> B檢查A +是否包含B而不使用A -> B

A+ = A (A -> C) 

    = AC (so A -> B is necessary) 

A -> C檢查,如果A +包含C時不使用A -> C

A+ = A (A -> B) 

    = AB (so A -> C is necessary) 

B -> C檢查,如果B +含有C不使用B -> C

B+ = B (so B -> C is necessary) 

現在我們有:

A -> B 

A -> C 

B -> C 

最後,組函數依賴具有共同LHS在一起:

A -> BC 

B -> C 

,所以我們可以說,這些函數依賴是一套最小覆蓋,是真的嗎?以及我們如何推斷出該集合的關鍵字?

回答

1

要計算規範掩護F:

使用UNION規則,以取代常見的左側的依賴。

所以聯合A - > BC和A - > B插入A - > BC 集現在是{A - > BC,B - > C,AB - 「ç}

A是在AB​​外來 - >ç

檢查是否從AB刪除的結果 - > C通過其他依賴

是暗示: - > C是已經存在事實上,B!

Set是現在{A - > BC,B - 「ç}

C是外來在A - > BC

檢查是否A - > C被邏輯上由AB和其他隱含依賴

是:使用對甲及物 - > B和B - > C.

可以使用的屬性閉合在較複雜的情況

的規範蓋是:A - > B,B - > C

來源:Korth,sudarshan DBMS的書。