2012-12-14 105 views
4

我目前正在學習函數依賴關係,並且正在努力讓我的頭腦圍繞它們背後的概念。瞭解函數依賴關係

說我有表:

客戶

|-----------|--------------|------------|------------------|------------------| 
|Cust-ID | Cust-FName |Cust-LName |Cust-Email  |Cust-Pw   | 
|-----------|--------------|------------|------------------|------------------| 
|1   |John   |Smith  |[email protected] |srt6564sdgjhy55y | 
|2   |Adam   |Borneo  |[email protected] |45657ythjdfgqAfd | 
------------------------------------------------------------------------------- 

有兩個候選鍵:卡斯特-ID和卡斯特 - 電子郵件(只有一個電子郵件地址可能屬於一個客戶)。選擇cust-ID作爲P.K,唯一的功能依賴是:

{Cust-ID} -> {Cust-FName, Cust-LName, Cust-Email, Cust-Pw}

或者說,我想提請/既代表候選鍵:

{Cust-ID} -> {Cust-FName, Cust-LName, Cust-Email, Cust-Pw}

{Cust-Email} -> {Cust-ID, Cust-FName, Cust-LName, Cust-Pw}

本能告訴我前者,但鑑於這是一個全新的主題,我會感謝任何幫助!

回答

1

函數依賴集合始終是[候選]鍵的超集。換句話說,一個是一個函數依賴關係,屬性列表覆蓋整個關係。因此,您列出的兩個候選鍵也是函數依賴項。

0

兩個

{Cust-ID} -> {Cust-FName, Cust-LName, Cust-Email, Cust-Pw} 

{Cust-Email} -> {Cust-ID, Cust-FName, Cust-LName, Cust-Pw}

在你的情況函數依賴。

A 函數依賴關係就是這樣的情況:無論何時你有兩行在箭頭左手邊的列上有相同的值,那麼箭頭右側的列值必須平等。如果您有兩行具有相同的Cust-ID,那麼名稱,電子郵件和密碼列必須相同。如果您有兩行具有相同的Cust-Email,那麼(在您的示例中)名稱,電子郵件和密碼列必須相同。

如果你的表格不在第三範式中,那麼你有可能在左邊有一個正確的子集。事實上,您可以根據函數依賴性定義候選鍵和正常形式(2NF,3NF,BCNF)。

你可以在functional dependencies on our company blog瞭解更多。它是數據規範化系列文章的第一部分。