考点频率 :★★★★★(数据库基础必考,选择题常考键的分类与辨析)
难度 :⭐⭐
建议:重点掌握关系模型的五大核心概念,区分候选键、主键、外键、全键,理解外键的参照完整性约束
1️⃣ 关系模型的核心概念
关系模型用二维表 来表示数据及其之间的联系,这是目前最主流的数据库模型。在关系模型中,有一组核心术语需要掌握。这些术语是后续学习关系代数、SQL、范式的基础。
我们先通过一个"学生选课"的例子来建立直观印象:
| 学号(主键) | 姓名 | 性别 | 年龄 | 课程号(外键) | 成绩 |
|---|---|---|---|---|---|
| 2024001 | 张三 | 男 | 20 | C001 | 85 |
| 2024002 | 李丽 | 女 | 19 | C001 | 92 |
| 2024003 | 王五 | 男 | 21 | C002 | 78 |
| 2024001 | 张三 | 男 | 20 | C002 | 88 |
对应关系术语:
- 关系(Relation) ------ 整张表(学生选课表)
- 元组(Tuple) ------ 每一行(如第一行:2024001, 张三, 男, 20, C001, 85)
- 属性(Attribute) ------ 每一列(学号、姓名、性别等)
- 主键(Primary Key) ------ 学号 + 课程号(联合主键,因为一个学生可以选多门课,一门课可以被多个学生选)
- 外键(Foreign Key) ------ 课程号(关联到课程表的主键)
这个例子会在全文中反复引用,请先熟悉它。
2️⃣ 关系(Relation)
定义 :关系是二维表,是关系模型中最基本的数据结构。表中的每一行是一个元组,每一列是一个属性。
关系的性质(软考常考):
| 性质 | 说明 |
|---|---|
| 属性不可再分 | 每个属性都是原子的,不可再分(这是关系模型最基本的要求------1NF) |
| 元组不重复 | 表中没有完全相同的两行 |
| 属性无序 | 列的次序可以交换,不影响关系 |
| 元组无序 | 行的次序可以交换,不影响关系 |
| 同一属性的域相同 | 某一列的所有数据都来自同一个域(如"年龄"列都是整数) |
"属性不可再分"是关系模型最基本的要求,这一点在后续学习规范化理论时会反复出现。
3️⃣ 属性(Attribute)
定义 :属性是关系中的一列,用于描述元组的某个特征。每个属性都有一个取值范围,称为域(Domain) 。
示例:上表中的"姓名"列就是一个属性,它的域是所有合法姓名的集合。
域是属性的取值范围,比如"性别"的域是{男, 女},"年龄"的域是0-150的整数。不同属性可以有相同的域(如"出生地"和"籍贯"都可以使用"城市名称"域)。
属性 vs 域:
- 域是一个集合(取值范围)
- 属性是域在某个关系中的具体应用
4️⃣ 元组(Tuple)
定义:元组是关系中的一行,是属性值的集合。它表示一个实体的一条完整记录。
示例 :(2024001, 张三, 男, 20, C001, 85) 是一个元组。
5️⃣ 键(Key)
键是关系模型中最核心、最容易混淆的概念。不同类型键的区分,是软考的高频考点。
5.1 候选键(Candidate Key)
定义 :能够唯一标识一个元组的属性(或属性组合)。一个关系可能有多个候选键。
关键条件:
- 唯一性:不同的元组在该属性(或属性组合)上的值一定不同
- 最小性:不能再删除任何一个属性而保持唯一性(即"最小超键")
示例 :假设学生表有 学号 和 身份证号 两个属性,都能唯一标识一个学生,且都不能再删减(单个属性本身就是最小的),则它们都是候选键。一个关系可以有多个候选键,其中一个被选为主键,其余的就是备用键(Alternate Key)。
5.2 主键(Primary Key)
定义 :从候选键中选出一个作为主键,用于唯一标识关系中的每个元组。
主键的选取原则:
- 选择最稳定的属性(值不会频繁变化)------比如身份证号比姓名更稳定
- 选择最简单的属性(能单列就别用组合)------比如学号比(姓名+出生日期)简单
- 选择无意义的属性(避免业务含义变化导致主键需要修改)------推荐使用无意义的自增ID作为主键
示例 :在学生表中,如果候选键有 学号 和 身份证号,通常选 学号 作为主键(更短、更稳定)。在上面的选课表中,学号 和 课程号 单独都无法唯一标识一行(因为一个学生选多门课,一门课被多个学生选),所以主键是 (学号, 课程号) 的组合。
5.3 外键(Foreign Key)
定义 :一个关系中的属性(或属性组合),它是另一个关系的主键 。外键用于建立两个关系之间的连接。
外键与参照完整性 :外键的取值要么为NULL(表示暂无关联),要么必须等于被参照关系中某个元组的主键值。这就是参照完整性约束。
示例 :选课表中的 学号 是学生表的主键,在选课表中就是外键;课程号 是课程表的主键,在选课表中也是外键。选课表通过这两个外键"连接"到学生表和课程表。学号 和 课程号 的组合(联合主键)确保了同一学生不会重复选同一门课。
5.4 全键(All-Key)
定义 :关系中的所有属性一起构成主键。换句话说,没有单独的属性或属性组合能唯一标识元组,必须所有属性共同参与。
示例 :选课表中的 (学号, 课程号) 只是两个属性,如果再加一个 学期 属性,可能(学号+课程号+学期)才是主键------但这仍然不叫全键,因为不是"所有属性"。全键的典型例子是:一个表记录"学生A在2024年秋季学期选了课程B",属性只有 (学号, 课程号, 学期),所有属性加起来才能唯一标识一条选课记录,缺一不可------这就是全键。
6️⃣ 五种键的概念对比
| 键类型 | 定义 | 是否唯一 | 是否可空 | 数量 |
|---|---|---|---|---|
| 候选键(Candidate Key) | 能唯一标识元组的属性(或属性组合),满足唯一性和最小性 | ✅ 是 | ❌ 否 | 可以多个 |
| 主键(Primary Key) | 从候选键中选出的一个 | ✅ 是 | ❌ 否 | 唯一一个 |
| 备用键(Alternate Key) | 候选键中未被选为主键的键 | ✅ 是 | ❌ 否 | 可以多个 |
| 外键(Foreign Key) | 另一个关系的主键 | ❌ 否 | ✅ 可为NULL | 可以多个 |
| 全键(All-Key) | 关系中的所有属性共同构成主键 | ✅ 是 | ❌ 否 | 唯一一个 |
7️⃣ 经典例题
例题1:在关系数据库中,能够唯一标识一个元组的属性或属性组合称为( )。
A. 外键
B. 主键
C. 候选键
D. 全键
解析 :候选键是能够唯一标识元组的属性或属性组合,主键是候选键中被选中作为主键的那一个。题目问的是"能够唯一标识",这是候选键的定义。选 C。
例题2:下列关于外键的叙述中,正确的是( )。
A. 外键必须是另一个关系的主键
B. 外键的值可以取NULL
C. 外键的值可以取任意值
D. 一个关系中只能有一个外键
解析 :A不完整------外键是另一个关系的候选键 (通常就是主键);B正确------外键允许NULL;C错误------外键的值必须参照另一个关系中的主键值;D错误------一个关系可以有多个外键。选 B。
例题3(判断):如果一个关系中的所有属性共同构成主键,则该主键称为全键。( )
解析:正确。全键是关系中的所有属性共同构成主键,缺任何一个属性都无法唯一标识元组。
8️⃣ 记忆口诀
关系就是一张表,一行元组一列属性。
候选键能唯一标,主键选中做代表。
外键连接两关系,参照完整性别忘了。
全键所有属性合,缺一不可来标识。
9️⃣ 小测验(评论区对答案)
某关系R有属性A、B、C、D,已知(A, B)可以唯一标识元组,且(A, B)是最小的键。则(A, B)是( )。
A. 外键
B. 候选键
C. 全键
D. 超键
🔔 本专栏日更,点击头像 → 专栏《软考中级高频考点》订阅,第一时间接收新内容
#软考中级 #软件设计师 #关系模型 #主键 #外键 #候选键 #数据库技术基础 #软考备考