【数据库原理】关系代数

简述.

关系模型中常用的关系操作包括查询操作更新操作(包括插入、删除和修改)两大部分。从计算机语言角度看,后者在前者的基础上工作,前者比后者复杂,但前者有理论基础,所以成为了主要的研究对象,也是关系操作中最主要的部分。
关系操作采用集合操作方式,即操作的对象和结果都是集合,称为Set-at-a-time(一次一集合)的操作方式。
早期的关系操作通常用代数方式或逻辑方式来表示,分别称为关系代数和关系演算。前者用对关系的运算来表达查询要求,后者用谓词来表达查询要求。关系演算又可以根据谓词变元的基本对象是元组变量还是域变量分为元组关系演算和域关系演算。三种运算语言在表达能力上是等价的。

关系代数.

关系代数的运算对象是关系,运算结果也是关系。而我们说过关系是笛卡尔积集合的子集,所以也印证了我们前述Set-at-a-time的操作方式。关系代数中用到的运算符主要有以下的类型:
在这里插入图片描述
其中后面两种类型的运算符,也就是算术比较和逻辑运算符,都是用于辅助专门的关系运算符进行操作的,所以我们可以将关系代数的运算按运算符的不同分为以下两类:

  • 【传统的集合运算】将关系看作元组的集合,以元组作为元素来进行运算,这种运算是从关系的"水平"方向,也就是【行】的角度进行的,当中包括并、交、差以及笛卡尔积运算。
  • 【专门的关系运算】是为数据库的应用而引进的特殊运算,不仅仅涉及行运算,也涉及列运算,当中包括选取、投影、连接以及除法操作。

从关系代数的完备性角度看,可以将操作分为基本操作和非基本操作:

  • 【基本操作】并、差、积、选取和投影,构成了关系代数完备的操作集。
  • 【非基本操作】可以用以上五种基本操作合成的所有其他操作。

传统的集合运算.

两个关系进行传统的集合运算时,对于这两个关系是需要满足一定的条件的,描述如下:
在这里插入图片描述
除了笛卡尔积运算外,其他的集合运算要求参加运算的关系必须满足上述的相容性限制。两个关系的基本运算是并和差,是无法用其它运算表达的运算。

并Union.

R和S的并运算结果是R和S中的所有元组合并,并且那些重复的元组只出现一次,组成一个新的n元关系。对于关系数据库,记录的插入和添加可以通过并运算实现。并运算记作:
在这里插入图片描述

差Difference.

R和S差运算的结果是属于R而不属于S的所有元组组成的集合,即从R中删去S包含的部分,组成一个新的n元关系。对于关系数据库,记录的删除可以通过差运算实现。差运算记作:
在这里插入图片描述

交Intersection.

R和S交运算的结果由既属于R又属于S的元组,也就是R和S中相同的元组组成一个新的n元关系。交运算记作:
在这里插入图片描述

广义笛卡尔积Extended Cartesian Product.

两个分别为n元和m元的关系R和S的广义笛卡尔积是一个(n+m)列的元组的集合,元组的前n列是关系R的一个元组,后m列是关系S的一个元组。若R中有x个元组,S中有y个元组,那么R和S的广义笛卡尔积有xy个元组,可以记作:
在这里插入图片描述
广义的笛卡尔积可以用于两关系的连接操作。
最后我们以实际的例子结束传统的集合运算,下图是两个相容的关系R和S以及两个关系的各种传统集合运算结果:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述在这里插入图片描述
在这里插入图片描述

专门的关系运算.

传统的集合运算,只是从行的角度进行,而要灵活地实现关系数据库多样的查询操作,必须引入专门的关系运算。在介绍专门的关系运算之前,为了叙述上的方便,先引入几个概念:

  • 设关系模式为R(A 1 _1 ,A 2 _2 ,…,A n _n ),它的一个关系为R,t∈R表示t是R的有一个元组,那么t[A i _i ]表示元组t相对于属性A i _i 的一个分量;
  • 给定一个关系R(X,Z),X和Z为属性组,定义当t[X]=x时,x在R中的像集Image Set为Z x _x ={t[Z]|t∈R,t[X]=x},它表示的是R中属性组X上值为x的那些元组在Z分量上的集合。
选取Selection.

选取运算是单目运算,它根据一定的条件从关系R中选择若干个元组,组成一个新的关系。选取操作记作:
在这里插入图片描述
其中σ为选取运算符,F是选取的条件。F是由运算对象(属性名、常数、简单函数)、算术比较运算符(>、≥、<、=、≠)和逻辑运算符(与、或、非)连接起来的逻辑表达式,其结果是逻辑值True或False,所以我们对于选取运算进行总结:它从关系R中选取那些使得逻辑表达式F为真的元组,是从行的角度进行的运算。以下面的关系为例,我们给出实际的选取运算:
在这里插入图片描述
在这里插入图片描述

投影Projection.

投影运算也是单目运算,关系R上的投影式从R中选择出若干属性列,组成新的关系,即对关系R在垂直方向上进行运算,从左到右按照指定的若干属性及顺序(意味着我们可以改变属性列的顺序,实际上关系中的属性列是可以交换位置的)取出相应列,并且要删除重复的元组。投影运算记作:
在这里插入图片描述
从其定义可以看出,投影运算是从列的角度进行的运算,这也是投影运算和选取运算最大的区别所在。以下面的关系为例,我们给出实际的投影运算:
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

θ连接θJoin.

θ连接运算是一个二元运算,其效果是从两个关系R和S的笛卡尔积中选取满足连接条件的元组,而后组成新的关系。设两个关系R和S,它们的属性列数分别为n和m,其中R中的属性可以进一步分解为属性集Z和X,即R=(Z,X),关系S可以进一步分解为属性集W和Y,即S=(W,Y)。如果我们认定X和Y是连接属性(需要X和Y的属性列数相等),那么关系R和S在连接属性X和Y上的θ连接,就是在R和S的笛卡尔积中选择那些X属性集上的分量与Y属性集上的分量满足θ比较条件的那些元组。新关系的列数为(n+m),即两个关系的列数和,记作:
在这里插入图片描述
其中θ代表的是一个算术比较运算符,称为θ连接。XθY是连接条件:

  • θ为"="时,称为等值连接;
  • θ为"<"时,称为小于连接;
  • θ为">"时,称为大于连接

前面我们说过五种基本的操作,包括并、差、积、选取、投影,其中并没有连接运算。从连接运算的定义中,我们也不难发现,可以使用选取操作和广义笛卡尔积运算来表示:
在这里插入图片描述
除此之外,还有一种常用的连接称为自然连接,它是在等值连接的情况下,当连接属性X和Y有着相同的属性列时,去掉连接结果中那些相同的属性列。总结来说,自然连接是在广义笛卡尔积R×S中选出同名属性上符合相等条件的元组,再进行投影,去掉重复的同名属性,组成新的关系。
在这里插入图片描述

以下面的关系为例,我们给出实际的连接运算:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
关于选取、投影、连接运算的复杂操作:
在这里插入图片描述

除法Division.

除法运算是二目运算,设有关系R(X,Y)和关系S(Y,Z),其中X、Y、Z是属性集合,并且R.Y和S.Y可以有不同的属性名,但对应属性必须出自相同的域。关系R除以关系S所得的商是一个新的关系P(X),P是R中满足下列条件的元组在属性集X上的投影:

  • 元组在X上的分量值x的像集Y x _x 包含了S在Y上的投影集合。

形式化的表示如下:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/weixin_44246009/article/details/108014480