数据模型的三要素
数据结构(静态特性) 关系数据模型——关系
数据操作(动态特性)
关系数据模型——关系操作 完整性约束(制约与依存)
关系数据模型——三类完整性约束
现实世界的实体以及实体间的各种联系均用关系来表示
域
是一组具有相同数据类型的值的集合
例如:
整数
实数
介于某个取值范围的整数
指定长度的字符串集合
{‘男’,‘女’}… …
笛卡尔积
给定一组域D1,D2, …,Dn,且允许其中某些域是相同的, 定义
D
1
,D2,…,Dn的笛卡尔积(Cartesian Product)为:
D1D2…Dn={(d1,d2,…,dn) | diDi,i=l,2,…,n},
其中的每一个元素(d1,d2,…,dn)叫做一个n元组(n-tuple),元素中第i个值di叫做第i个分量。
例题1:设D1={1, 2, 3},D2={a, b},则
D1×D2={ (1,a), (1,b), (2,a), (2,b), (3,a), (3,b)}
基数(Cardinal number)
若Di(i=1,2,…,n)为有限集,其包含的元素个数为mi(i=1,2,…,n),则D1D2…Dn包含的元素个数为
M=m1m2…mn
M也称为基数。
关系
笛卡尔积D1D2…Dn的子集称为D1, D2, …, Dn上的一个关系(Relation)。域D1, D2, …, Dn是关系中元组的取值范围,称为关系的域(Domain),n称为关系的度(Degree)。
关系可用R(D1, D2, …, Dn)表示,R是关系名
n=1,则为一元关系,n=2,则为二元关系,…
关系是笛卡尔积的有一定意义的、有限的子集
按照笛卡尔积的定义,关系可以是一个无限集合。由于笛卡尔积不满足交换率,所以按照数学定律,(d1,d2,…,dn)≠(d2,d1,…,dn)。
当关系作为关系数据模型的数据结构时,需要给予限定和扩充: 无限关系在数据库系统中无意义,因此,限定关系数据模型中的关系必须是有意义和有限的集合。
通过为关系的每个列附加一个属性名的方法取消了关系元素的有序性。即(d1,d2,…,dn) = (d2,d1,…,dn) 。因为元组之间的区别仅仅是其中属性值的区别。
关系的性质
每一列中的值是同类型的数据,都来自同一个域。
不同的列可以有相同的域,每一列称为一个属性,用属性名标识。
元组中的每个分量是不可分的数据项
关系中的各个元组是不同的,即不允许有重复的元组。 分量的次序是无关紧要的。
基本概念
候选键:能唯一地标识出一个元组的属性或属性组。 联合键:两个或两个以上属性组成的候选键。
全键:关系的全部属性构成关系的唯一候选键。
主键:如果一个关系有多个候选键,可选择其中的一个候选键作为主键(Primary key)。
一个关系中只能有一个主键
外键:关系R中的一组属性A不是关系R的主键,但A是另一个关系S的主键,则属性组A就是关系R的外键。
关系模式
对一类实体特征的结构性描述,即对关系的结构性描述,该描述一般包括关系名、属性名、属性域的类型和长度,属性之间固有的依赖联系等。
若U={A1, A2 …, An}为关系R的属性集,则关系模式简记为R(U)
或R(A1, A2, …, An)
关系模式和关系的区别和联系
关系模式描述的是关系的静态结构信息,是对一个关系的“型”的描述,是相对固定的。关系是在关系模式约束之下的若干实体的集合,实体的数量是随时间变化的,但这种变化必定在关系模式的约束范围内。
三类完整性约束
实体完整性 关系模型必须满足的完整性约束条件,称为关系的两个不变性,应该由关系系统自动支持
参照完整性 关系模型必须满足的完整性约束条件,称为关系的两个不变性,应该由关系系统自动支持
用户定义的完整性 应用领域需要遵循的约束条件,体现了具体领域中的语义约束
实体完整性
是指对关系中的每一个元组,其主键属性对应的各个分量不能为空值(NULL)。
例如 学生选课的关系:Reports(Sno, Cno, Grade)中,Sno和Cno共同组成为主关键字,则Sno和Cno两个属性都不能为空。
注:实体完整性规则针对基本关系
参照完整性
设属性组A是关系R的外键,且A又是关系S的主键,则对于R中的每一个元组在属性组A上的值必须为:或者空值或者等于S中某一个元组的主键值。
例:
有两个实体集,Students(参照关系)(Sno, Sname, Sgender, Sbirth, Dno),Department(被参照关系)(Dno, Dname)
参照完整性规则给出了关系之间建立联系的约束条件
几点说明
被参照关系和参照关系不一定是不同的关系
例:Courses中的Cno与Pre_Cno
被参照关系的主键和参照关系的外键必须定义在同一个(或一组)域上
外键并不一定要与相应的主键同名
例:Teachers中的Tno与Department中的Dheader
当外键与相应的主键属于不同关系时,往往取相同的名字,以便于识别
用户定义完整性
用户根据具体应用而针对某一具体数据附加的约束条件,也称为域完整性。
域完整性限制了某些属性中出现的值,把属性限制在一个有限的集合中。
例如
如果属性类型是整数,那么它就不能是101.5或任何非整数。
说明:现在的商品化RDBMS提供了定义和检查这类完整性约束的机制。
7.3 关系操作——关系代数
关系操作
对关系进行操作,且其操作的对象和结果都是关系(集合)。
主要有查询操作(选择、投影、连接 、除、并、交、差等)和更新操作(增加、删除、修改等)。
7.3 关系操作——关系代数
关系操作的表示方式
关系代数
用代数运算来表达关系的查询要求和条件
关系演算
用谓词来表达关系的查询要求和条件
按照谓词变元的基本对象不同,可分为元组关系演算和域关系演算
SQL(Structure Query Language)
是介于关系代数和关系演算之间的关系数据语言
表达能力完全等价是高度非过程化语言,是高级数据语言的基础
7.3 关系操作——关系代数
关系代数是一种抽象的查询语言,是关系数据操作语言的
传统表达方式
关系代数的运算对象是关系,运算结果也是关系 可分为两类:
传统的集合运算:并、交、差、笛卡尔积
专门的关系运算:投影、选择、连接、除法
7.3 关系操作——关系代数
定义3.3 (相容)指关系R和S满足以下两点:
1) R和S具有相同的度
2) R中的第i个属性和S中的第i个属性定义在同一个域上(i=l,2,…,n)
传统的集合运算——二目运算
并运算 (UNION)
设关系R和S是相容的,则它们的并是一个新的关系,它由属于R或属于S的所有元组构成。 记为 R∪S = {t | tR∨tS} 。
交运算 (INTERSECT)
设关系R和S是相容的,则它们的交是一个新的关系,它由属于R同时也属于S的元组构成。 记为 R∩S= { t | tR∧tS } 。
差运算 (EXCEPT)
设关系R和S是相容的,则它们的差是一个新的关系,它由属于R但不属于S的元组构成。 记为 R-S = {t | tR∧tS} 。广义笛卡尔积
设R为m元关系,S为n元关系,则R与S的广义笛卡尔积R×S是一个(m+n)元关系,其中的每个元组的前m个分量是R中的一个元组,后n个分量是S中的一个元组。若R有k1个元组,S有k2个元组,则R×S有(k1×k2)个元组,即广义笛卡尔积。记为:
R×S={(a1, a2, …, am, b1, b2, …, bn) | (a1, a2, …, am)R∧(b1, b2, …, bn)S}传统的集合运算——二目运算
广义笛卡尔积专门的关系运算
选择运算(单目运算)
从关系R中选取满足给定条件的元组构成一个新的关系。选择运算记作:
σF(R) = { t | tR∧F(t) }
其中σ(西格马)是选择运算符,F是限定条件的布尔表达式。由逻辑运算符∨、∧和┐等连接各个算术表达式组成。
算术表达式的基本形式为X Y,其中X,Y可以是属性名,常量或简单函数,算术比较运算符{, , , , , } 。投影运算(单目运算)
从一个关系R中选取所需要的列组成一个新关系。投影运算记为:
∏A(R) = ∏i1,i2,…,ik(R)= {t[A] | tR}
其中∏是投影运算符,A为关系R属性的子集,t[A]为R中元组相应于属性集A的分量,i1,i2,…,ik表示A中属性在关系R中的顺序号。投影运算(单目运算)
注意:投影操作不仅要去掉原关系中的某些列,还要去掉某些重复的元组,因为减少了某些列之后,原关系中就可能出现重复的元组,应当消去相同的行。 从一个关系R中选取所需要的列组成一个新关系。投影运算记为:
∏A(R) = ∏i1,i2,…,ik(R)= {t[A] | tR}
其中∏是投影运算符,A为关系R属性的子集,t[A]为R中元组相应于属性集A的分量,i1,i2,…,ik表示A中属性在关系R中的顺序号。注意:投影操作不仅要去掉原关系中的某些列,还要去掉某些重复的元组,因为减少了某些列之后,原关系中就可能出现重复的元组,应当消去相同的行。
连接运算(二目运算)
从二个关系的广义笛卡尔积中选取满足一定连接条件的元组,记为:
其中▷◁是连接运算符,A、B分别为R、S上度数相等且可比较的属性集,是算术比较符,R.A S.B是连接条件(等值和非等值)。
R ▷◁ S=R.A S.B(R×S)
R.AS.B两类常用的连接运算
等值连接: 为“=”的连接运算。
R▷◁
A=B
S={trts|tr R∧ts S∧tr [A]=ts [B]}
例… 两类常用的连接运算
自然连接:一种特殊的等值连接,它要求两个关系中进行比较的属性列必须是相同的属性组,并且在结果关系中把重复的属性列去掉。
若R和S的属性集合分别为AR和AS,它们具有相同的属性组A。令
B=AR∪AS,则自然连接可记作
R▷◁S=∏B(σR.A=S.A (R×S))
其中,是▷◁自然连接运算符。两类常用的连接运算 自然连接做了3件事:
(1)计算广义笛卡尔积R×S
(2)选择满足条件R.A=S.A的所有元组
(3)去掉重复的属性
例…除法运算(二目运算)
设关系R和S的度数分别为n和m(nm0),那么R÷S表示什么意思?
可以看作广义笛卡尔积R×S的逆运算,找到一个关系,能和关系S一起组成关系R的部分或全部。设关系R和S的度数分别为n和m(nm0),那么R÷S是一个度数为(nm)的关系,它满足下列条件:
R÷S中的每个元组t与S中每个元组u所组成的元组(t,u)必在关系R中, 即(t,u)R。
为方便,假设关系S的属性为关系R中的后m个属性象集
给定一个关系R(X,Z),X和Z为属性组,当t[X]=x时,x在R中的象集(Images Set)为:
Zx={ t[Z] | t ∈ R,t[X]=x }
它表示R中属性组X上值为x的元组在Z上分量的集合。
即从R中选出在X上取值为x的元组,去掉X上的分量,只留Z上的分量。
∏Z(σR.X=x (R))除法运算(二目运算)
给定关系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)
特殊情况:S(Y)
R÷S=∏X(R) - ∏X((∏X(R)×S)-R)
7.4 查询优化
为什么需要查询优化?
SQL语言是高度非过程化的语言,具体的实现过程由RDBMS自动完成。
同一个查询需求,可以选择不同的查询策略,其实现的效率一般也是不同的。
关系查询优化是影响RDBMS性能的关键因素。
例:查询选修了112p0054号课程的学生姓名
SELECT S.Sname FROM Students S, Reports R WHERE
S.Sno=R.Sno AND R.Cno=‘112p0054’
关系代数表达式
Q1=∏Sname(σStudents.Sno=Reports.Sno∧Reports.Cno=‘112p0054’(Students×Reports))
Q2=∏Sname(σReports.Cno=‘112p0054’(Students▷◁Reports))
Q3=∏Sname(Students ▷◁σReports.Cno=‘112p0054’(Reports))
7.4 查询优化
定义
设E1和E2是两个关系代数表达式,若将相同的关系代替E1和E2中的相应的关系,所得到的结果关系完全一样,则称关系代数表达式E1和E2是等价的,或称E1和E2互为等价公式,记作E1≡E2 。
7.4 查询优化
关系代数的等价公式 笛卡尔积的等价公式
E1×E2≡E2×E1
交换律
(E1×E2)×E3≡E1×(E2×E3) 结合律
连接运算的等价公式
E1 ▷◁ E2≡E2 ▷◁ E1
交换律
E1 ▷◁F E2≡E2 ▷◁F E1
交换律
(E1 ▷◁ E2) ▷◁ E3≡E1 ▷◁(E2 ▷◁ E3) 结合律 (E1 ▷◁F E2) ▷◁F E3≡E1 ▷◁F (E2 ▷◁F E3) 结合律
7.4 查询优化
关系代数的等价公式
投影运算串接的等价公式
设E是一个关系代数表达式,B1, B2, …, Bm是E中的某些属性名,Ai∈{B1,
B2, …, Bm} (i=1, 2, …, n≤m),则
7.4 查询优化
关系代数的等价公式
选择运算串接的等价公式
设E是一个关系代数表达式,F1和F2 是选择运算的条件,则
选择运算与投影运算交换的等价公式
设F只涉及A1, A2, …, An属性,则
7.4 查询优化
关系代数的等价公式
选择运算与笛卡尔积交换的串接等价公式
设F中涉及的属性都是E1的属性,则
如果F=F1∧F2,且F1只涉及E1的属性,F2只涉及E2的属性,则
如果F=F1∧F2,且F1只涉及E1的属性,F2涉及E1和E2的属性,则
7.4 查询优化
关系代数的等价公式
投影运算与笛卡尔积交换的等价公式
设E1、E2是两个关系代数表达式, A1, A2, …, An是E1的属性,B1, B2, …,
B
m
是E2的属性,则
7.4 查询优化
查询优化的一般策略
选择运算应尽早执行(优化策略中最基本的一条) 把对同一关系的投影运算和选择运算同时进行
把投影操作与它前面或后面的一个双目运算结合起来,不必为投影而专门扫描一遍关系。
在执行连接运算之前,可对需要连接的关系进行适当地预处理
把笛卡尔积和其后的选择运算合并成为连接运算
存储公用子表达式
7.4 查询优化
查询优化的一般步骤
把查询要求转换成某种内部表示(语法树)
把语法树转换为某种优化形式
选择低层的存取路径
生成多个查询计划,选择代价最小的去完成查询任务
7.4 查询优化
语法树具有如下特征 树中的叶结点表示关系 树中的非叶结点表示操作
例题…