第二章:关系数据库
2.1 关系模型
2.1.1 关系数据结构
1. 关系的非形式化定义:满足一定条件的二维表。
2. 在集合论的基础上对关系进行定义:
- 域:一组具有相同数据类型的值的集合。例如:自然数、整数、{男,女}等。可以看出,同一域中的元素必须是相同的数据类型。
- 笛卡尔积:给定一组域D1,D2,…,Dn(这些域中可以有相同的)。D1,D2,…,Dn的笛卡尔积为: D1×D2×…×Dn={(d1,d2,…,dn)|di∈Di,i=1,2,…,n }
- 元组:每一个元素(d1,d2,…,dn)。
- 分量:元素中的每一个值di。
- 若Di(i=1,2,…,n)为有限集,其基数为mi(i=1,2,…,n),则D1×D2×…×Dn的基数M为:M=m1×m2×…×mn
例如:D1={孙悟空,宋江,林黛玉},D2={男,女},D3={西游记,水浒传,红楼梦}。
D1ХD2ХD3=
{{孙悟空,男,西游记},{宋江,男,西游记},
{林黛玉,男,西游记}, {孙悟空,女,西游记},
{宋江,女,西游记},{林黛玉,女,西游记},
{孙悟空,男,水浒传},{宋江,男,水浒传},
{林黛玉,男,水浒传}, {孙悟空,女,水浒传},
{宋江,女,水浒传},{林黛玉,女,水浒传},
{孙悟空,男,红楼梦},{宋江,男,红楼梦},
{林黛玉,男,红楼梦}, {孙悟空,女,红楼梦},
{宋江,女,红楼梦},{林黛玉,女,红楼梦}}
3. 关系的数学定义:D1×D2×…×Dn的子集叫作在域D1、D2、…、Dn上的关系,用R(D1, D2, …, Dn) 表示。R:关系的名字。n是关系的目或度。
小说名 | 人物名 | 性 别 |
---|---|---|
西游记 | 孙悟空 | 男 |
水浒传 | 宋江 | 男 |
红楼梦 | 林黛玉 | 女 |
注:如上表就是一个关系。对于一个笛卡尔积只有取它的子集才有意义,这也和用户看待的二维表一样,只有满足一定条件的二维表才是研究的对象。
4. 码:码由一个或几个属性组成,有如下几种码:
- 候选码:在一个关系中,能唯一标识元组的属性或最小属性集称为关系的候选码。
- 主码:若一个关系中有多个候选码,则选其中的一个为主码。
- 外码:设F是基本关系R的一个或一组属性,但不是R的码。Ks是基本关系S的主码。如果F与Ks相对应,则称F是R的外码。并称基本关系R为参照关系,基本关系S为被参照关系。
例如:学生关系和专业关系分别为:学生(学生编号,姓名,性别,年龄,专业编号,身份证号码),专业(专业编号,专业名称,专业负责人)。学生表的主码为“学生编号”,专业表的主码为“专业编号”。在学生表中“专业编号”这一属性不能任意取值,必须参照专业表中存在的专业来取,因此“专业编号”是学生表的外码。
5. 关系的性质:关系是一个二维表,表的每一行对应一个元组,表的每一列有一个属性名且对应一个域。
- 分量必须取原子值。
- 表中的列称为属性,给每列起一个名称即属性名。
- 列是同质的,即每一列的值来自同一域,具有相同的数据类型。每列的属性名是不同的。
- 列的排列顺序是无关紧要的,有时为了使用方便,使用时有列序。
- 关系中任意两个元组不能完全相同。
- 行的顺序无关。
- 每个关系都有称之为关键字的属性集唯一标识各元组。
2.1.2 关系操作
1. 操作对象是关系。
2. 基本操作方式有5种:
- 属性指定
- 元组选择
- 关系合并
- 元组插入
- 元组删除
2.1.3 关系完整性约束
1. 实体完整性规则:若属性A是基本关系R的主属性,则属性A不能取空值。
2. 参照完整性规则:若F是基本关系R的外码,并与 S的主码Ks相对应,则对于R中每个元组在F上的值必须为:
- 或者取空值(F的每个属性值均为空值)。
- 或者等于S中某个元组的主码值。
3. 用户自定义完整性规则:某一具体应用所涉及的数据必须满足的语义要求。如:职称(助教,讲师,副教授,教授),性别(男,女)。
2.2 关系代数
2.2.1 关系代数介绍
1. 关系代数:用户对关系数据的操作通过关系代数表达式描述。
2. 关系代数运算的三个要素:
- 运算对象:关系。
- 运算结果:关系。
- 运算符:四类。具体为:传统的集合运算符、专门的关系运算符、比较运算符和逻辑运算符。
3. 集合运算符表格:
运算符 | 含义 |
---|---|
∪ | 并 |
∩ | 交 |
— | 差 |
× | 广义笛卡尔积 |
4. 关系运算符表格:
运算符 | 含义 |
---|---|
σ | 选择运算 |
π | 投影运算 |
▷◁ | 连接运算 |
÷ | 除运算 |
5. 比较运算符表格:
运算符 | 含义 |
---|---|
> | 大于 |
≥ | 大于等于 |
< | 小于 |
≤ | 小于等于 |
= | 等于 |
≠ | 不等于 |
6. 逻辑运算符表格:
运算符 | 含义 |
---|---|
┐ | 非 |
∧ | 与 |
∨ | 或 |
7. 关系代数运算的分类:
- 传统的集合运算:并、差、交、广义笛卡尔积。
- 专门的关系运算:选择、投影、连接、除。
8. 表示记号:设关系模式为R(A1,A2,…,An)。t∈R表示t是R的一个元组,t[Ai]则表示元组t中相应于属性Ai的一个分量 。
2.2.2 传统的集合运算
1. 并运算:
- R和S(相容关系)具有相同的目n(即两个关系都有n个属性),相应的属性取自同一个域。
- R∪S:仍为n目关系,由属于R或属于S的元组组成,R∪S = { t|t ∈ R∨t ∈ S }。
2.差运算:
- R和S(相容关系)具有相同的目n(即两个关系都有n个属性),相应的属性取自同一个域。
- R-S:仍为n目关系,由属于R而不属于S的所有元组组成,R-S = { t|t ∈ R∧t ∉ S }。
3. 交运算:
- R和S(相容关系)具有相同的目n(即两个关系都有n个属性),相应的属性取自同一个域。
- R∩S:仍为n目关系,由既属于R又属于S的元组组成,R∩S = { t|t ∈ R∧t ∈S }。
4. 广义笛卡尔积运算:
- R为n目关系,k1个元组。S为m目关系,k2个元组。
- R×S:(n+m)列的元组的集合,元组的前n列是关系R的一个元组,后m列是关系S的一个元组。行为k1×k2个元组。 R×S = {tr ts |tr ∈R ∧ ts∈S }。
2.2.3 专门的关系运算
1. 选择运算:
- 选择又称为限制。
- 选择运算符的含义:在关系R中选择满足给定条件的元组组成一个新的关系,σF® = {t|t∈R∧F(t)= ‘真’}。F:选择条件,是由比较运算符和/或逻辑运算符组合构成的表达式。选择运算是单目运算,运算符为“ σ ”。
- 选择运算是从行的角度进行的运算。
2. 投影运算:
- 从R中选择出若干属性列组成新的关系,πA® = { t[A] | t ∈R },A是R中的属性列。
- 投影操作主要是从列的角度进行运算。
3. 连接运算:
- 从两个关系的笛卡尔积中选取属性间满足一定条件的元组。
- 连接运算从R和S的广义笛卡尔积R×S中选取(R关系)在A属性组上的值与(S关系)在B属性组上值满足比较关系的元组。
4. 两类常用连接运算:
- 等值连接:从关系R与S的广义笛卡尔积中选取A、B属性值相等的那些元组。
- 自然连接:自然连接是一种特殊的等值连接。两个关系中进行比较的分量必须是相同的属性组,在结果中把重复的属性列去掉。
- 区别:①等值连接要求相等的分量,但不一定是公共属性,而自然连接要求相等的分量必须是公共属性。 ②等值连接不做投影运算,而自然连接要把重复的属性去掉。 ③自然连接一定是等值连接,但等值连接不一定是自然连接。
5. 象集:给定一个关系R(X,Z),X和Z为属性组。当t[X]=x时,x在R中的象集为Zx={t[Z]| t ∈R,t[X]=x}。它表示R中属性组X上值为x的诸元组在Z上分量的集合。
6. 除运算:
- 给定关系R (X,Y) 和S (Y,Z),其中X,Y,Z为属性组。R中的Y与S中的Y可以有不同的属性名,但必须出自相同的域集。R与S的除运算得到一个新的关系P(X),P是R中满足下列条件的元组在X属性列上的投影:元组在X上分量值x的象集Yx包含S在Y上投影的集合。
- R÷S = {tr [X] | tr ∈ R∧πY (S) ∈ Yx },Yx:x在R中的象集,x = tr[X]。
- 代数表示法:R÷S = πx( R)—πx((πx( R)×πy(S))—R)。
2.3 查询优化
2.3.1 查询优化的必要性
对于同一个查询语句,可以用不同的关系代数表达,但是它们之间的效率却可能相差很大。由于笛卡尔积运算的运算量大且产生的中间结果多,所以越早进行投影和选择运算来减少中间结果,越能够提高查询效率。
关系代数表达式的等价是指用相同的关系代数代替两个表达式中相应的关系所得到的结果是相同的。两个关系代数表达式E1和E2的等价写成E1≡E2。
2.3.2 查询优化的策略和算法
1. 优化策略:
- (1)尽可能早地执行选择操作(减少中间运算结果)。
- (2)对关系进行预处理(索引、排序)。
- (3)同时进行投影和选择运算。
- (4)把投影同其前或后的双目运算结合起来(合并连接的选择与投影操作,以减少扫描的次数)。
- (5)合并选择与笛卡尔积组成一个连接。
- (6)寻找公共子表达式。
2. 关系代数等价变换规则:
- 连接、笛卡尔积交换律。
- 连接、笛卡尔积结合律。
- 投影的串接定律(注意条件)。
- 选择的串接定律。
- 选择与投影的交换律(注意条件)。
- 选择与笛卡尔积的交换律。
- 选择与并的分配律。
- 选择与差的分配律。
- 投影与笛卡尔积的分配律。
- 投影与并的分配律。
3. 关系代数表达式的优化算法:
- 把σF1∧F2 ∧ …∧Fn(E)变换为σF1 (σF2(…(σFn( E))…))。
- 对每一个选择尽可能把它移到树的叶端。
- 对每一个投影尽可能把它移到树的叶端。
- 合并选择和投影或一个选择后跟一个投影。
- 将得到的语法树的内节点分组(每一双目运算和它所有的直接祖先为一组)。
- 生成一个程序,每组节点的计算是程序中的一步。求值顺序为先子孙,后祖先。
2.4 关系系统
2.4.1 关系系统的定义
关系系统的定义:一个系统可定义为关系系统,当且仅当它支持:(1)关系数据结构(2)支持选择、投影和(自然)连接运算,对这些运算不必要求定义任何物理存取路径。
2.4.2 关系系统的分类
- 表式系统:仅支持数据结构,不能算关系系统。
- (最小)关系系统:数据结构+三种关系操作。
- 关系完备的系统:数据结构+所有关系代数操作。
- 全关系系统:支持关系模型的所有特征。
注: S: 数据结构, M: 数据操作, I: 完整性约束。如上图是四种关系系统的图示说明。