说法错误的是选项 C:“超键一定是候选键”。
解析:
- 超键(Superkey):能唯一标识关系中元组的属性集(可以冗余,即包含多余属性)。
- 候选键(Candidate Key):是最小的超键,即不含多余属性的超键(极小性)。
- 因此,所有候选键都是超键(A 正确),但并非所有超键都是候选键(C 错误,因为超键可能包含冗余属性,不满足“最小性”)。
- 主键(Primary Key)是从候选键中人为选定的一个,用于实际标识元组(B 正确)。
- 一个关系可有多个候选键(如学号、身份证号都可唯一标识学生),但只能有一个被选为主键(D 正确)。
故正确答案为:C。
不正确。候选键可以是单属性,也可以是多属性(复合候选键),只要它是最小的超键即可。
✅ 正确理解:
候选键的本质是“极小超键”,与其包含属性个数无关,而取决于是否满足:
- 唯一性(能唯一标识元组);
- 最小性(任意去掉一个属性后,就不再具有唯一性)。
📌 举例说明(反例):
设关系模式订单明细(订单号, 商品编号, 数量),函数依赖为:(订单号, 商品编号) → 数量,且(订单号, 商品编号)是唯一标识每条明细记录的最小组合——
- 单独
订单号不能唯一标识(一个订单含多种商品); - 单独
商品编号也不能唯一标识(同一商品出现在多个订单中); - 但
{订单号, 商品编号}能唯一确定一条明细,且无冗余(去掉任一属性都失去唯一性)。
→ 因此{订单号, 商品编号}是一个双属性候选键(复合候选键),也是常用主键。
✅ 其他常见例子:
- 学生选课表
SC(学号, 课程号, 成绩),候选键为{学号, 课程号}; - 机场航班表
Flight(航班号, 出发日期, 出发时间, 到达机场)中,若同一航班号每天只飞一次,则{航班号, 出发日期}可能是候选键。
因此,“候选键必须是单属性”是错误说法。