规范化依赖关系

use*_*577 7 database database-normalization functional-dependencies

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

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

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

3)传递依赖性是当nonkey属性确定另一个属性时

我在想它吗?

Dhr*_*ati 9

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

在此输入图像描述

完整的功能依赖

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

部分依赖

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

传递依赖

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


Ton*_*ews 5

不完全的。这将有助于您更精确地使用术语:当您说“一个或多个主键”之类的东西时,您(实际上)的意思是“主键的一个或多个列”?

仅当键包含多个列(复合键)时,才出现完全依赖和部分依赖的区别:

1)完全依赖项是需要完全键(键的所有列)来确定另一个属性时。

2)部分依赖关系是键是复合键,并且键的某些但不是全部列确定另一个属性时。(这可能仍然超过一列。)

3)传递依存关系如您所说。

  • “区别......只有当一个键由多个列组成时才会出现”并不完全正确。当空集 {} 是行列式时,在相对罕见但完全可能的情况下会出现涉及简单键的部分依赖。 (2认同)