如何找到候选键

How to find a candidate key

我有一个具有函数依赖关系的关系 A、B、C、D、E

1) A->BC

2) CD->E

3) B->D

4) E->A

使用 1 得到 A,D,E 然后使用 4 得到 D,E

使用 2 给出 A、B、C、D,然后使用 3 给出 A、B、C,使用 1 给出 A

使用 2 给出 A、B、C、D,使用 1 给出 A、D

使用 4 给出 B、C、D、E,使用 2 给出 B、C、D,使用 3 给出 B、C

使用 3 给出 A、B、C、E,使用 1 给出 A、E,使用 4 给出 E

所以我会有 5 个超级钥匙? (A、E、AD、BC、DE)。从我的超级钥匙中,我会选择独特的。

因为我可以从 E 得到 A,所以我可以删除 A 和 AD(因为 DE 是相同的)并且因为我可以从 A 得到 BC 我可以删除它所以我剩下

东、德

那会是我的超级钥匙吗?还是只是 E?

根据定义,关系的候选键 K 是一组决定所有其他属性的属性,因此我们不能在不丢失此 属性 的情况下从中删除任何属性。

要找到关系的所有键,如果你不遵循正式的算法,那么你可以从检查 FD 的每个行列式开始,看看这是否是(超级或候选)键,通过计算它的关闭。比如从A开始,可以找到:

A+ = A
   = ABC (by using 1)
   = ABCD (by using 3)
   = ABCDE (by using 2)

因此,A 确定所有属性,因此是候选键(而不是严格的超级键,因为您不能从中删除任何属性!)

计算其他行列式的闭包,可以发现:

CD+ = ABCDE (candidate key, since C+ and D+ do not contain all the attributes)
B+ = BD (not a key)
E+ = ABCDE (candidate key)

现在您有了三个候选键,A、E 和 CD。由于 B 仅确定 D,我们可以尝试向其添加一些内容以查看它是否可以成为密钥的一部分。我们添加A或E,因为它们已经是键,我们添加D,因为它已经由B确定(所以拥有它肯定会产生一个超级密钥)。所以我们尝试 C:

BC+ = ABCDE (candidate key, since B+ and C+  do not contain all the attributes)

所以,最后,我们可以说这个关系有四个(而且只有四个)候选键:

A
BC
CD
E