如何确定此关系中的候选键

时间:2014-07-10 14:34:59

标签: relational-database rdbms functional-dependencies candidate-key

我有关系R(ABCDEF)和功能依赖关系F{AC->B, BD->F, F->CE}

我必须找到关系的所有候选键(阿姆斯特朗公理)。

我这样做了:

A->A, B->B, C->C, D->D, E->E, F->F

来自F->CE => F->C and F->E

And then:
 1. BD->F
 2. F->E
 3. BD->E
 4. BD->EF
 5. BD->BD
 6. BD->BDEF
 7. BD->F
 8. F->CEF
 9. BD->CEF     => BD->BCDEF

现在我试图在A的右侧获取BD->BCDEF,以便BD成为候选键。

如果有人可以提供帮助,那就太棒了。

编辑:

 1. ABD->ABCDEF
 2. ACD->BD
 3. ACD->ABD    => AC->B and ACD->ABCDEF => BD->ABCDEF

2 个答案:

答案 0 :(得分:1)

(编辑过的)逻辑的最后一步是

AC->B and ACD->ABCDEF, therefore BD->ABCDEF

看起来你已经用左手边的B替换了AC。你似乎在用算术术语思考,而不是用阿姆斯特朗的推理规则来思考。没有推断规则说“如果AC-> B,那么无论AC出现在哪里,都可以用B替换AC”。 (有时它看起来就像发生了什么,但事实并非如此。)AC和B不相等,而且它们并不相同。

想象一下,人们的名字是独一无二的。然后“名称”将确定“高度”,“名称”将确定“重量”。但是你不能用高度替换名称​​;你不能说“身高”决定了“体重”。这些条款并不相同,而且它们并不相同。

BD不是候选键,但ABD是。 (还有其他人。)

答案 1 :(得分:0)

经验法则:

An Attribute appearing only on the left hand side in your FDs is in all keys.
An Attribute not appearing in any of your FDs is in all keys.
An Attribute only appearing on the right hand side in your FDs is not in any key.

A candidate key is the left hand side of a derived FD on which all attributes depend.

示例:

R(ABCDE), (A->C, AB->D, D->B)

E不出现在任何FD中。 E在所有键中。 A仅出现在左侧。 A在所有键中。 C仅出现在右侧。 C不在任何键中。

键将包含以下属性:

AE

使用AE中的每个可能键找到依赖项:

A->C
A->AC    (X->XY axiom)
E->E
AE->ACE  (from previous 2 FDs)

并非所有属性都在右侧,因此AE不是键,只是所有键的一部分。

开始将AE与BCD结合起来,看看会出现什么:

ADE->ABCDE   (as D->B, and by X->XY axiom D->BD. This is a key, by last rule of thumb)
ACE->ACE
ABE->ABCDE (AE->ACE, B->BD from axioms, this is a key)
ABCE->ABCDE, ABDE->ABCDE (superkeys of ABE, so ignore)
ACDE->ABDCE (superkey of ADE)

假设我已正确完成此操作,那么ABE和ADE就是键。