[数据库原理1] 第3章 关系运算
3.1 关系数据模型
3.1.1 关系数据模型的定义
关系模型: 用二维表格表示实体集,用关键码表示实体间联系的数据模型
笛卡尔积:
D1×D2×…×Dn >> (d1,d2,…,dn) 元组
di称为元组分量
基数:m1×m2×…×mn个元组
关系:笛卡尔积的子集
(集合论定义关系) 将关系看成一张二维表格:
行—元组/实体
列—属性(属性个数即为元数)
二维表格表示的是一个实体集合
关系特点P40
3.1.2 关键码和表之间的联系
通常键由一个或几个属性组成
- 超键:能唯一标识元组的属性或属性集(允许有多余属性)
- 候选键:属性集能唯一标识元组且又不含有多余的属性
- 主键:选择多个候选键中的一个
- 外键
3.1.3 关系模式、关系子模式和存储模式
- 关系模式
关系模式是对关系的描述,它包括模式名、组成该关系的诸属性名、值域名和模式的主键。具体的关系称为实例。 - 关系子模式
关系子模式是用户所需数据的结构的描述,其中包含这些数据来自哪些模式和应满足哪些条件。 - 存储模式
存储模式描述了关系是如何在物理存储设备上存储的。关系存储时的基本组织方式是文件。
3.1.4 关系模型的完整性规则
关系模式提供了三类完整性规则1/2/3
关系完整性规则: 1/2是关系模型必须满足的完整性的约束条件
- 实体完整性规则
关系中元组的主键值不能为空 - 参照完整性规则
外键必须是另一个表的主键的有效值,或者是一个“空值” - 用户定义的完整性规则
针对某一具体数据的约束条件,由应用环境决定
3.1.5 关系模型的形式定义
关系模型有三个组成部分:数据结构、数据操作、完整性规则
- 关系模型基本的数据结构是关系
- 操作:关系运算分为关系代数和关系演算两类
- 关系模型的三类完整性规则
3.2 关系代数
3.2.1 关系查询语言和关系运算
关系查询语言根据其理论基础的不同分为两大类:
- 关系代数语言:查询操作是以集合操作为基础的运算
- 关系演算语言:查询操作是以谓词演算为基础的运算
关系代数语言的非过程性较弱,在查询表达式中必须指出操作的先后顺序;关系演算语言的非过程性较强,操作顺序仅限于量词的顺序。
3.2.2 关系代数的五个基本操作
关系代数是以集合代数为基础发展起来的,它是以关系为运算对象的一组高级运算的集合
由于关系定义为元数相同的元组集合,因此把关系看成集合
五个基本操作:
- 并
并运算要求两个关系属性的性质必须一致且并运算的结果要消除重复的元组
结果仍为n元的关系 - 差
R-S:元组属于R,但不属于S
结果仍为n元的关系 - 笛卡尔积 R×S
R和S元数分别为r和s,R×S是一个(r+s)元的元组集合
若R有n个元组,S有m个元组,则R×S有n×m个元组 - 投影 πi1,i2,…,im(R)
投影对一个关系进行垂直分割,消去某些列,并重新安排列的顺序,再删去重复元组 - 选择 σF(R)
从表R中选择满足F(t)=true的元组t
3.2.3 关系代数的组合操作
3.2.2节所述的五个基本操作可以组合成下列四个操作:
- 交
结果仍为n元的关系
R∩S=R-(R-S)/S-(S-R) - 连接
连接操作是笛卡尔积和选择操作的组合
连接分为θ连接和F连接两种
(1) θ连接
该式表示θ连接是在关系R和S的笛卡尔积中挑选第i个分量和第(r+j)个分量满足θ运算的元组
(2) F连接
这里F是形为F1∧F2∧…∧Fn的公式,每个Fi是形为iθj的式子
(3) 自然连接
具体计算过程如下:
(4) 除
R÷S是一个(r-s)元的元组的集合
3.2.5 扩充的关系代数操作
-
外连接
保存关系R和关系S中不存在公共属性上值相等的元组
同时在这些元组新增加的属性上填上空值(NULL)
----左外连接/右外连接 -
外部并
关系R和关系S的关系模式不同,构成的新关系属性由关系R和关系S的所有属性组成(公共属性只取一次),同时元组在新增加的属性上填上空值 -
半连接
定义为关系R和关系S的自然连接在关系R的属性集上的投影
半连接的交换律是不成立的
3.3 关系演算
关系演算根据所用到的变量不同可分为元组关系演算和域关系演算,前者以元组为变量,后者以域为变量,分别简称为元组演算和域演算
3.3.1 元组关系演算
元组关系演算用表达式表示:
关系代数表达式到元组表达式的转换 P56-57
3.3.2 域关系演算
与元组关系演算相比,不同之处是用域变量代替元组变量的每一个分量,域变量的变化范围是某个值域而不是一个关系
元组表达式到域表达式的转换 P57-58
3.3.3 关系运算的安全性和等价性
-
关系运算的安全性
任何一个有限关系上的关系代数操作结果都不会导致无限关系和无穷验证,所以关系代数系统总是安全的
元组关系演算系统和域关系演算系统可能产生无限关系和无穷验证
对元组关系演算要进行安全约束
安全约束是对关系演算表达式施加限制条件,对表达式中的变量取值规定一个范围,使之不产生无限关系和无穷次验证,这种表达式被称为是安全表达式
在关系演算中,约定运算只对表达式中公式涉及的关系值范围内的变量进行操作,这样就不会产生无限关系和无穷次验证问题,关系演算才是安全的 -
关系运算的等价性
并、差、笛卡尔积、投影和选择是关系代数最基本的操作,并构成了关系代数运算的最小完备集
关系代数、安全的元组关系演算、安全的域关系演算在关系的表达和操作能力上是等价的
关系运算主要有关系代数、元组演算和域演算三种
3.4 查询优化
3.4.2 关系代数表达式的等价变换规则
- 连接和笛卡尔积满足交换律
- 连接和笛卡尔积满足结合律
- 投影的串接
- 选择的串接
- 选择和投影操作的交换
- 选择对笛卡尔积的分配律
- 选择对并的分配律
- 选择对集合差的分配律
- 选择对自然连接的分配律
- 投影对笛卡尔积的分配律
- 投影对并的分配律
- 选择与连接操作的结合
- 并和交的交换律
- 并和交的结合律
3.4.4 优化算法
使用规则尽可能把选择操作和投影操作移近树的叶端
分组