如何在给定的关系模式 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
是一个超级键。
鉴于候选键的正式定义是“一组属性,它决定了关系的所有属性,并通过从中删除一些属性来失去这个 属性”,我们可以证明闭包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
必须出现在任何(候选)键中,因为它永远不会出现在函数依赖的右侧部分,所以它不是由任何其他属性或属性组合确定的。但由于它已经是一个(候选)键,任何包含它的属性集都将是一个合适的超级键。
考虑关系模式 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
是一个超级键。
鉴于候选键的正式定义是“一组属性,它决定了关系的所有属性,并通过从中删除一些属性来失去这个 属性”,我们可以证明闭包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
必须出现在任何(候选)键中,因为它永远不会出现在函数依赖的右侧部分,所以它不是由任何其他属性或属性组合确定的。但由于它已经是一个(候选)键,任何包含它的属性集都将是一个合适的超级键。