2

我無法理解如何識別函數依賴關鍵字。我一直在尋找的例子,例如:具有函數依賴關係的候選鍵識別

給出一個關係ABCD,發現所有的鍵不包括的

A -> BC, C -> D, CD -> AB. 

這給鑰匙C和A:我認爲這個問題進行了接觸的方式superkeys BC和D都依賴於A和C,而AB依賴於CD,這意味着它們都是密鑰,但由於CD是超級密鑰(C是一個子集也是密鑰),所以CD不被視爲最小密鑰超密鑰。

然而,在另一個例子中,

ABCDE 
AB → CD 
E → A 
D → A 

這裏唯一的關鍵顯然是BE。爲什麼這是真的,任何人都可以澄清找到這些問題的關鍵步驟?

謝謝。

回答

5

第二個比較簡單,所以先把它放在第一位。 。 。你知道B必須在任何鍵上,因爲它不在任何右邊。 (即,即使你有ACDE的值,也不能推斷出B的值)。所以,任何密鑰都必須包含BE。但BE本身就是一個足夠的鑰匙,因爲E給你A(因此BE→ABE),AB給你CD(因此BE→ABCDE)。

在第一個中,我們可以看到A是一個關鍵,因爲A給了你B和C,C給了你D.同樣,C是一個關鍵,因爲C給你D和C和D在一起給你A和B.相反,我們看到A和/或C必須在任何鍵中,因爲每個左邊至少包括其中的一個。

+0

等待,那麼這是否意味着,這不是在給定的FD的意志的右側發現了關係的任何屬性成爲一把鑰匙,無論如何,因爲你無法從任何FD推斷他們?你怎麼知道這一點? – dxu

+0

@ user924199:不,這意味着在任何FD的右側沒有找到的任何屬性必須是每個鍵的一部分。 –

+0

對不起,你能解釋爲什麼這是真的嗎?再舉一個例子,如果給AB - > C和C - > D,這種情況下唯一的關鍵是AB,對,因爲通過傳遞屬性AB - > D,因此C不是關鍵?假設這是真的,爲什麼不能單獨分配A,B? – dxu

6

一個稍微正式的程序。

拿FD, (例2),AB - > CD。

使用微不足道的擴展它,直到你擁有RHS上的所有屬性。

你在RHS上缺乏ABE,所以你必須增加使用平凡的FD ABE - > ABE來獲得ABE - > ABCDE。

這就告訴你ABE是一個超級鍵,因爲知道ABE的某個行中的值將足以確定該行中所有屬性的值。

現在檢查其他FD,看看它們中的任何一個是否允許您降低LHS(ABE)。 E - > A允許您從ABE中刪除A,因此只保留BE - > ABCDE。減少的規則是:如果另一個FD(E)的LHS是你試圖減少的超級鍵的一個合適的子集(ABE),那麼你可以從超級鍵中刪除所有屬性,這些屬性僅在RHS中提到其他FD(如果您正在查看「其他」FD,如E - > EA,則無法刪除E)。

此過程不適合機械實現,因爲您可能還需要查看其他FD的「組合」。然而,大多數使用案例,甚至是大多數捏造類的練習通常都不夠複雜,導致這個過程失敗(即留下一個適當的超級密鑰而不是不可縮減的超級密鑰)。

(PS找到所有的按鍵,你就需要把這個適用於所有給定的FDS)

+0

這個答案如果有效的話會更好,因爲它是關於算法的,而不僅僅是具體的情況。 –