數據庫設計中的多值依賴

多值依賴打破了第四範式

在關係數據庫中,當存儲在同一個數據庫表中的信息唯一地確定存儲在同一個表中的其他信息時,會發生依賴關係。 當表中存在一個或多個行意味著同一個表中存在一個或多個其他行時,就會發生多值依賴 。 換句話說,表中的兩個屬性(或列)是相互獨立的,但都依賴於第三個屬性。

多值依賴可防止規範化標準第四範式(4NF)。 關係數據庫遵循代表記錄設計準則的五種正常形式。 它們防止數據中的更新異常和不一致。 第四種正常形式處理數據庫中的多對一關係。

函數依賴與多值依賴

要理解多值依賴關係,重新審視函數依賴關係是很有幫助的。

如果一個屬性X唯一地確定了一個屬性Y,那麼Y在功能上依賴於X.它被寫為X - > Y.例如,在下面的Students表中,Student_Name決定了Major:

學生們
學生姓名 重大的
拉維 藝術史
貝絲 化學


這個函數依賴可以寫成:Student_Name - > Major 每個Student_Name確切地確定一個Major,並且不再更多。

如果您希望數據庫也能跟踪這些學生採取的運動,您可能會認為最簡單的方法是添加另一篇名為“運動”的專欄:

學生們
學生姓名 重大的 運動
拉維 藝術史 足球
拉維 藝術史 排球
拉維 藝術史 網球
貝絲 化學 網球
貝絲 化學 足球


這裡的問題是拉維和貝絲都參加了多項運動。 每增加一項運動都需要增加一個新的行。

這張表引入了多值依賴,因為專業和運動是相互獨立的,但都依賴於學生。

這是一個簡單的例子,可以很容易識別,但多值依賴可能會成為大型複雜數據庫的問題。

多值依賴被寫成X - > - > Y.在這種情況下:

Student_Name - > - > Major
Student_Name - > - > 運動

這被讀作“Student_Name multidetermines Major”和“Student_Name multidetermines Sport”。

多值依賴總是需要至少三個屬性,因為它由至少兩個依賴於三分之一的屬性組成。

多值依賴和規範化

具有多值相關性的表違反了第四範式(4NK)的規範化標準,因為它會產生不必要的冗餘並可能導致不一致的數據。 為了將這個信息提高到4NF,有必要將這些信息分解成兩個表格。

下面的表格具有Student_Name - > Major的函數依賴關係,並且沒有多值依賴關係:

學生和專業
學生姓名 重大的
拉維 藝術史
拉維 藝術史
拉維 藝術史
貝絲 化學
貝絲 化學

雖然此表還具有Student_Name - > Sport的單個函數依賴項:

學生和運動
學生姓名 運動
拉維 足球
拉維 排球
拉維 網球
貝絲 網球
貝絲 足球

很明顯,規範化通常通過簡化複雜表格來解決,以便它們包含與單個想法或主題相關的信息,而不是試圖使單個表格包含太多不同的信息。