我有一个关系A,B,C,D,E与功能依赖
1)A-> BC
2)CD-> E
3)B-> D
4)E-> A
使用1给出A,D,E然后使用4将得到D,E
使用2给出A,B,C,D然后使用3给出A,B,C并使用1给出A
使用2给出A,B,C,D并且使用1给出A,D
使用4得到B,C,D,E,使用2给出B,C,D,使用3给出B,C
使用3给出A,B,C,E并且使用1给出A,E并且使用4给出E
所以我会有5个超级钥匙? (A,E,AD,BC,DE)。从我的超级钥匙我会选择独特的。
因为我可以从E中获得A,所以我可以删除A和AD(因为DE是相同的),因为我可以从A中获取BC,所以我可以删除它,所以我留下了
E,DE
这会是我的超级钥匙吗?或者只是E?
答案 0 :(得分:3)
根据定义,关系的候选键K是一组属性,用于确定所有其他属性,以便我们无法从中删除任何属性而不会丢失此属性。
要查找关系的所有键,如果不遵循正式算法,那么您可以从FD的每个行列式检查开始,并通过计算其闭包来查看这是否是(超级或候选)键。 。例如,从A开始,您可以找到:
A+ = A
= ABC (by using 1)
= ABCD (by using 3)
= ABCDE (by using 2)
所以,A确定所有属性,因此是候选键(而不是严格的超级键,因为你不能从中删除任何属性!)
计算其他决定因素的闭包,你可以找到:
CD+ = ABCDE (candidate key, since C+ and D+ do not contain all the attributes)
B+ = BD (not a key)
E+ = ABCDE (candidate key)
现在你有三个候选键,A,E和CD。由于B只确定D,我们可以尝试添加一些东西,看它是否可以成为密钥的一部分。我们不添加A或E,因为它们已经是键,并且我们不添加D,因为它已经由B确定(因此它确实会产生它)超级钥匙)。所以我们尝试C:
BC+ = ABCDE (candidate key, since B+ and C+ do not contain all the attributes)
所以,最后,我们可以说这个关系有四个(也就是四个)候选键:
A
BC
CD
E