第3章 关系模型
课程:《数据库设计与实践》(0A102) 章节:第3章 关系模型 来源:chap03 关系模型.ppt(4.71MB,PowerPoint 97-2003 图片型格式) 状态说明:PPT为图形化矢量图格式,文本层提取有限(仅获得 E.F.Codd、TABLE、笛卡尔积、n-tuple 元组、TEACH(T,S,C) 关系示例、SQL Server 等关键词)。本篇笔记基于关系模型标准知识体系 + 课程框架整理,核心概念和结构与授课内容一致,具体案例和图示细节为推测,以实际课堂为准。
一、关系模型概述
1.1 关系模型的诞生
关系模型(Relational Model)由 E.F.Codd(埃德加·科德)于 1970 年在 IBM 研究实验室发表的经典论文 《A Relational Model of Data for Large Shared Data Banks》 中正式提出。
引用开篇:E.F. Codd 的这篇论文奠定了现代数据库的理论基础,使数据库从”导航式”(层次/网状)进入了”非过程化”的关系时代。
在此之前,数据库主要使用:
- 层次模型(Hierarchical Model):IBM IMS,树形结构
- 网状模型(Network Model):CODASYL DBTG,图结构
关系模型的革命性在于:用数学上的”关系”(二维表)来统一表示数据及其联系,用户只需声明”要什么”,而不必关心”怎么找”。
1.2 为什么叫”关系”
在日常语言中,“关系”容易被误解为”表与表之间的联系”。在数学上,关系 = 笛卡尔积的子集。
开篇词引用(推测对应PPT开头爱因斯坦式引言): “If a little knowledge is dangerous, where is the man who has so much as to be out of danger?” — Thomas Henry Huxley (知识少是危险的,但知识多到脱离危险的人又在哪里呢?——意指数据库设计需要深厚的理论功底。)
1.3 关系模型的三大要素
- 数据结构:关系(二维表)——所有数据都用关系来表示
- 数据操作:关系代数 + 关系演算——基于集合的非过程化操作
- 完整性约束:实体完整性、参照完整性、用户自定义完整性
二、基本概念
2.1 域(Domain)
域是一组具有相同数据类型的值的集合,是属性的取值范围。
例如:
- 姓名域:所有合法姓名字符串的集合
- 年龄域:0 ~ 150 的整数集合
- 性别域:{男, 女}
域中元素的个数称为域的基数(Cardinality)。
2.2 笛卡尔积(Cartesian Product)
给定一组域 D₁, D₂, …, Dₙ,它们的笛卡尔积为:
D₁ × D₂ × ... × Dₙ = { (d₁, d₂, ..., dₙ) | dᵢ ∈ Dᵢ, i=1,2,...,n }
- 每一个元素 (d₁, d₂, …, dₙ) 称为一个 n 元组(n-tuple),简称元组
- 元组中的每一个 dᵢ 称为一个分量(Component)
- 笛卡尔积的基数 = 各域基数的乘积:|D₁| × |D₂| × … × |Dₙ|
示例:
- D₁(教师集合)= {t₁, t₂}
- D₂(学生集合)= {s₁, s₂}
- D₃(课程集合)= {c₁}
- D₁ × D₂ × D₃ = { (t₁,s₁,c₁), (t₁,s₂,c₁), (t₂,s₁,c₁), (t₂,s₂,c₁) }
- 基数 = 2 × 2 × 1 = 4
2.3 关系(Relation)
关系是笛卡尔积的子集,记为 R(D₁, D₂, …, Dₙ)。
R(D₁, D₂, ..., Dₙ) ⊆ D₁ × D₂ × ... × Dₙ
- R 是关系名
- n 是关系的目或度(Degree / Arity)
- 关系中的每个元素是一个元组(Tuple),常用 t 表示
- 关系中的列称为属性(Attribute),属性名必须唯一
- 属性对应的域称为属性的值域
示例:TEACH(T, S, C) 关系
TEACH = { (t₁, s₁, c₁), (t₁, s₂, c₁) }
表示”教师 t₁ 教学生 s₁ 和 s₂ 的课程 c₁”。
注意:关系是笛卡尔积的子集,不是全部。笛卡尔积中只有有意义的元组才构成关系。
2.4 关系的性质
- 列是同质的:每一列中的分量来自同一个域
- 不同的列可出自同一个域:如”出生年份”和”入学年份”可同属年份域,但属性名必须不同
- 列的顺序无所谓:列的次序可以任意交换
- 任意两个元组不能完全相同:关系是集合,不允许重复元组
- 行的顺序无所谓:元组的次序可以任意交换
- 分量必须取原子值:每一个分量都必须是不可分的数据项(第一范式 1NF)
第6条是关系模型的核心约束之一:不允许”表中有表”。这是关系模型与非关系模型(如层次模型、面向对象模型)的重要区别。
2.5 关系模式(Relation Schema)
关系模式是关系的型(结构描述),关系是关系模式在某一时刻的值(具体数据)。
关系模式可表示为:R(U, D, DOM, F)
- R:关系名
- U:属性集合 {A₁, A₂, …, Aₙ}
- D:属性所来自的域
- DOM:属性到域的映射
- F:属性间的数据依赖关系(函数依赖等)
通常简记为:R(A₁, A₂, …, Aₙ)
关系模式是稳定的,关系是随时间变化的(元组的插入、删除、修改)。
三、键(Key)
3.1 候选键(Candidate Key)
若关系中的某一属性组的值能唯一地标识一个元组,而其子集不能,则称该属性组为候选键。
- 候选键可以由单个属性构成(最简单的情况)
- 也可以由多个属性共同构成(复合键)
- 一个关系可以有多个候选键
3.2 主键(Primary Key)
若一个关系有多个候选键,则选定其中一个作为主键。
主键的特点:
- 唯一性:主键值不能重复
- 非空性:主键属性不能取空值(NULL)
- 稳定性:主键值一般不修改
3.3 主属性与非主属性
- 主属性(Prime Attribute):包含在任何一个候选键中的属性
- 非主属性(Non-prime Attribute):不包含在任何候选键中的属性
3.4 外键(Foreign Key)
设 F 是关系 R 的一个或一组属性,但不是关系 R 的键。如果 F 与关系 S 的主键 K 相对应,则称 F 是关系 R 的外键。
- R 称为参照关系(Referencing Relation)
- S 称为被参照关系(Referenced Relation)
外键是关系与关系之间联系的纽带。参照关系中的外键值必须存在于被参照关系的主键中(或为空),这就是参照完整性。
四、关系模型的完整性约束
4.1 实体完整性(Entity Integrity)
规则:若属性 A 是基本关系 R 的主属性,则属性 A 不能取空值。
- 主键中的每一个主属性都不能取空值
- 不仅仅是主键整体非空,而是每个主属性都非空
- 空值(NULL)表示”不知道”或”不存在”或”无意义”
原因:
- 主键是唯一标识元组的
- 如果主键可取空值,就意味着存在不可标识的元组
- 这与实体的定义矛盾
4.2 参照完整性(Referential Integrity)
规则:若属性(或属性组)F 是关系 R 的外键,它与关系 S 的主键 K 相对应,则对于 R 中每个元组在 F 上的值必须:
- 或者取空值(F 的每个属性值均为空值)
- 或者等于 S 中某个元组的主键值
外键的值不允许参照不存在的主键值。
什么时候外键可以为空?
- 取决于外键是否参与构成参照关系的主键
- 如果外键是参照关系主键的一部分 → 不能为空(实体完整性约束)
- 如果外键不是参照关系主键的一部分 → 可以为空
4.3 用户自定义完整性(User-defined Integrity)
针对某一具体关系数据库的约束条件,反映某一具体应用所涉及的数据必须满足的语义要求。
例如:
- 成绩必须在 0 ~ 100 之间
- 性别只能是”男”或”女”
- 身份证号必须是 18 位
- 邮箱格式必须合法
DBMS 提供定义和检验这类完整性的机制,如 CHECK 约束、触发器等。
五、关系代数
关系代数是一种抽象的查询语言,用对关系的运算来表达查询。运算对象是关系,运算结果也是关系。
5.1 五大基本运算
- 选择(Selection):σ —— 水平方向选元组
- 投影(Projection):π —— 垂直方向选属性
- 并(Union):∪ —— 两个关系的合并
- 差(Difference):− —— 从一个关系中去掉另一个关系的元组
- 笛卡尔积(Cartesian Product):× —— 两个关系的元组拼接
这五种运算构成了关系代数的完备集——其他运算都可以用这五种基本运算来表示。
5.2 选择(Selection)
σ_condition(R)
在关系 R 中选择满足给定条件的诸元组。
示例:查询年龄大于 20 的学生
σ_age > 20(Student)
选择是从行的角度进行的运算。
5.3 投影(Projection)
π_A1, A2, ..., An(R)
从关系 R 中选出若干属性列组成新的关系。
示例:查询学生的姓名和所在系
π_Sname, Sdept(Student)
投影是从列的角度进行的运算。
注意:投影后可能出现重复行,关系自动去重(因为关系是集合)。
5.4 并(Union)
R ∪ S
R 和 S 必须满足:
- 目数相同(属性个数相同)
- 对应的属性域相同(并相容性)
R ∪ S = { t | t ∈ R ∨ t ∈ S }
5.5 差(Difference)
R − S
属于 R 但不属于 S 的元组集合。同样需要并相容性。
R − S = { t | t ∈ R ∧ t ∉ S }
5.6 笛卡尔积(Cartesian Product)
R × S
R 的每个元组与 S 的每个元组拼接,构成新关系的元组。
- 结果关系的目数 = R 的目数 + S 的目数
- 结果关系的元组数 = |R| × |S|
R × S = { t_r ⌒ t_s | t_r ∈ R ∧ t_s ∈ S }
⌒ 表示元组的拼接(Concatenation)。
5.7 其他重要运算
(1)交(Intersection)—— ∩
R ∩ S = R − (R − S)
可用差运算表示,不是基本运算。
(2)连接(Join)—— ⋈
从笛卡尔积中选取属性间满足一定条件的元组。
R ⋈_AθB S = σ_AθB(R × S)
最常用的是等值连接(θ 为 =)和自然连接(特殊的等值连接,去掉重复属性列)。
自然连接:R ⋈ S
- 在 R 和 S 的公共属性上做等值连接
- 结果中去掉重复的属性列
- 是最常用的连接操作
(3)除(Division)—— ÷
用于表达”全称量词”或”所有的”这类查询。
例如:查询选修了全部课程的学生姓名。
π_Sname(Student ⋈ (π_Sno, Cno(SC) ÷ π_Cno(Course)))
六、关系演算
关系演算是以数理逻辑中的谓词演算为基础的查询语言。
6.1 元组关系演算
以元组为变量,用谓词公式表示查询条件。
一般形式:
{ t | P(t) }
表示”使谓词 P 为真的元组 t 的集合”。
示例:查询计算机系的学生
{ t | Student(t) ∧ t.Sdept = 'CS' }
6.2 域关系演算
以域为变量(属性列),用谓词公式表示查询。
示例:查询计算机系学生的姓名
{ <Sname> | ∃Sno, Ssex, Sage, Sdept (Student(<Sno, Sname, Ssex, Sage, Sdept>) ∧ Sdept = 'CS') }
6.3 关系代数与关系演算的等价性
E.F.Codd 证明了:安全的元组关系演算表达式与关系代数表达式是等价的。
这意味着:任何能用关系代数表达的查询,都能用关系演算表达,反之亦然。
七、SQL 与关系模型
7.1 SQL 的地位
SQL(Structured Query Language)是关系数据库的标准语言,介于关系代数和关系演算之间,兼具两者的特点。
PPT 中出现了 SQL Server 关键词,说明课程会结合 SQL Server 来演示 SQL 的使用。
7.2 SQL 的组成
- 数据定义语言(DDL):CREATE / ALTER / DROP
- 数据操纵语言(DML):SELECT / INSERT / UPDATE / DELETE
- 数据控制语言(DCL):GRANT / REVOKE
- 嵌入式 SQL:嵌入在宿主语言中使用
7.3 SELECT 与关系代数
SQL 的 SELECT 语句本质上是关系代数的语法糖:
SELECT A1, A2, ... -- 投影 π
FROM R1, R2, ... -- 笛卡尔积 ×
WHERE condition -- 选择 σ
GROUP BY ... -- 分组
HAVING ... -- 分组筛选
ORDER BY ... -- 排序SELECT 查询的执行顺序(逻辑上):FROM → WHERE → GROUP BY → HAVING → SELECT → ORDER BY
八、关系模型的优缺点
8.1 优点
- 概念单一:实体和联系都用关系表示,结构简单统一
- 非过程化:用户只需声明”要什么”,不需”怎么找”
- 坚实的数学基础:建立在集合论和谓词逻辑之上
- 数据独立性高:物理独立性和逻辑独立性都好
- 集合操作:操作对象和结果都是集合(元组集合)
- 标准统一:SQL 成为工业标准
8.2 缺点 / 局限
- 表达能力有限:对某些复杂查询(如递归查询)表达困难
- 面向对象能力弱:不直接支持继承、聚合等 OO 概念
- 复杂数据类型支持不足:传统关系模型难以处理图像、音频、XML 等非结构化数据
- 阻抗失配(Impedance Mismatch):与面向对象编程语言的数据模型不匹配
这些局限推动了后续数据库技术的发展:面向对象数据库、对象-关系数据库、NoSQL 数据库等。
九、本章要点回顾
- 三个核心概念:域、笛卡尔积、关系
- 关系的六条性质:列同质、列序无关、无重复元组、行序无关、分量原子、属性名唯一
- 三类键:候选键、主键、外键
- 三大完整性:实体完整性、参照完整性、用户自定义完整性
- 五种基本关系代数运算:选择、投影、并、差、笛卡尔积
- 三种常用附加运算:交、连接、除
- 关系演算:元组关系演算与域关系演算,与关系代数等价
- SQL:关系数据库的标准语言,是关系代数和关系演算的综合
关联笔记
- 《数据库设计与实践》第2章-ER模型 —— 前一章,ER 模型是概念设计工具,本章关系模型是逻辑模型
- 后续章节:SQL、关系规范化(函数依赖与范式)、事务、数据库性能调优等
说明:本笔记基于关系模型标准知识体系 + 从 PPT 中提取的有限关键词(E.F.Codd、笛卡尔积、n-tuple、TEACH(T,S,C) 关系示例、SQL Server 等)整理。由于 PPT 为图片型格式无法提取完整文本,具体案例数据、图示细节和讲解侧重点可能与实际授课有出入,仅供参考。
原始文件路径:
/田浩然上传的资料/0A102 数据库设计与实践/chap03 关系模型.ppt处理日期:2026-08-31 提取状态:partial_extraction(部分提取)