当前位置:文档之家› 关系代数

关系代数

第二章关系代数教学目的:本章实际上研究的是关系的运算。

学习目的:关系运算是设计关系数据库操作语言的基础,因为其中的每一个询问往往表示成一个关系运算表达式,在我们的课程中,数据及联系都是用关系表示的,所以实现数据间的联系也可以用关系运算来完成。

通过本章学习,应重点掌握:(1)关系数据库的基本概念;(2)如何用关系代数表达式来表达实际查询问题;(3)如何用元组演算表达式来表达实际查询问题;(4)如何用域演算表达式来表达实际查询问题;(5)如何将关系代数表达式转换为元组演算表达式或转换为域演算表达式。

了解和掌握关系数据结构中涉及到的域、笛卡儿积、关系模式等有关内容的含义;掌握关系的实体完整性和参照完整性的定义;掌握关系代数中的并、交、差、笛卡儿积运算,以及选择、投影和连接运算。

教学重点:关系的实体完整性和参照完整性的定义;关系代数中的并、交、差、笛卡儿积运算,以及选择、投影和连接运算。

教学难点:关系代数中的并、交、差、笛卡儿积运算,以及选择、投影和连接运算。

教学方法:实例法教学内容:如下:关系模型关系模型是一种简单的二维表格结构,每个二维表称做一个关系,一个二维表的表头,即所有列的标题称为一个元组,每一列数据称为一个属性,列标题称估属性名。

同一个关系中不允许出现重复元组和相同属性名的属性。

1.关系模型组成关系模型由关系数据结构、关系操作集合和关系完整性约束三部分组成。

关系操作分为两大部分如图所示。

2.关系操作的特点关系操作的特点是操作对象和操作结果都是集合。

而非关系数据模型的数据操作方式则为一次一个记录的方式。

关系数据语言分为三类: (1)关系代数语言:如ISBL ;(2)关系演算语言:分为元组关系演算语言(如Alpha ,Quel)、域关系演算语言(如QBE); (3)具有关系代数和关系演算双重特点的语言:如SQL 。

3.关系数据结构及其形式化定义 (1)域定义 域是一组具有相同数据类型的值的集合。

(2)笛卡尔积定义 设D 1,D 2,D 3,…,D n ,为任意集合,定义D l ,D 2,D 3,…,D n 的笛卡尔积为 D 1×D 2×D 3×…×D n ={(d1,d2,d3,…dn)[di ∈Di ,i =1,2,3…,n]其中每一个元素(dl ,d2,d3,…,dn ,)叫做一个n 元组(n 一tuple)或简称为元组(Tuple),每一个值di 叫做一个分量(Component),若Di(i =l ,2,…n)为有限集,其基数(Cardinal number)为mi(i=l ,2,3,…,n), 则D 1×D 2×D 3×…×D n 的基数M 为 M =∏=ni 1mi笛卡尔积可以用二维表来表示。

例 D1={0,1},D2={a,b,c}则:D1×D2={(0,a),(0,b),(0,c),(1,a),(1,b),(1,c)}用二维表来表示,如图2—2所示。

×(3)关系的形式化定义及相关名词定义 D1×D2×D3×…×D n的子集叫做在域D1,D2,D3,…,D n上的关系,用R(D1,D2,D3,…,D n),称关系R为n元关系。

候选码若关系中的某一属性组的值能惟一的标识一个元组,则称该属性组为候选码(Candidate Key)。

主码若一个关系有多个候选码,则选定其中一个为主码(PrimaryKey)。

主码诸属性称为主属性。

不包含在任何候选码中的属性称为非码属性(Non—Keyattribute)。

关系模型的所有属性组是这个关系模式的候选码,称为全码(All—key)(4)关系的三种类型基本关系(通常又称为基本表或基表),是实际存在的表,它是实际存储数据的逻辑表示查询表,查询结果对应的表视图表,是由基本表或其他视图表导出的表,也常称为虚表(5)基本关系有以下五条性质每一列中的分量必须是同一类型的数据,来自同一个域属性不能重名行列的顺序无关任何两个元组不能完全相同每一个分量必须是不可再分的数据项3.关系完整性关系模型的完整性规则是对关系的某种约束条件。

关系的完整性共分为三类:实体完整性、参照完整性、用户定义完整性。

(1)实体的完整性(Entity Integrity)规定:若属性A是基本关系R的主属性,则属性A不能取空值。

即主属性不能为空。

(2)参照的完整性(Referential Integrity)规定:若F是基本关系R的外码,它与基本关系S的主码Ks相对应(基本关系R和S不一定是不同的关系)则对于R中每个元组在F上的值必须为:①或者取空值(F的每个属性值均为空值);即外码可以为空②或者等于S中某个元组的主码值。

(3)用户定义的完整性(User defined Integrity):就是针对某一具体的关系数据库的约束条件,由应用的环境决定。

4.关系模式在数据库中要区分型和值。

关系数据库中的型也称为关系数据库模式,是关系数据库的描述。

它包括若干域的定义以及在这些域上定义的若干关系模式。

关系数据库的值是这些关系模式在某一时刻对应的关系的集合,通常称之为关系数据库。

定义关系的描述称为关系模式(Relation Schema)。

可以形式化的表示为R(U,D,dom,F)其中,R表示关系名;U是组成该关系的属性名集合;D是属性的域;dom是属性向域的映像集合;F为属性间数据的依赖关系集合。

通常将关系模式简记为:R(U)或R(Al,A2,A3,…,An。

)其中R为关系名,A1,A2,A3,…,An。

为属性名,域名、属性向域的映像常常直接说明属性的类型、长度。

例定义学生与课程关系模式及主码如下:(1)S(Sno,Sname,SD,SA)Key(Sno)(2)C(Cno,Cname,PCno)Key(Cno) Dom(PCno)=Cno这里,Pcno是先行课程号,来自Cno域,但由于Pcno属性名不等于Cno值域名,所以要用Dom来定义。

能否将Pcno直接改为Cno呢不能,因为在关系模型中,各列属性必须取相异的名字。

(3)SC(Sno,Cno,Grade)Key(Sno,Cno)其中,SC关系中的Sno、Cno又分别为外码。

因为它们分别是S、C关系中的主码。

2.2关系代数关系代数是一种抽象的查询语言,是关系数据操纵语言的一种传统表达方式。

它是用对关系的运算来表达查询的。

关系运算符有四类:集合运算符,专门的关系运算符,算术比较符和逻辑运算符,如图2—3所示。

根据运算符的不同,关系代数运算可分为传统的集合运算和专门的关系运算。

1.传统的集合运算传统的集合运算是从关系的水平方向进行的,主要包括:并、交、差及广义笛卡尔积。

(1)并(Union);关系R与S的并记作:RUS={t∈R V t∈S}(2)差(Difference);关系R与S的差记作:R—S={t∈R ∧ t∉S}(3)交(Intersection);关系R与S的交记作:R⋂S={t∈R ∧ t∈S}(4)广义笛卡尔积(Extended Cartesian Product);两个分别为n目和m目的关系R和S的广义笛卡儿积是一个(n+m)列的元组的集合。

元组的前n列是关系R的一个元组,后m列是关系S的一个元组。

若R有K1个元组,S有K2个元组。

则R和S的广义笛卡儿积有 K1×K2 个元组。

记作:R×S={ t r t s | t r∈R ∧ t s∈S}2.专门的关系运算专门的关系运算既可以从关系的水平方向进行运算,又可以向关系的垂直方向运算。

1)选择(Selection);选择运算是从关系的水平方向进行运算,是从关系R 中选择满足给定条件的诸元组,记作:σF (R )={t[A]|t ∈R ∧F(t)=’真’ }(2)投影(Projection);投影运算是从关系的垂直方向进行运算,在关系R 中选择出若干属性列组成新的关系,记作:πA (R )={t[A]|t ∈R }(3) 连接(Join);连接分为:θ连接、等值连接及自然连接三种,分述如下:①θ连接:它是从两个关系的笛卡尔积中选取属性间满足一定条件的元组。

