目录
2.1 关系数据结构及形式化定义
关系数据库系统是支持关系模型的数据库系统。
关系模型由关系数据结构、关系操作集合和关系完整性约束三部分组成。
2.1.1 关系
关系模型的数据结构非常简单,只包含单一的数据结构——关系。在关系模型中,现实世界的实体以及实体间的各种联系均用单一的结构类型,即关系来表示。
1、域
定义:域是一组具有相同数据类型的值的集合
2、笛卡儿积
笛卡儿积是域上的一种集合运算。
定义2.2 :给定一组域D1,D,……,Dn,允许其中某些域是相同的,D1,D2,……,Dn的笛卡儿积为
D1xD2x……xDn={(d1,d2,……,dn)|di∈Di,i=1,2,……,n}
其中,每一个元素(d1,d2,……,dn)叫作一个n元组,或简称元组。元素中的每一个值di叫做一个分量。
一个域允许的不同取值个数称为这个域的基数。
若Di(i=1,2,……,n)为有限集,其基数为mi(i=1,2,……,n),则D1xD2x……xDn的基数M为
例如:
笛卡儿积可表示为如下形式
D1=导师集合 SUPERVISION={张清玫,刘逸}
D2=专业集合SPECIALITY={计算机专业,信息专业}
D3=研究生集合POSTGRADUATE={李勇,刘晨,王敏}
则D1、D2、D3的笛卡儿积为
D1xD2xD3={
(张清玫,计算机专业,李勇),(张清玫,计算机专业,刘晨),(张清玫,计算机专业,王敏),(张清玫,信息专业,李勇),(张清玫,信息专业,刘晨),(张清玫,信息专业,王敏),(刘逸,计算机专业,李勇),(刘逸,计算机专业,刘晨),(刘逸,计算机专业,王敏),(刘逸,信息专业,李勇),(刘逸,信息专业,刘晨),(刘逸,信息专业,王敏)}
其中,(刘逸,计算机专业,李勇)、(张清玫,计算机专业,李勇)等都是元组。张清玫、计算机专业、李勇、刘晨等都是分量。
该笛卡儿积的基数为2x2x3=12,也就是说,D1xD2xD3一共有2x2x3=12个元组。
3、关系
定义2.3 D1xD2x……xDn的子集叫做在域D1,D2,……,Dn上的关系,表示为
R(D1,D2,……,Dn)
这里R表示关系的名字,n是关系的目或度。
关系中的每个元素是关系中的元组,通常用t表示。
当n=1时,称该关系为单元关系,或一元关系。
当n=2时,称该关系为二元关系。
由于域可以相同,为了加以区分,必须对每列起一个名字,称为属性。
关系是笛卡儿积的有限子集。n目关系必有n个属性。
若关系中的某一属性组的值能唯一地标识一个元组,而其子集不能,则称该属性组为候选码。
若一个关系有多个候选码,则选定其中一个为主码。
候选码的诸属性称为主属性。不包含在任何候选码中的属性称为非主属性或非码属性,
在最简单的情况下,候选码只包含一个属性。在最极端的情况下,关系模式的所有属性是这个关系模式的候选码,称为全码。
关系可以有三种类型:基本关系(通常又称为基本表或基表)、查询表和视图表。其中,基本表是实际存在的表,它是实际存储数据的逻辑表示;查询表是查询结果对应的表;视图表是由基本表或其他视图表导出的表,是虚表,不对应实际存储的数据。
关系可以是一个无限集合。但是关系模型需要有实际意义,所以当关系作为关系数据模型的数据结构时,需要给予如下的限定和扩充。
(1)无限关系在数据库系统中是无意义的。因此,限定关系数据模型中的关系必须是有限集合。
(2)通过为关系的每个列附加一个属性名的方法取消关系属性的有序性,即(d1,d2,……,di,dj,……,dn)=(d1,d2,……,dj,di,……,dn)(i,j=1,2,……,n)。
因此,基本关系具有以下6条性质。
(1)列是同质的,即每一列中的分量是同一类型的数据,来自同一个域。
(2)不同的列可出自同一个域,称其中的每一列为一个属性,不同的属性要给予不同的属性名。
(3)列的顺序无所谓,即列的次序可以任意交换。由于列的顺序是无关紧要的,因此在许多实际关系数据库产品中增加心属性时,永远是插至最后一列。
(4)任意两个元组的候选码不能去相同的值。
(5)行的顺序无所谓,即行的次序可以任意交换。
(6)分量必须取原子值,即每一个分量都必须是不可分的数据项。
关系模型要求关系必须是规范化的,即要求关系必须满足一定的规范条件。这些规范条件中最基本的一条就是,关系的每一个分量必须是一个不可分的数据项。
2.1.2 关系模式
定义2.4 关系的描述称为关系模式。它可以形式化地表示为
R(U,D,DOM,F)
其中R为关系名,U为组成该关系的属性名集合,D为U中属性所来自的域,DOM为属性向域的映像集合,F为属性间数据的依赖关系集合。
关系模式通常可以简记为R(U)或R(A1,A2,……,An),其中R为关系名,A1,A2,……,An为属性名。
关系是关系模式在某一时刻的状态或内容。关系模式是静态的、稳定的,而关系是动态的、随时间不断变化的,因为关系操作在不断地更新着数据库中的数据。
2.1.3 关系数据库
在一个给定的应用领域中,所有关系的集合构成一个关系数据库。
关系数据库的型也称为关系数据库模式,是对关系数据库的描述,关系数据库的值是这些关系模式在某一时刻对应的关系的集合,通常就称为关系数据库。
2.1.4 关系模型的存储结构
在关系数据库的物理组织中,有的关系数据库管理系统中一个表对应一个操作系统文件,将物理数据组织交给操作系统完成;有的关系数据库管理系统从操作系统那里申请若干个大的文件,自己划分文件空间,组织表、索引等存储结构,并进行存储管理。
2.2 关系操作
2.2.1 基本的关系操作
关系模型中常用的关系操作包括查询操作和插入、删除、修改操作操作两大部分。
关系操作的特点是集合操作方式,即操作的对象和结果都是集合。这种操作方式也称为一次一集合的方式。相应地,非关系数据模型的数据操作方式则为一次一记录的方式。
2.2.2 关系数据语言的分类
早期的关系操作能力通常用代数方式或逻辑方式来表示,分别称为关系代数和关系演算。关系代数用对关系的运算来表达查询要求,关系演算则用谓词来来表达查询要求。关系演算又可按谓词变元的基本对象是元组变量还是域变量分为元组关系演算和域关系演算。
另外,还有一种介于关系代数和关系演算之间的结构化查询语言SQL。
SQL不仅具有丰富的查询功能,而且具有数据定义和数据控制功能,是集查询、数据定义语言、数据操作语言和数据控制语言于一体的关系数据语言,是关系数据库的标准语言。
关系数据语言可以分为三类:
2.3 关系的完整性
关系模型的完整性规则是对关系的某种约束条件。这些约束条件实际上是现实世界的要求。任何关系在任何时刻都要满足这些语义约束。
关系模型中有三类完整性约束:实体完整性、参照完整性和用户定义的完整性。其中实体完整性和参照完整性是关系模型必须满足的完整性约束条件,被称作是关系的两个不变性,应该由关系自动支持。
2.3.1 实体完整性
规则2.1 实体完整性规则 若属性(指一个或一组属性)A是基本关系R的主属性,则A不能取空值。所谓空值就是“不知道”或“不存在”或“无意义”的值。
对于实体完整性规则说明如下:
(1)实体完整性规则是针对基本关系而言的。一个基本表通常对应现实世界的一个实体集。
(2)现实世界中的实体是可区分的,即它们具有某种唯一性标识。
(3)相应地,关系模型中以主码作为唯一标识。
(4)主码中的属性即主属性不能取空值。
2.3.2 参照完整性
定义2.5:设F是基本关系R的一个或一组属性,但不是关系R的码,Ks是基本关系S的主码。如果F与Ks相对应,则称F是R的外码,并称基本关系R为参照关系,基本关系S为被参照关系或目标关系。
关系R和S不一定是不同的关系。
R(Kr,F,……) S(Ks,……)
参照关系 ——→ 被参照关系(目标关系)
显然,目标关系S的主码Ks和参照关系R的外码F必须定义在同一个(或同一组)域上。
规则2.2 参照完整性规则 若属性(或属性组)F是基本关系R的外码,它与基本关系S的主码Ks相对应(基本关系R和S不一定是不同的关系),则对于R中每个元组在F上的值必须:
· 或者取空值(F的每个属性值均为空值);
· 或者等于S中某个元组的主码值。
· 空值,表示尚未给该学生分配专业;
· 非空值。
2.3.3 用户定义的完整性
用户定义的完整性就是针对某一具体关系数据库的约束条件,它反映某一具体应用所涉及的数据必须满足的语义要求。
关系模型应提供定义和检验这类完整性的机制,以便用统一的系统的方法处理它们,而不需由应用程序承担这一功能。
2.4 关系代数
关系代数是一种抽象的查询语言,它用对关系的运算来表达查询。
任何一种运算都是将一定的运算符作用于一定的运算对象上,得到预期的运算结果。所以运算对象、运算符、运算结果是运算的三大要素。
关系代数的运算对象是关系,运算结果亦为关系。
关系代数的运算按运算符的不同可分为传统的集合运算和专门的关系运算两类。
2.4.1 传统的集合运算
传统的集合运算是二目运算,包括并、差、交、笛卡儿积4种运算。
设关系R和关系S具有相同的目n(即两个关系都有n个属性),且相应的属性取自同一个域,t是元组变量,t∈R表示t是R的一个元组。
可以定义并、差、交、笛卡儿积运算如下。
(1)并
关系R与关系S的并记作
R∪S={t|t∈R∨t∈S}
其结果仍为n目关系,由属于R或属于s的元组组成,
(2)差
关系R与关系S的差记作
R-S={t|t∈R∧t∉S}
(3)交
关系R与关系S的交记作
R∩S={t|t∈R∧t∈S}
其结果关系仍为n目关系,由既属于R又属于S的元组组成。关系的交可以用差来表示,即
R∩S=R-(R-S)
(4)笛卡儿积
这里的笛卡儿积严格地讲应该是广义的笛卡儿积,因为这里的笛卡儿积的元素是元组。
两个分别为n目和m目的关系R和S的笛卡儿积是一个(m+n)列的元组的集合。元组的前n列是关系R的一个元组,后m列是关系S的一个元组。若R有k1个元组,S有k2个元组,则关系R和G关系S的笛卡儿积有k1xk2个元组,记作
关系运算例子如下所示:
2.4.2 专门的关系运算
专门的关系运算包括选择、投影、连接、除运算等。
引入几个记号:
(1)设关系模式为R(A1,A2,……,An),它的一个关系设为R。t∈R表示t是R的一个元组。
t[Ai]则表示元组t中相应于属性Ai的一个分量。
(2)若A={Ai1,Ai2,……,Aik},其中Ai1,Ai2,……,Aik是A1,A2,……,An中的一部分,则A称为属性列或属性组。t[A]=(t[Ai1],t[Ai2],……,t[Aik])表示元组t在属性列A上诸分量集合,A的反则表示{A1,A2,……,An}中去掉{Ai1,Ai2,……,Aik}后剩余的属性组。
(3)R为n目关系,S为m目关系。tr∈,ts∈S,
或元组的串接。它是n+m列的元组,前n个分量为R中的一个n元组,后m个分量为S中的一个m元组。
(4)给定一个关系R(X,Z),X和Z为属性组。当t[X]=x时,x在R中的象集定义为
Zx={t[Z]|t∈R,t[X]=x}
它表示R中属性组X上值为x的诸元组在Z上分量的集合。
例如:下图中,x1在R中的象集Zx1={Z1,Z2,Z3}
x2在R中的象集Zx2={Z2,Z3}
x3在R中的象集Zx3={Z1,Z3}
下面是这些专门关系运算的定义
1、选择
选择又称为限制。它是在关系R中选择满足给定条件的诸元组,记作:
其中F表示选择条件,它是一个逻辑表达式,取逻辑值“真”或“假”。
逻辑表达式F的基本形式为
X1θY1
其中θ表示比较运算符,它可以数>,≥,<,≤,=或<>。X1,Y1等是属性名,或为常量,或为简单函数;属性名也可以用它的序号来代替。选择运算实际上是从关系R中选取使逻辑表达式F为真的元组。这是从行的角度进行的运算。
2、投影
关系R上的投影是从R中选择出若干属性列组成新的关系。记作
A(R)={t[A]|t∈R}
其中A为R中的属性列。投影操作是从列的角度进行的运算。
3、连接
连接也称为θ连接。它是从两个关系的笛卡儿积中选取属性间满足一定条件的元组。记作:
其中,A和B分别为R和S上列数相等且可比的属性组,θ是比较运算符。连接运算从R和S的笛卡儿积RxS中选取R关系在A属性组上的值与S关系在B属性组上的值满足比较关系θ的元组。
连接运算中有两种最为重要也最为常用的连接,一种是等值连接,另一种是自然连接。
θ为“=”的连接运算称为等值连接。它是关系R和S的广义笛卡儿积中选取A、B属性值相等的那些元组,即等值连接为
自然连接是一种特殊的等值连接。它要求两个关系中进行比较的分量必须是同名的属性组,并且在结果中把重复的属性列去掉。即若R和S中具有相同的属性组B,∪为R和S的全体属性集合,则自然连接可记作
一般的连接操作是从行的角度进行运算,但自然连接还需要取消重复列,所以是同时从行和列的角度进行运算。
关系R中某些元组有可能在S中不存在公共属性上值相等的元组,从而造成R中这些元组在操作时被舍弃了,同样,S中某些元祖也可能被舍弃。这些被舍弃的元组称为悬浮元组。
4、除运算
记关系R除以关系S的结果为关系T,则T包含所有在R但不在S中的属性及其值,且T的元组与S的元组的所有组合都在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]|tx∈R∧x∈R∧Y(S)⊆Yx}
其中Yx为x在R中的象集,x=tr[X]。
除操作是同时从行和列角度进行运算。
本文介绍了8种关系代数运算,其中并、差、笛卡儿积、选择和投影这5种运算为基本运算。其他三种运算,即交、连接和除,均可以用这5种基本运算来表达。
关系代数中,这些运算经有限次复合后形成的表达式称为关系代数表达式。