我正在阅读 Carlos Coronel 的 Database Systems Design, Implementation and Management。在解释 3NF 之后的章节中Normalization
,他写道
多个候选键的存在也会影响传递依赖的识别。以前,当一个非主要属性确定另一个非主要属性时,传递依赖性被定义为存在。在存在多个候选键的情况下,将非主要属性定义为不属于任何候选键的属性是至关重要的。如果函数依赖的决定因素不是主键而是另一个候选键的一部分,那么它不是非主属性并且不表示传递依赖的存在。
我很难理解他想说什么。任何人都可以用更简单的术语解释这一段。
我不知道以下内容是否有助于解释您引用的复杂短语,但以下所有事实都是真实的。
关系必须至少有一个候选键,并且可以有多个候选键。
根据定义,如果属性是任何候选键的一部分,则该属性是质数。
传递依赖是通过“传递”阿姆斯特朗公理(如果 X -> Y 和 Y -> Z,则 X -> Z)从其他两个依赖派生的依赖,例如如果在关系 R(A, B , C, D) 我们有 A -> BC 和 BC -> D,依赖 A -> D 是传递依赖。
如果传递规则的第二个依赖项(规则的“Y -> Z”依赖项)的决定因素不是完整的候选键,那么传递依赖项可能会有问题(即会产生数据异常) ,但是(a)候选键的子集,或 (b) 包含非素数的属性。
考虑关系 R(A, B, C, DE),具有依赖关系 AB -> CDE,CD -> ABE,C -> E。在这种情况下,有两个候选键,AB 和 CD,因此 C 是C -> D 是素属性,因为它是候选键 CD 的属性(“它不是非素属性”)。
请注意,在前面的示例中,属性 E 传递依赖于 AB(从 AB -> CDE 我们可以导出 AB -> C,从 AB -> C 和 C -> E,我们可以导出 AB -> E)和关系不在 3NF 中,也不在 BCNF 中。