记作:{ t r t s| t r∈R ∧ t s∈S ∧ t r[A] θ t s[B] }其中:θ是比较运算符,A 和B 分别为R 和S 上度数相等,且可比的属性组。

②等值连接:当θ为“=”时,称之为等值连接,记为: { t r t s| t r∈R ∧ t s∈S ∧ t r[A] = t s[B] }③自然连接:是一种特殊的等值连接,它要求两个关系中进行比较的分量必须是相同的属性组,并且在结果中将重复属性列去掉。

若R 和S 具有相同的属性组B ,则自然连接可以记为:r t s | t r ∈R ∧ t s ∈S ∧ t r [B] = t s [B] }④特别需要说明的是:一般连接是从关系的水平方向运算,而自然连接不仅要从关系的水平方向,而且要从关系的垂直方向运算。

因为自然连接要去掉重复属性,如果没有重复属性,那么自然连接就转化为笛卡尔积。

(4)除(Division);除运算是同时从关系的水平方向和垂直方向进行运算。

给定关系R(X ,Y)和S(Y ,Z),X ,Y ,Z 为属性组。

R ÷S 应当满足元组在X 上的分量值= A θBA=B=x的像集Yx包含S在Y上投影的集合。

记作:R÷S = { t r [X] | t r∈R ∧πy[S]⊆ Y x}其中:Yx为x在R中的像集,x=t r [X]。

且R÷S的结果集的属性组为X。

(5)需要注意的四个问题:①关系代数的五个基本操作为:并、差、笛卡尔积、投影和选择。

其它的操作都可以由5个基本的操作导出,因此它们构成了关系代数完备的操作集。

例如两个关系R与S的交运算等价于:R⋂S=R一(R—S)或R⋂S=S一(S—R)所以交运算不是一个独立的运算。

②关系代数在使用的过程中对于只涉及选择、投影、连接的查询可用表达式:πA1,…AK(σF或πA1,…AK(σF(S×R))③对于否定操作,一般要用差操作表示,例如不学“操作系统”课的学生姓名,通常不要用如下的形式表示:πSname( σCname≠’操作系统’))而采用如下形式:πSname - πSname (σCname =’操作系统’))④对于检索具有全部特征的操作,一般要用除法操作表示,例如查询选修全部课程的学生学号。

通常不要用如下的形式表示;πSno,Cno(SC÷πCno(C))而采用如下形式:πSno,Cno(SC)÷πCno(C)2.3关系演算关系演算分为元组演算和域演算,下面分别介绍。

相关主题