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

How to choose a Candidate key in the given relation schema R?

考虑关系模式 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作为候选键来标识所有其余属性?

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

鉴于候选键的正式定义是“一组属性,它决定了关系的所有属性,并通过从中删除一些属性来失去这个 属性”,我们可以证明闭包AA+、所有属性都是这样确定的:

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 必须出现在任何(候选)键中,因为它永远不会出现在函数依赖的右侧部分,所以它不是由任何其他属性或属性组合确定的。但由于它已经是一个(候选)键,任何包含它的属性集都将是一个合适的超级键。