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 派生的。
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 派生的。
本文介绍如何从给定关系派生候选键。
http://en.wikipedia.org/wiki/Candidate_key。
还可以看看:来自功能依赖的候选键功能
依赖。
这也是一个很好的,我认为:
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,既不是显式的也不是隐式的。所以 AD 和 AB 是一个
候选键。B 不依赖于 C 和 A,因此 AB 和 BC。C不依赖于D,
因此CD。
AB、BC、CD、AD
这个也很有用:http: //csc.lsu.edu/~jianhua/fd_slide2_09.pdf
这有点旧,但有很多观点,所以我认为添加我自己的解释可能会有所帮助。
对于第一个问题:
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。
其属性闭包是关系的所有属性的集合的最小属性集称为关系的候选键。
给定一组 F 函数依赖关系,为 R 找到密钥 K 的算法
输入:一个全称关系 R 和一组关于 R 属性的函数依赖项 F。
1. Set K:= R;
2. For each attribute A in K {
Compute (K - A)+ with respect to F;
If (K - A)+ contains all the attributes in R,
then set K := K - {A};
}
根据该算法,属性闭包 ACD+、BCD+、CDE+ 包含 R 和最小的所有属性。