数据库系统工程师 · 高频练习

给定函数依赖后,怎样用属性闭包求候选键?

中级 单选题 第 865 题 中等 数据库系统工程师候选键属性闭包函数依赖关系模式
题目

关系模式 R(A,B,C,D,E) 上的函数依赖集 F={A→BC,B→D,CD→E}。R 的候选键是()。

A {B,C}
B {C,D}
C {A,E}
D {A}
题目类型:原创高频练习题 用途:用于帮助理解数据库系统工程师相关考点和答案解析,不等同于官方真题。
正确答案
D
答案解析

A 没有出现在任何函数依赖的右部,因此候选键必须包含 A。计算 A 的闭包:先由 A→BC 得到 B、C,再由 B→D 得到 D,此时已有 C、D,可由 CD→E 得到 E,所以 A+={A,B,C,D,E}。A 单独已经能决定全部属性,且不可再约简,因此唯一候选键为 {A}。

选项分析

A

错误。由 B 可推出 D,但 B、C、D 虽能进一步推出 E,仍然无法推出 A。

B

错误。CD 可推出 E,但没有依赖能由 C、D、E 推出 A 或 B。

C

错误。A 单独已经可以推出全部属性,再加入 E 后只是超键,不满足候选键的最小性。

D

正确。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}只是非最小超键。