use*_*577 7 database database-normalization functional-dependencies
我只是想确保我正确地思考它
1)完全依赖性是指一个或多个主键确定另一个属性
2)部分依赖性是当其中一个主键确定另一个或多个属性时
3)传递依赖性是当nonkey属性确定另一个属性时
我在想它吗?
这个答案直接来自我的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.传递依赖性总是与候选键之外的属性相关.
不完全的。这将有助于您更精确地使用术语:当您说“一个或多个主键”之类的东西时,您(实际上)的意思是“主键的一个或多个列”?
仅当键包含多个列(复合键)时,才出现完全依赖和部分依赖的区别:
1)完全依赖项是需要完全键(键的所有列)来确定另一个属性时。
2)部分依赖关系是键是复合键,并且键的某些但不是全部列确定另一个属性时。(这可能仍然超过一列。)
3)传递依存关系如您所说。