什么是数据库中的传递依赖

避免传递性依赖性来帮助确保标准化

数据库中的传递依赖关系是同一个表中引起函数依赖关系的值之间的间接关系。 要达到第三范式(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 玛格丽特阿特伍德 婢女的故事 加拿大

这种设计可能会导致数据异常和不一致,例如:

这些只是正常化的一些原因,并且避免了传递依赖性,保护数据并确保一致性。