2026-10-30 15:10:02
超键、候选键、主键是关系型数据库中用于唯一标识元组(行)的核心概念,其核心区别在于范围和用途:
超键(Super Key)
是关系中能唯一标识元组的属性集合,允许包含冗余属性。例如,在学生信息表中,{学号}、{学号,姓名}、{姓名,系别,专业}均可作为超键,只要该组合能唯一确定一行数据。超键的范围最广,其核心特征是“唯一性”,但可能包含非必要属性。例如,{学号,年龄}中“年龄”是冗余的,因为“学号”本身已足够唯一。
候选键(Candidate Key)
是超键的子集,需满足“最小性”原则,即不含冗余属性。例如,若{学号}和{身份证号}均能唯一标识学生,且二者无包含关系,则它们均为候选键。候选键是理论上可作主键的候选者,其数量可能多个。例如,在学生表中,若“学号”和“姓名+性别+年龄”组合均唯一,则二者均为候选键,但后者因包含冗余属性(如“年龄”可能变化)通常不被选为主键。
主键(Primary Key)
是从候选键中人工选择的一个作为元组标识的键,具有唯一性和非空性。主键的选择需考虑实际需求,如稳定性(学号比姓名更稳定)、简洁性(单属性优于组合属性)等。例如,学生表中通常选择{学号}为主键,而非{姓名,性别,年龄}组合,因后者可能因重名或属性变化导致唯一性失效。
三者关系与实例
以属性集(身份证号,姓名,性别,年龄)为例:
候选键的作用
候选键为设计主键提供理论依据,确保主键选择的合理性和最小化。例如,在学生信息表实例中,{年龄,系别}无法唯一标识元组(可能存在同系同年龄学生),故不能作为候选键;而{学号}因唯一且无冗余,是典型候选键。候选键的存在强化了数据库设计的规范性,避免主键选择的主观性。