规范化依赖关系

时间:2013-04-22 16:34:29

标签: database database-normalization functional-dependencies

我只是想确保我正确地思考它

1)完全依赖是指一个或多个主键确定另一个属性

2)部分依赖关系是指其中一个主键确定另一个或多个属性

3)传递依赖关系是指nonkey属性确定另一个属性

我正在考虑它吗?

4 个答案:

答案 0 :(得分:7)

这个答案直接来自我的CS课程,并从Connolly和Begg教科书中获得。

enter image description here

完整的功能依赖

识别候选键 (此处为propertyNo,iDate和pAddress)。这是因为这3个的任何组合都可以让你找到给定元组的其他属性(我可以找到那些根据这三件事进行检查的staffNo,我可以找到carReg工作人员没有使用给出这3件事等)。但请注意,您需要所有这3个才能找到其他属性,而不仅仅是一个子集。 完全依赖关系始终与非候选键相关,具体取决于候选键,具体取决于所有或依赖在一些。

部分依赖

考虑到这三个候选键,查看候选键。是否有候选键的任何子集依赖于另一个?是的,它是pAddress。给定propertyNo,您可以找出该属性的地址。然后看看候选键之外。是否有任何这些键仅依赖于候选键的一部分,而不是所有组件?在这种情况下没有。因此,部分依赖关系始终是候选键内的依赖关系或非候选键的依赖关系,而只是部分候选键而不是所有组件

传递依赖

现在,查看非候选键(staffNo,comments,iTime(检查时间),sName,carReg)。在那些内部,是否有任何功能上依赖于另一个?是的,它是sName - 给定一个staffNo,你可以找出工作人员的名字。但是staffNo在功能上依赖于3个候选键。因此,通过传递性,propertyNo + iDate + pAddress - > staffNo - > sName,因此 sName过渡依赖于staffNo 传递依赖关系始终与候选键之外的属性相关。

答案 1 :(得分:5)

不完全。在你的术语中更准确一点:当你说“一个或多个主键”之类的东西时,你(可能)真的意思是“主键的一个或多个列”?

仅当一个键由多个列(一个复合键)组成时,才会出现完全依赖和部分依赖之间的区别:

1)完全依赖是指需要完整密钥(密钥的所有列)以确定另一个属性。

2)部分依赖性是指密钥是复合的,而密钥的某些但不是所有列都确定了另一个属性。 (这可能仍然不止一列。)

3)传递依赖性如你所说。

答案 2 :(得分:3)

完全依赖意味着依赖于所讨论的所有属性,通常意味着候选键的所有属性。它不一定是指定为“主要”的键,因为主键在依赖理论和规范化中不起任何特殊作用。

部分依赖意味着依赖于这些属性的适当子集,通常意味着某个候选键的适当子集。

根据上下文,传递依赖可以表示以下任一项:

(1)形式A-> B,B-> C

的依赖性

(2)形式A-> B,B-> C的依赖性,其中B不是超级密钥

在提到(2)所描述的情况时,几乎总是使用术语传递依赖,并且即使(1)是更正式的正确含义,它也几乎成了这种意义的同义词。

答案 3 :(得分:1)

部分依赖::表中的属性仅依赖于主键的一部分,而不依赖于整个键。 (有关详细信息,请参见此链接) https://www.studytonight.com/dbms/second-normal-form.php

传递依赖项::非主要属性取决于其他非主要属性而不是主要属性或主键时。 (有关详细信息,请参见此链接) https://www.studytonight.com/dbms/third-normal-form.php