什麼是數據庫中的傳遞依賴

避免傳遞性依賴性來幫助確保標準化

數據庫中的傳遞依賴關係是同一個表中引起函數依賴關係的值之間的間接關係。 要達到第三範式(3NF)的標準化標準,您必須消除任何傳遞依賴。

就其性質而言,傳遞依賴需要三個或更多屬性(或數據庫列),它們之間具有函數依賴關係,這意味著表中的列A依賴於列B通過中間列C.

讓我們看看這可能如何工作。

傳遞依賴例子

作者

AUTHOR_ID 作者 Author_Nationality
Auth_001 奧森斯科特卡 安德的遊戲 美國
Auth_001 奧森斯科特卡 安德的遊戲 美國
Auth_002 瑪格麗特阿特伍德 婢女的故事 加拿大

在上面的AUTHORS示例中:

但是這張表引入了傳遞依賴:

避免傳遞性依賴

為了確保第三範式,我們刪除傳遞的依賴關係。

我們可以從Authors表中刪除Book列並創建一個單獨的Books表:

圖書

Book_ID AUTHOR_ID
Book_001 安德的遊戲 Auth_001
Book_001 心靈的孩子 Auth_001
Book_002 婢女的故事 Auth_002

作者

AUTHOR_ID 作者 Author_Nationality
Auth_001 奧森斯科特卡 美國
Auth_002 瑪格麗特阿特伍德 加拿大

這是否解決了它? 現在我們來看看我們的依賴關係:

書桌

作者表

我們需要添加第三個表來規範化這些數據:

COUNTRIES

COUNTRY_ID 國家
Coun_001 美國
Coun_002 加拿大

作者

AUTHOR_ID 作者 COUNTRY_ID
Auth_001 奧森斯科特卡 Coun_001
Auth_002 瑪格麗特阿特伍德 Coun_002

現在我們有三個表格,利用外鍵來鏈接表格:

為什麼傳遞依賴是數據庫設計不好的原因

避免傳遞依賴來幫助確保3NF的價值是什麼? 讓我們再次考慮我們的第一個表格,並查看它創建的問題:

作者

AUTHOR_ID 作者 Author_Nationality
Auth_001 奧森斯科特卡 安德的遊戲 美國
Auth_001 奧森斯科特卡 心靈的孩子 美國
Auth_002 瑪格麗特阿特伍德 婢女的故事 加拿大

這種設計可能會導致數據異常和不一致,例如:

這些只是正常化的一些原因,並且避免了傳遞依賴性,保護數據並確保一致性。