如何在给定的关系模式R中选择候选键?

时间:2016-06-26 11:34:12

标签: database rdbms functional-dependencies

考虑关系模式 R =(A,B,C,D,E,F)和函数依赖集:

A→B

A→C

BC→E

BC→D

E→F

BC→F

哪个是关系R的候选键?

A) A

B) BC

C) ABC

D) ABCE

给出的标准答案是C,我应该使用ABC作为这种关系中的候选键。

但是从那以后:

A -> B,C

B,C -> D,E,F

所以我认为A可以将所有其他属性识别为

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

我是否误解了依赖关系?

为什么我不能简单地使用A作为候选键来识别所有其他属性?

1 个答案:

答案 0 :(得分:2)

你是对的,在这种情况下(候选)密钥是A,而A B C是超级密钥。

鉴于候选键的正式定义是“确定关系的所有属性并通过从中删除某些属性而失去该属性的一组属性”,我们可以证明A的关闭, A+,以这种方式确定所有属性:

A+ = A  (to compute the closure, we start with the attribute)
A+ = ABC (for transitivity with respect to A→B and A→C)
A+ = ABCDEF (for transitivity with respect to BC→E and BC→D and BC→F)

此外,很容易看出它是具有此属性的唯一属性集。实际上,A必须存在于任何(候选)键中,因为它永远不会出现在函数依赖项的右侧,因此它不是由任何其他属性或属性组合决定的。但由于它已经是一个(候选)键,任何包含它的属性都将是一个合适的超级键。