从功能依赖中找到候选键
find candidate key from functional dependency
我需要帮助从给定关系中找到候选键:
R(A、B、C、D、E)与 FD:
A -> BE
B -> BE
B -> D
步骤:
- 我知道所有属性都可以这样标识自己:A、B、C、D、E -> {ABCDE}
- 现在我知道 A -> BE,所以我可以划掉 BE 并得到:ACD -> {ABCDE}
- 主要属性是 (A,C,D)
- D 现在将被 B 取代,给我另一个候选密钥 (ABC)
我知道答案有 ACD 和 ABC,但显然是 AC。我做错了什么?
下面是一个简单的推理。
A 和 C 必须 出现在任何候选键中,因为它们永远不会出现在某些 FD 的正确部分。
那么,让我们通过计算它们的闭包 AC* 来查看它们是否已经是候选密钥。
通过计算一组属性的闭包规则,我们很容易看出AC*等于ABCDE,因此AC是一个候选键。出现在 FD 左侧的唯一其他属性是 B,因此我们应该检查没有其他候选键包含它。但是注意到属性 AC 必须存在于任何键中并且它们已经形成了候选键,因此向它们添加任何属性只会产生超级键,我们可以得出结论,这是 only 候选键.
我需要帮助从给定关系中找到候选键:
R(A、B、C、D、E)与 FD:
A -> BE
B -> BE
B -> D
步骤:
- 我知道所有属性都可以这样标识自己:A、B、C、D、E -> {ABCDE}
- 现在我知道 A -> BE,所以我可以划掉 BE 并得到:ACD -> {ABCDE}
- 主要属性是 (A,C,D)
- D 现在将被 B 取代,给我另一个候选密钥 (ABC)
我知道答案有 ACD 和 ABC,但显然是 AC。我做错了什么?
下面是一个简单的推理。
A 和 C 必须 出现在任何候选键中,因为它们永远不会出现在某些 FD 的正确部分。
那么,让我们通过计算它们的闭包 AC* 来查看它们是否已经是候选密钥。
通过计算一组属性的闭包规则,我们很容易看出AC*等于ABCDE,因此AC是一个候选键。出现在 FD 左侧的唯一其他属性是 B,因此我们应该检查没有其他候选键包含它。但是注意到属性 AC 必须存在于任何键中并且它们已经形成了候选键,因此向它们添加任何属性只会产生超级键,我们可以得出结论,这是 only 候选键.