从给定的关系中查找候选键

时间:2014-01-20 00:09:29

标签: functional-dependencies candidate-key

我一直在研究这个问题,似乎无法找到答案。

R = (A, B, C, D, E)

功能依赖是:

A => B
ED => A
BC => E

然后将候选键列为:

ACD, BCD, CDE

这些候选键是如何从上述FD中获得的?

同样,R = (A, B, C, D)

功能依赖是:

D => B 
AB => D 
AB => C 
C=> A

然后将候选键列为:

AB, BC, CD, AD

同样,我的问题是,我不确定候选密钥是如何从FD中派生出来的?

提前感谢你。

2 个答案:

答案 0 :(得分:6)

本文介绍了如何从给定关系中派生出候选键 http://en.wikipedia.org/wiki/Candidate_key
另请查看:candidate keys from functional dependencies
功能依赖性 这也是一个很好的,我认为:
http://www.cs.newpaltz.edu/~pletcha/BuildingCandidateKeys.html
所以它基本上是:
A => B(第一种情况):
ED =>一个
BC => Ë
因为C和D不依赖于任何fd,显然CD是每个候选键的一部分。

ACD,BCD,CDE
第二个:
D => B
AB => D
AB => C
C =>甲

所有单曲都依赖于其中一个fd,因此所有单曲都不包括在所有候选键中 A不依赖于D而不依赖于B,既不明确也不隐含。 SO AD和AB是一个关键词。 B不依赖于C和A,因此AB和BC。 C不依赖于D,因此CD。

AB,BC,CD,AD

这个也很有用: http://csc.lsu.edu/~jianhua/fd_slide2_09.pdf

答案 1 :(得分:0)

这有点老了,但是有很多观点,所以我认为添加自己的解释可能会有所帮助。

第一个问题:

R = (A, B, C, D, E)
A => B
ED => A
BC => E

基本上,候选密钥必须满足两个条件:

1)候选键必须能够确定所有其他变量。这基本上意味着使用候选键中的变量,您应该能够通过遵循功能依赖性中的箭头找到所有其他变量。

2)候选密钥必须为最小。例如,我们可以从ABCDE中找到每个变量,因为ACBDE 已经是每个变量。但是,我们可以取消一些变量。例如,可以发现ACD是候选密钥。由于ACD是有效的候选密钥,而ACD是ABCDE的子集,因此我们知道ABCDE不能作为候选密钥。换句话说,我们可以说说ABCDE以外的变量,但仍然有一个候选键,因此ABCDE并不是最小的。

如果您不熟悉使用功能依赖关系查找候选键,那么一个不错的开始就是尝试随机变量,看看它们是否满足上述两个条件。

让我们从变量A开始。我们的第一个功能依赖项告诉我们A决定B,所以现在我们有了两个变量A和B。但是,AB不满足其他任何一个功能依赖项,所以我们运气不好。我们已经确定A本身不是候选键(从逻辑上讲,AB也不是候选键,因为我们已经确定我们无法使用AB派生C,D和E)。

接下来,让我们尝试ABC。既然我们知道总是可以用A获得B(从A => B),那么在相同的候选键中同时包含A和B并没有什么意义。这是因为如果ABC有效,那么AC必须起作用,因为我们可以从AC获得ABC。

让我们用AC代替ABC再试一次。 A决定B,所以现在我们有了变量A,B和C。BC决定了E(BC => E),所以现在我们有了A,B,C和E。但是,我们无法获得变量D!实际上,从逻辑上讲,由于C和D并不是任何功能依赖项的结果(它们永远不在右边),所以我们知道C和D必须是每个候选键的一部分(如其他发布)。

我们可以尝试查看CD是否为候选密钥,但是从逻辑上讲,由于C在功能上无法自行确定任何内容,D不能自行确定任何内容,而CD不能确定任何内容,因此CD不能候选密钥。

让我们尝试ACD。首先,众所周知,A决定了B,所以我们有变量A,B,C和D。BC决定了E(BC => E),所以我们拥有所有5个变量,所以我们有一个候选键! >

但是,可能有多个候选键,所以我们还没有完成。请记住,每个键都必须包含C和D,因此让我们尝试BCD。 BC确定E,所以我们有B,C,D和E。ED确定A(ED => A),所以我们拥有所有5个变量。我们还有另一个候选密钥!

让我们尝试最后一个可能的答案:CDE。 ED确定A,所以我们有A,C,D和E。A确定B,所以我们有所有5个变量,并且有一个候选键。

我们的3个可能的候选键是ACD,BCD和CDE。我们知道,如果我们从这些键之一中删除任何变量,则该键将不是有效键,因此我们知道所有这些键也是最小的。

我们来看第二个问题:

R = (A, B, C, D)
D => B 
AB => D 
AB => C 
C => A

由于我们现在已经掌握了基础知识,因此,我们可以减少反复试验和更多的分析推理。

首先,AB确定C和D。此外,A和B显然不是候选关键字,因此我们知道AB是最小的。 AB是我们的第一个候选密钥。

CD确定A和B,而C和D显然不是键,所以CD是我们的第二个候选键。

看看我们的功能依赖关系,我们知道,如果我们得到A和B或C和D,我们可以找到所有其他变量。知道这一点,我们就会看到,因为D给了我们B,所以我们所缺少的只是A。因此,AD是候选键。

使用相同的逻辑,因为C决定了A,所以如果我们加B,我们将拥有AB并能够找到所有缺失的东西。因此,BC也是关键。再次,与该练习的其他候选键一样,BC很小。

我们最终可能的候选密钥是AB,CD,AD和BC。