具有功能依赖性的候选密钥识别

时间:2011-10-16 02:42:32

标签: relational-database relation functional-dependencies candidate-key

我无法理解如何识别功能依赖项中的键。我一直在看例子,例如:

给定关系ABCD,找到不包括

的超级键的所有键
A -> BC, C -> D, CD -> AB.

这给出了密钥C和A.我认为接近这个问题的方式是BC和D都依赖于A和C,AB依赖于CD,这意味着它们都是密钥,但是因为CD是超级密钥(C是一个也是键的子集),CD不被视为最小超级密钥。

然而,在另一个例子中,

ABCDE
AB → CD
E → A
D → A

这里唯一的关键显然是BE。为什么这是真的,任何人都可以澄清找到这些问题的关键步骤吗?

感谢。

3 个答案:

答案 0 :(得分:6)

一个更正式的程序。

拿FD,例如(例2),AB - > CD。

使用普通FD增加此值,直到您拥有RHS上的所有属性。

你在RHS上缺乏ABE,所以你必须使用普通的FD ABE增加 - > ABE获得ABE - > ABCDE。

这告诉你ABE是超级密钥,因为知道ABE的某一行中的值足以确定该行中所有属性的值。

现在检查OTHER FD,看看是否有任何一个在这种情况下允许你减少LHS(ABE)。 E - > A允许您从ABE中删除A,因此只保留BE - > ABCDE。减少的规则是:如果另一个FD(E)的LHS是您尝试减少(ABE)的超级密钥的适当子集,那么您可以从超级密钥中删除仅在RHS中提到的所有属性其他FD(如果您正在查看“其他”FD,例如E - > EA !!!,则无法删除E.)

此过程不适合机械实现,因为您可能还需要查看其他FD的“组合”。然而,大多数用例甚至大多数伪造的类练习通常都不够复杂,导致这个程序失败(即给你留下一个合适的超级钥匙,而不是一个不可简化的超级钥匙)。

(PS找到所有键,你需要将它应用于所有给定的FD)

答案 1 :(得分:5)

第二个更简单,所以先拿它。 。 。你知道B必须在任何键中,因为它不在任何右侧。 (也就是说,即使你有ACDE的值,也无法推断出B的值。)同样对于E;所以,任何关键必须包括BE。但BE本身就是一个充分的关键,因为E给你A(因此BE→ABE)而AB给你CD(因此BE→ABCDE)。

在第一个中,我们可以看到A是一个键,因为A给你B和C,C给你D.同样,C是一个键,因为C给你D,C和D一起给你和A和B.相反,我们看到A和/或C必须在任何键中,因为每个左手边至少包含其中一个。

答案 2 :(得分:0)

enter image description here

参考 http://www.ict.griffith.edu.au/~jw/normalization/assets/Functional%20Dependencies%20and%20Normalization.pdf

算法证明(简短明了,第3部分)
H. Saiedian和T. Spencer,“一种有效的算法来计算关系数据库模式的候选关键字”,《计算机杂志》,第1卷。 39号1996年2月2日[在线]。可用:https://pdfs.semanticscholar.org/ab3f/f65010b50d78d583b1c2b6ce514fa072d23d.pdf。 [访问:2019年7月31日]

视频说明
https://www.youtube.com/watch?v=s1DNVWKeQ_w