关系数据库
2.1 关系模型概述
关系数据库简介
- E.F.Codd(美国IBM公司)于1970年系统而严格地提出关系模型,论文《A Relational Model of Data for Large Shared Data Banks》发表在《Communication of the ACM》
- 之后提出了关系代数和关系演算的概念
- 1972年提出关系的第一、第二、第三范式
- 1974年提出关系的BC范式
- 关系数据库应用数学方法来处理数据库中的数据
- 20世纪80年代后,关系数据库系统成为最重要、最流行的数据库系统
典型系统:
- 实验系统:System R、University INGRES
- 商用系统:ORACLE、SYBASE、INFORMIX、DB2、INGRES
关系模型的组成
关系模型由三部分组成:
- 关系数据结构
- 关系操作集合
- 关系完整性约束
1. 关系数据结构
- 单一的数据结构——关系
- 现实世界的实体以及实体间的各种联系均用关系来表示
- 数据的逻辑结构——二维表(从用户角度,关系模型中数据的逻辑结构是一张二维表)
2. 关系操作
(1)常用的关系操作
- 查询操作:选择、投影、连接、除、并、交、差
- 查询的表达能力是其中最主要的部分
- 5种基本操作:选择、投影、并、差、笛卡尔积
- 数据更新操作:插入、删除、修改
(2)关系操作的特点
- 集合操作方式:操作的对象和结果都是集合
- 非关系数据模型的数据操作方式:一次一记录(如文件系统)
(3)关系数据语言的种类
| 语言类型 | 特点 | 典型代表 |
|---|---|---|
| 关系代数语言 | 用对关系的运算来表达查询要求 | ISBL |
| 关系演算语言 | 用谓词来表达查询要求 | |
| - 元组关系演算语言 | 谓词变元的基本对象是元组变量 | APLHA, QUEL |
| - 域关系演算语言 | 谓词变元的基本对象是域变量 | QBE |
| 具有双重特点的语言 | 兼具关系代数和关系演算 | SQL |
(4)关系数据语言的特点
- 高度非过程化的语言
- 存取路径的选择由DBMS的优化机制来完成
- 用户不必用循环结构就可以完成数据操作
- 能够嵌入高级语言中使用
- 关系代数、元组关系演算和域关系演算三种语言在表达能力上完全等价
3. 关系的三类完整性约束
| 完整性约束 | 说明 |
|---|---|
| 实体完整性 | 通常由关系系统自动支持 |
| 参照完整性 | 早期系统不支持,目前大型系统能自动支持 |
| 用户定义的完整性 | 反映应用领域需要遵循的约束条件,体现具体领域中的语义约束,用户定义后由系统支持 |
2.2 关系数据结构及形式化定义
关系模型建立在集合代数的基础上。
2.2.1 关系
1. 域(Domain)
域是一组具有相同数据类型的值的集合。例如:
- 整数
- 实数
- 介于某个取值范围的整数
- 长度指定的字符串集合
{'男','女'}- 介于某个取值范围的日期
2. 笛卡尔积(Cartesian Product)
(1)定义
给定一组域
所有域的所有取值的一个组合,不能重复。
(2)示例
给出三个域:
则
(3)基本概念
| 概念 | 英文 | 说明 |
|---|---|---|
| 元组(Tuple) | Tuple | 笛卡尔积中每一个元素 |
| 分量(Component) | Component | 笛卡尔积元素中的每一个值 |
| 基数(Cardinal number) | Cardinality | 若 |
(4)笛卡尔积的表示方法
笛卡尔积可表示为一张二维表,表中的每行对应一个元组,每列对应一个域。
3. 关系(Relation)
(1)定义
:关系名 :关系的目或度(Degree)
注意:
- 关系是笛卡尔积的有限子集(无限关系在数据库系统中无意义)
- 笛卡尔积不满足交换律,但关系满足交换律。解决方法:为关系的每个列附加一个属性名以取消关系元组的有序性
示例:
关系
假设专业与导师为1:n,导师与研究生为1:n,则SAP关系可以包含三个元组:
{ (张清玫, 信息专业, 李勇),
(张清玫, 信息专业, 刘晨),
(刘逸, 信息专业, 王敏) }(2)元组:关系中的每个元素称为元组,通常用
(3)单元关系与二元关系:
时,称为单元关系(Unary relation) 时,称为二元关系(Binary relation)
(4)关系的表示:关系也是一个二维表,每行对应一个元组,每列对应一个域。
(5)属性:关系中不同列可以对应相同的域,为了加以区分,必须对每列起一个名字,称为属性(Attribute)。n目关系必有n个属性。
(6)码(Key)
| 概念 | 说明 |
|---|---|
| 候选码(Candidate key) | 某一属性组的值能唯一地标识一个元组,且其真子集不能唯一标识,则称该属性组为候选码。最简单的情况:候选码只包含一个属性 |
| 全码(All-key) | 最极端的情况:所有属性组都是候选码 |
| 主码(Primary key) | 若一个关系有多个候选码,则选定其中一个为主码 |
| 主属性(Prime attribute) | 候选码的诸属性称为主属性 |
| 非主属性(Non-key attribute) | 不包含在任何候选码中的属性 |
(7)三类关系
| 类型 | 说明 |
|---|---|
| 基本关系(基本表或基表) | 实际存在的表,是实际存储数据的逻辑表示 |
| 查询表 | 查询结果对应的表 |
| 视图表 | 由基本表或其他视图表导出的表,是虚表,不对应实际存储的数据 |
(8)基本关系的性质
- 列是同质的(Homogeneous):每一列中的分量是同一类型的数据,来自同一个域
- 不同的列可出自同一个域:每一列称为一个属性,不同的属性要给予不同的属性名
- 例如:导师属性和研究生属性都从PERSON域中取值,必须取不同的属性名
- 列的顺序无所谓:列的次序可以任意交换
- 遵循此性质的产品(如ORACLE)增加新属性时插至最后一列
- 不遵循者(如FoxPro)区分属性顺序
- 任意两个元组的候选码不能相同(由笛卡尔积性质决定)
- 但许多产品(如Oracle、FoxPro)允许存在完全相同元组,除非定义了约束
- 行的顺序无所谓:行的次序可以任意交换
- 遵循者(如ORACLE)插入元组时插至最后一行
- 分量必须取原子值:每一个分量都必须是不可分的数据项(规范条件中最基本的一条)
2.2.2 关系模式
1. 什么是关系模式
- 关系模式(Relation Schema)是型,关系是值
- 关系模式是对关系的描述,包括:
- 元组集合的结构:属性构成、属性来自的域、属性与域之间的映像关系
- 完整性约束条件:属性取值范围的限定、属性之间的相互关联和相互约束
2. 关系模式的形式化定义
关系模式可以形式化地表示为:
| 符号 | 含义 |
|---|---|
| 关系名 | |
| 组成该关系的属性名集合 | |
| 属性组 | |
| 属性向域的映像集合 | |
| 属性间数据的依赖关系的集合 |
示例: 导师和研究生出自同一个域——人,定义
关系模式通常可以简记为:
:关系名 :属性名 - 域名及属性向域的映像常常直接说明为属性的类型、长度
3. 关系模式与关系
| 对比维度 | 关系模式 | 关系 |
|---|---|---|
| 本质 | 型(对关系的描述) | 值(关系模式在某一时刻的状态或内容) |
| 性质 | 静态的、稳定的 | 动态的、随时间不断变化的 |
| 统称 | 关系模式和关系往往统称为关系,通过上下文加以区别 |
2.2.3 关系数据库
1. 关系数据库
在一个给定的应用领域中,所有实体及实体之间联系的关系的集合构成一个关系数据库。
2. 关系数据库的型与值
- 关系数据库的型称为关系数据库模式,是对关系数据库的描述,包括:
- 若干域的定义
- 在这些域上定义的若干关系模式
- 关系数据库的值是这些关系模式在某一时刻对应的关系的集合,通常简称为关系数据库
2.3 关系的完整性
关系模型的完整性规则是对关系的某种约束条件。
- 实体完整性和参照完整性:关系模型必须满足的完整性约束条件,被称作关系的两个不变性,应由关系系统自动支持
- 用户定义的完整性:应用领域需要遵循的约束条件,体现了具体领域中的语义约束
2.3.1 实体完整性
实体完整性规则(Entity Integrity):
若属性
是基本关系 的主属性,则属性 不能取空值。
示例:
- SAP(SUPERVISOR, SPECIALITY, POSTGRADUATE)
- POSTGRADUATE为主码(假设研究生不会重名),则其不能取空值
- 选修(学号,课程号,成绩)
- "学号、课程号"为主码,则两个属性都不能取空值
遵守实体完整性规则的原因:
- 实体完整性规则针对基本关系(一个基本表通常对应一个实体集或多对多联系)
- 现实世界中的实体和实体间的联系都是可区分的(具有某种唯一性标识)
- 关系模型中以主码作为唯一性标识
- 主码中的属性即主属性不能取空值。空值就是"不知道"或"无意义"的值。主属性取空值,就说明存在不可区分的实体,与第(2)点矛盾
2.3.2 参照完整性
1. 关系间的引用
在关系模型中,实体及实体间的联系都用关系来描述,因此可能存在关系与关系间的引用。
示例1: 学生实体、专业实体以及专业与学生间的一对多联系
学生(学号,姓名,性别,专业号,年龄)
专业(专业号,专业名)示例2: 学生、课程、学生与课程之间的多对多联系
学生(学号,姓名,性别,专业号,年龄)
课程(课程号,课程名,学分)
选修(学号,课程号,成绩)示例3: 学生实体及其内部的领导联系(一对多)
学生(学号,姓名,性别,专业号,年龄,班长)2. 外码(Foreign Key)
设
是基本关系 的一个或一组属性,但不是关系 的码。如果 与基本关系 的主码 相对应,则称 是基本关系 的外码。
- 基本关系
称为参照关系(Referencing Relation) - 基本关系
称为被参照关系(Referenced Relation)或目标关系(Target Relation)
说明:
- 关系
和 不一定是不同的关系 - 目标关系
的主码 和参照关系的外码 必须定义在同一个(或一组)域上 - 外码并不一定要与相应的主码同名(但通常取相同的名字以便于识别)
3. 参照完整性规则
若属性(或属性组)
是基本关系 的外码,它与基本关系 的主码 相对应,则对于 中每个元组在 上的值必须为:
- 或者取空值(
的每个属性值均为空值) - 或者等于
中某个元组的主码值
应用示例:
- 学生关系中"专业号"只能取:空值(尚未分配专业)或专业关系中已存在的专业号值
- 选修关系中"学号"和"课程号"既是主属性又是外码,只能取相应被参照关系中已经存在的主码值
- 学生关系中"班长"属性值可以取:空值(未选班长或本人即为班长)或本关系中某个元组的学号值
2.3.3 用户定义的完整性
用户定义的完整性是针对某一具体关系数据库的约束条件,反映某一具体应用所涉及的数据必须满足的语义要求。
关系模型应提供定义和检验这类完整性的机制,由系统统一处理,而非由应用程序承担。
示例:
课程(课程号,课程名,学分)- "课程名"属性必须取唯一值
- 非主属性"课程名"也不能取空值
- "学分"属性只能取值
{1, 2, 3, 4}
2.4 关系代数
概述
1. 关系代数
- 一种抽象的查询语言
- 用对关系的运算来表达查询
2. 运算的三要素
运算对象、运算结果、运算符。
3. 关系代数运算的三个要素
| 要素 | 内容 |
|---|---|
| 运算对象 | 关系 |
| 运算结果 | 关系 |
| 运算符 | 四类(集合运算符、专门的关系运算符、算术比较符、逻辑运算符) |
运算符分类:
| 运算符类型 | 说明 |
|---|---|
| 集合运算符 | 将关系看成元组的集合,从关系的"水平"方向(行的角度)进行运算 |
| 专门的关系运算符 | 不仅涉及行而且涉及列 |
| 算术比较符 | 辅助专门的关系运算符进行操作 |
| 逻辑运算符 | 辅助专门的关系运算符进行操作 |
4. 关系代数运算的分类
| 运算类别 | 包含的运算 |
|---|---|
| 传统的集合运算 | 并、差、交、广义笛卡尔积 |
| 专门的关系运算 | 选择、投影、连接、除 |
5. 表示记号
(1)
设关系模式为
(2)
若
(3)
(4)象集
给定一个关系
表示
2.4.1 传统的集合运算
要求:
1. 并(Union)
- 仍为 n 目关系
- 由属于
或属于 的元组组成
2. 差(Difference)
- 仍为 n 目关系
- 由属于
而不属于 的所有元组组成
3. 交(Intersection)
- 仍为 n 目关系
- 由既属于
又属于 的元组组成 - 可表示为:
4. 广义笛卡尔积(Extended Cartesian Product)
| 维度 | 结果 |
|---|---|
| 列 | |
| 行 |
2.4.2 专门的关系运算
1. 选择(Selection)
(1)定义
选择又称为限制(Restriction)。在关系
:选择条件,是一个逻辑表达式 - 基本形式:
:比较运算符( ) 等:属性名、常量、简单函数(属性名可用序号代替) :逻辑运算符( 或 )
(2)特点
选择运算是从行的角度进行的运算。
(3)示例
例 1:查询信息系(IS 系)全体学生
例 2:查询年龄小于 20 岁的学生
2. 投影(Projection)
(1)定义
从
: 中的属性列
(2)特点
- 投影操作主要是从列的角度进行运算
- 投影之后不仅取消了原关系中的某些列,还可能取消某些元组(避免重复行)
(3)示例
例 3:查询学生的姓名和所在系
例 4:查询学生关系 Student 中都有哪些系
3. 连接(Join)
(1)定义(θ连接)
从两个关系的笛卡尔积中选取属性间满足一定条件的元组:
和 :分别为 和 上度数相等且可比的属性组 :比较运算符
连接运算是从
(2)两类常用连接
① 等值连接(equijoin)
② 自然连接(Natural join)
- 是一种特殊的等值连接
- 两个关系中进行比较的分量必须是相同的属性组
- 在结果中去掉重复的属性列
(3)运算角度
- 一般的连接操作是从行的角度进行运算
- 自然连接还需要取消重复列,所以是同时从行和列的角度进行运算
(4)悬浮元组与外连接
| 概念 | 说明 |
|---|---|
| 悬浮元组(Dangling tuple) | 关系 |
| 外连接(OUTER JOIN) | 把悬浮元组也保存在结果关系中,在其他属性上填空值(Null) |
| 左外连接(LEFT JOIN) | 只保留左边关系 |
| 右外连接(RIGHT JOIN) | 只保留右边关系 |
4. 除(Division)
(1)定义
给定关系
: 在 中的象集,
除运算得到一个新的关系
(2)特点
除操作是同时从行和列角度进行运算。
(3)示例分析
R:
A B C
a1 b1 c2
a1 b2 c3
a1 b2 c1
a2 b3 c7
a2 b2 c3
a3 b4 c6
a4 b6 c6
S:
B C
b1 c2
b2 c1
b2 c3分析:
的象集: 的象集: 的象集: 的象集: 在 上的投影:
只有
5. 综合举例
示例数据库: 学生-课程数据库(Student, Course, SC)
例 7:查询至少选修 1 号课程和 3 号课程的学生号码
结果为
例 8:查询选修了 2 号课程的学生的学号
例 9:查询至少选修了一门其直接先行课为 5 号课程的学生姓名
例 10:查询选修了全部课程的学生号码和姓名
本章小结
本章围绕关系模型展开,重点说明关系数据结构、关系操作和关系完整性约束。
关键内容
- 关系数据结构:关系由域、笛卡尔积和关系逐步定义,核心概念包括属性、元组、候选码、主码、主属性和关系模式。
- 基本关系性质:列同质,列可同域,行列顺序无关,候选码唯一,分量必须是原子值。
- 关系操作集合:查询操作包括选择、投影、连接、除、并、交、差;更新操作包括插入、删除、修改。
- 关系代数运算:五种基本运算是并、差、笛卡尔积、投影、选择;交、连接、除可由基本运算导出。
- 完整性约束:实体完整性要求主属性非空,参照完整性约束外码取值,用户定义完整性表达具体应用语义。
核心要点
- 关系模型以二维表为逻辑结构,但其理论基础是集合代数。
- 关系代数的基本运算具备完备表达能力,导出运算用于简化查询表达。
- 关系完整性约束保证关系数据库中的数据符合实体、引用关系和业务语义。
关键术语
域, 笛卡尔积, 关系, 元组, 属性, 候选码, 主码, 外码, 关系模式, 关系代数, 实体完整性, 参照完整性, 用户定义完整性。