关系模式 R(A,B,C,D,E) 上的函数依赖集 F={A→BC,B→D,CD→E}。R 的候选键是()。
A 没有出现在任何函数依赖的右部,因此候选键必须包含 A。计算 A 的闭包:先由 A→BC 得到 B、C,再由 B→D 得到 D,此时已有 C、D,可由 CD→E 得到 E,所以 A+={A,B,C,D,E}。A 单独已经能决定全部属性,且不可再约简,因此唯一候选键为 {A}。
选项分析
错误。由 B 可推出 D,但 B、C、D 虽能进一步推出 E,仍然无法推出 A。
错误。CD 可推出 E,但没有依赖能由 C、D、E 推出 A 或 B。
错误。A 单独已经可以推出全部属性,再加入 E 后只是超键,不满足候选键的最小性。
正确。A 的闭包包含 R 的全部属性,且单属性集合已经无法继续约简。
本题为什么容易错
很多同学只检查“能不能推出全部属性”,没有再检查“是否最小”。{A,E} 的确能推出全部属性,但 E 是多余的,因此它是超键,不是候选键。
简短答案
给定函数依赖后,怎样用属性闭包求候选键,正确答案是 D({A})。A 没有出现在任何函数依赖的右部,因此候选键必须包含 A。计算 A 的闭包:先由 A→BC 得到 B、C,再由 B→D 得到 D,此时已有 C、D,可由 CD→E 得到 E,所以 A+={A,B,C,D,E}。A 单独已经能决定全部属性,且不可再约简,因此唯一候选键为 {A}。
易混淆概念对比表
| 概念 | 本题判断 | 区别要点 | 记忆提示 |
|---|---|---|---|
| {B,C} | 本题干扰项 | 错误。由 B 可推出 D,但 B、C、D 虽能进一步推出 E,仍然无法推出 A。 | 看到该词不要急着选,先判断是否真正解决题干问题 |
| {C,D} | 本题干扰项 | 错误。CD 可推出 E,但没有依赖能由 C、D、E 推出 A 或 B。 | 看到该词不要急着选,先判断是否真正解决题干问题 |
| {A,E} | 本题干扰项 | 错误。A 单独已经可以推出全部属性,再加入 E 后只是超键,不满足候选键的最小性。 | 看到该词不要急着选,先判断是否真正解决题干问题 |
| {A} | 本题正确答案 | 正确。A 的闭包包含 R 的全部属性,且单属性集合已经无法继续约简。 | 看到题干核心场景时优先联想到它 |
本题易混淆选项怎么区分
- {B,C}:错误。由 B 可推出 D,但 B、C、D 虽能进一步推出 E,仍然无法推出 A。
- {C,D}:错误。CD 可推出 E,但没有依赖能由 C、D、E 推出 A 或 B。
- {A,E}:错误。A 单独已经可以推出全部属性,再加入 E 后只是超键,不满足候选键的最小性。
知识点详解
属性集 X 关于函数依赖集 F 的闭包 X+,是能够从 X 出发利用 F 推出的全部属性。计算时先把 X 放入闭包,反复扫描依赖:只要某条依赖的左部已包含在当前闭包中,就把右部加入闭包,直到不再增加。若 X+ 覆盖关系模式全部属性,X 是超键;若 X 的任何真子集都不再是超键,X 才是候选键。候选键可以有多个,主键只是从候选键中选定的一个实现选择。
备考速记
右边永远推不出的属性先入键,闭包能推全还要继续做最小性检查。
关系模式在关系模式场景中的作用
关系模式在本题中的核心价值,是解决“关系模式 R(A,B,C,D,E) 上的函数依赖集 F={A→BC,B→D,CD→E}。R 的候选键是()”这个场景问题。复习时不要只背选项名称,还要理解它为什么适用于该场景,以及它能解决哪类安全、流程或管理问题。
同类题怎么考
- 根据函数依赖计算给定属性集的闭包。
- 从多个超键中找出满足最小性的候选键。
- 结合候选键判断主属性、部分依赖和关系模式范式。
关系模式在数据库系统工程师软考中的考法
软考选择题通常不会只考概念定义,还会把关系模式放到关系模式场景中,要求判断它的作用、适用范围或与相近概念的区别。遇到这类题时,先抓住题干中的业务场景,再看哪个选项最能解决该场景下的核心问题。
解题思路
老师批这类题时,最希望看到的不是一上来乱试组合,而是先圈右部。右部出现了 B、C、D、E,唯独没有 A,所以 A 不可能由其他属性推出来,任何候选键都得带 A。接着只算一次 A+:A 推出 B、C,B 推出 D,C 和 D 合起来再推出 E,五个属性齐了。既然单个 A 已经是超键,就不需要再给它搭配 E;候选键强调最小,答案只能是 {A}。
考点定位
求候选键先看哪些属性从未出现在依赖右部,这些属性无法由其他属性推出,通常必须放入候选键;随后计算闭包,并检查是否还可以删除属性。
易错提醒
- 只使用一轮函数依赖,没有把新得到的属性继续代回依赖集迭代。
- 看到 CD→E 就误以为 CD 是候选键,没有检查 A、B 是否能被推出。
- 把所有超键都当成候选键,忽略候选键要求任何真子集都不能再决定全属性。
备考提示
- 先圈出只在左部出现、从未在右部出现的属性,它们是候选键起点的重要线索。
- 闭包达到全属性后,逐个尝试删除键中的属性;删后仍能推出全属性,说明原集合还不是最小。
你可能还想了解
- 属性闭包怎样一步一步计算?
- 超键和候选键有什么区别?
- 为什么不在函数依赖右部的属性通常必须进入候选键?
- 候选键有多个时主属性怎么判断?
本文小结
A未出现在任何依赖右部,因此候选键必须包含A;而A经A→BC、B→D、CD→E可以推出全部属性,所以A的闭包为ABCDE。A单独已经最小,唯一候选键是{A},{A,E}只是非最小超键。