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

问题描述 投票:9回答:2

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

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中派生出来的?

提前感谢你。

functional-dependencies candidate-key
2个回答
6
投票

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

ACD,BCD,CDE 第二: D => B. AB => D. AB => C. C => A.

所有单打都依赖于其中一个fd,所以没有一个单独包含在所有候选键中。 A不依赖于D而不依赖于B,既不明确也不隐含。 SO AD和AB是其中之一 念珠宝。 B不依赖于C和A,因此AB和BC。 C不依赖于D, 因此CD。

AB,BC和AD 400

这个也很有用:qazxsw poi


0
投票

这有点旧,但有很多观点,所以我认为可能有助于添加我自己的解释。

对于第一个问题:

http://csc.lsu.edu/~jianhua/fd_slide2_09.pdf

基本上,候选键必须满足两个标准:

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, E)
A => B
ED => A
BC => E

既然我们现在掌握了基本知识,那就让我们做更少的反复试验和更多的分析推理。

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

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

看看我们的函数依赖,我们知道如果我们得到A和B OR C和D,我们可以找到所有其他变量。知道了这一点,我们看到因为D给了我们B,所以我们缺少的是A.因此,AD是候选键。

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

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

© www.soinside.com 2019 - 2024. All rights reserved.