第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 关系模型的三大要素

  1. 数据结构:关系(二维表)——所有数据都用关系来表示
  2. 数据操作:关系代数 + 关系演算——基于集合的非过程化操作
  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 关系的性质

  1. 列是同质的:每一列中的分量来自同一个域
  2. 不同的列可出自同一个域:如”出生年份”和”入学年份”可同属年份域,但属性名必须不同
  3. 列的顺序无所谓:列的次序可以任意交换
  4. 任意两个元组不能完全相同:关系是集合,不允许重复元组
  5. 行的顺序无所谓:元组的次序可以任意交换
  6. 分量必须取原子值:每一个分量都必须是不可分的数据项(第一范式 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 上的值必须:

  1. 或者取空值(F 的每个属性值均为空值)
  2. 或者等于 S 中某个元组的主键值

外键的值不允许参照不存在的主键值。

什么时候外键可以为空?

  • 取决于外键是否参与构成参照关系的主键
  • 如果外键是参照关系主键的一部分 → 不能为空(实体完整性约束)
  • 如果外键不是参照关系主键的一部分 → 可以为空

4.3 用户自定义完整性(User-defined Integrity)

针对某一具体关系数据库的约束条件,反映某一具体应用所涉及的数据必须满足的语义要求。

例如:

  • 成绩必须在 0 ~ 100 之间
  • 性别只能是”男”或”女”
  • 身份证号必须是 18 位
  • 邮箱格式必须合法

DBMS 提供定义和检验这类完整性的机制,如 CHECK 约束、触发器等。


五、关系代数

关系代数是一种抽象的查询语言,用对关系的运算来表达查询。运算对象是关系,运算结果也是关系。

5.1 五大基本运算

  1. 选择(Selection):σ —— 水平方向选元组
  2. 投影(Projection):π —— 垂直方向选属性
  3. 并(Union):∪ —— 两个关系的合并
  4. 差(Difference):− —— 从一个关系中去掉另一个关系的元组
  5. 笛卡尔积(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 的组成

  1. 数据定义语言(DDL):CREATE / ALTER / DROP
  2. 数据操纵语言(DML):SELECT / INSERT / UPDATE / DELETE
  3. 数据控制语言(DCL):GRANT / REVOKE
  4. 嵌入式 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 优点

  1. 概念单一:实体和联系都用关系表示,结构简单统一
  2. 非过程化:用户只需声明”要什么”,不需”怎么找”
  3. 坚实的数学基础:建立在集合论和谓词逻辑之上
  4. 数据独立性高:物理独立性和逻辑独立性都好
  5. 集合操作:操作对象和结果都是集合(元组集合)
  6. 标准统一:SQL 成为工业标准

8.2 缺点 / 局限

  1. 表达能力有限:对某些复杂查询(如递归查询)表达困难
  2. 面向对象能力弱:不直接支持继承、聚合等 OO 概念
  3. 复杂数据类型支持不足:传统关系模型难以处理图像、音频、XML 等非结构化数据
  4. 阻抗失配(Impedance Mismatch):与面向对象编程语言的数据模型不匹配

这些局限推动了后续数据库技术的发展:面向对象数据库、对象-关系数据库、NoSQL 数据库等。


九、本章要点回顾

  1. 三个核心概念:域、笛卡尔积、关系
  2. 关系的六条性质:列同质、列序无关、无重复元组、行序无关、分量原子、属性名唯一
  3. 三类键:候选键、主键、外键
  4. 三大完整性:实体完整性、参照完整性、用户自定义完整性
  5. 五种基本关系代数运算:选择、投影、并、差、笛卡尔积
  6. 三种常用附加运算:交、连接、除
  7. 关系演算:元组关系演算与域关系演算,与关系代数等价
  8. 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(部分提取)