关系模型和关系代数.ppt
目录*,2.1 关系数据模型 2.1.1 关系基本概念 2.1.2 关系数据结构 2.1.3 关系数据操作 2.1.4 关系数据完整性约束2.2 关系代数2.3 关系演算2.4 查询优化,关系数据操作及类型,关系操作在关系结构框架下,对数据结构关系进行操作关系操作类型查询操作:在一个关系内或多个关系间检索或定位数据,这一过程又可以分解为 单个关系内:属性指定 单个关系内:元组选择 多个关系间:合并,关系数据操作及类型(续),修改操作:又包括 删除操作:在某个关系内定位元组,然后删除 插入操作:在某个关系内增加元组,不需要定位 更新操作:在某个关系内定位元组,然后改变属性值两类操作的联系查询操作是修改操作的基础,修改操作实际是对查询(定位)后的结果进行修改,关系数据操作的表达,关系操作的表示:查询语言关系模型中使用“纯”查询语言,如关系代数、关系演算关系代数(2章重点):用一组对关系的运算来表示 查询和修改。关系演算:用谓词演算来表示查询和修改。根据谓词的不同,又分为元组关系演算和域关系演算。关系数据库中使用实际的查询语言,如SQL(3章重点)思考为什么叫“查询”语言?“查询”语言只能做查询么?,关系数据操作的表达(续),关系运算分类,关系数据操作的表达(续),查询语言的分类过程化:用户要指定 what:查询什么 how:怎么查询,要用什么样的方法、过程?非过程化:用户只要指定查询什么,而“怎么查询”的问题留给系统处理系统会自动寻找(近似)最优的查询方法(查询执行计划),即查询优化。关系代数是过程化的,SQL和关系演算是非过程化的,目录*,2.1 关系数据模型 2.1.1 关系基本概念 2.1.2 关系数据结构 2.1.3 关系数据操作 2.1.4 关系数据完整性约束2.2 关系代数2.3 关系演算2.4 查询优化,关系完整性,三类关系完整性规则 实体完整性 参照完整性 用户定义完整性,目录*,2.1 关系数据模型 2.1.1 关系基本概念 2.1.2 关系数据结构 2.1.3 关系数据操作 2.1.4 关系数据完整性约束2.2 关系代数2.3 关系演算2.4 查询优化,什么是关系代数,什么是代数(系统)?代数系统包括运算对象基于运算对象的一组运算。例如,实数代数包括运算对象 实数基于实数的运算 加、减、乘、除,什么是关系代数(续),封闭的代数系统运算的结果,仍不超出运算对象的范围。思考整数和加、减、乘、除运算,是否构成封闭的代数系统?整数和加、减、乘、商、余运算呢?,什么是关系代数(续),关系代数关系 运算对象选择,投影,基于关系的一组运算。历史:关系模型创始人在集合代数基础上发展而来关系代数是封闭的,任何关系运算的结果还是一个关系,什么是关系代数(续),关系运算的分类基本运算选择;投影;笛卡儿积;集合并;集合差;更名附加运算(非基本的,可以用基本运算的组合来替换)集合交;自然连接;除;赋值扩展运算(前两种基础上对运算能力进行扩展和增强)广义投影;外连接;聚集运算一元运算输入为一个关系二元运算输入为两个关系,选择运算()例子,关系 r,A,B,C,D,151223,77310,A=B D 5(r),A,B,C,D,123,710,选择运算(),选择运算(一元)选择满足下标谓词(条件)的元组 p(r)=t|t r and p(t)t是元组,t|表示满足该条件的元组集合,即一个 关系(可能未命名)输入关系r用圆括号括起来下标p 称为选择谓词。它是一个布尔表达式,由以下组成:(r的)属性常量运算符:(与),(或),(非),=,=,*,/,+,-,选择运算()(续),选择运算的结果一个(无名字的)关系,保留输入关系的全部属性,但只包含那些满足条件的元组选择运算的例子:sex=Male(student),student,?,思考,下列选择运算的结果是什么?1=1(student),?,student,思考,下列选择运算的结果是什么?1=2(student),student,思考,下列选择运算的结果是什么?1=2(student),?,student,投影运算()例子,关系 r,A,B,C,10203040,1112,A,C,1112,A,C,112,A,C(r),投影运算(),投影运算(一元)从输入关系r,产生一个仅包含r中某些属性的新关系。并消去重复元组 A1,A2,Ak(r)=t A1,A2,Ak|t r t A1,A2,Ak 是一个新元组,仅包含原来t的A1,A2,Ak属性值下标A1,A2,Ak是那些我们希望在结果中出现的属性,投影运算()(续),投影运算的输出一个(无名字)的关系,包含指定的那些属性,而元组数量与输入关系相比可能相同,也可能要少(消除重复元组时)投影运算的例1 name,class(student),student,?,投影运算()(续),投影运算的例2 class(student),student,?,并,交,差运算 例子,关系 r,s:,r s:,A,B,121,A,B,23,r,s,A,B,1213,A,B,12213,r s:,A,B,11,A B,2,r s:,并,交,差运算,并,交,差运算(二元)r s 的结果是出现在r或者s或者两者中的元组集合 r s=t|t r or t s同时出现在r和s的元组,在结果中只出现一次r s的结果是在r中出现,但是不在s中出现的元组集合 r s=t|t r and t s r s的结果是在r中以及在s中同时出现的元组集合 r s=t|t r and t s,并,交,差运算(续),并非任意两个关系都可以进行交/并/差运算!为使r s/r s/r s 有效,必须满足以下条件1、r和s的属性数目相等2、r和s的对应属性相容(名字可不同,但类型相同或相近)r的第1个属性和s的第1个属性相容,r的第2个属性和s的第2个属性相容并,交,差运算的输出一个(无名字的)新关系,属性名以第一个输入关系r为准,并,交,差运算(续),并运算的例1 r s,r,s,?,并,交,差运算(续),并运算的例2 r s,r,s,?,思考,r s=s r,对么?,并,交,差运算(续),差运算的例子 r s,r,s,?,并,交,差运算(续),交运算的例子 r s,r,s,?,思考,关系代数/集合代数中,并和差是基本运算,但是交却是附加运算。为什么?,R,S,RS,R(RS),R S,思考,我们可以用表达式R(R S)来重写R S,即用差运算来代替交运算。交运算是可替代的,所以它是非基本(附加)的,而并、差运算不可替代,所以是基本的。,R,S,RS,R(RS),R S,笛卡儿积运算(x)例子,关系 r,s:,r x s:,A,B,12,A,B,11112222,C,D,1010201010102010,E,aabbaabb,C,D,10102010,E,aabb,r,s,笛卡儿积运算(x),笛卡尔积运算(二元)r s 的结果是所有这样的元组对集合:一个元组来自r,另一个来自s r s=t q|t r and q s 元组对tq 表示将两个元组t和q连接起来得到的一个新元组,笛卡儿积运算(x)(续),笛卡儿积运算的输出设若r有A个属性,s有B个属性,那么r s:有A+B个属性,前A个来自r,后B个来自s设若r有X个元组,s有Y个元组,那么r s:有X Y 个元组(X个元组和Y个元组共有X Y种可能组合),笛卡儿积运算(x)(续),笛卡儿积运算的例1 r x s,A,B,12,11112222,1010201010102010,aabbaabb,C,D,10102010,E,aabb,r,s,笛卡儿积运算(x)(续),要点:属性重名时,加上关系名前缀如果r和s有属性同名,那么r s中势将包含两个重名的属性。为了区别这些属性,需要在它们前面加上原来的关系名作为前缀(r.或s.)对于只出现在r中的属性名,或者只出现在s中的属性名,在r s的结果关系中不加上关系名前缀,笛卡儿积运算(x)(续),RS,R,S,笛卡儿积运算的例2,运算的复合:关系代数表达式,一个关系运算+输入关系,本身就是一个简单的关系代数表达式例如,r x s,1=1(r)可以用多个运算的复合来构建复杂的关系代数表达式例如,A=C(r x s),A,B,12,C,D,10102010,E,aabb,r,s,A,B,11112222,C,D,1010201010102010,E,aabbaabb,r x s,运算的复合:关系代数表达式(续),A,B,C,D,E,122,102020,aab,A,B,11112222,C,D,1010201010102010,E,aabbaabb,A=C(r x s),笛卡尔积是连接两个关系的元组生成结果,这种连接是无条件(任意)的如果希望两个关系的元组相连接时遵循一定的条件,则可以使用()连接运算,连接运算,连接运算(又称连接,二元)从两个关系的笛卡尔积中选取属性间满足一定条件的元组 r s=t q|t r and q s and trAtsB A和B:分别为R和S上度数相等且可比的属性组:比较运算符,连接运算(续),连接运算的例子,RS,连接运算(续),应用举例:S:学生表;C:班级表;问:所有学生的姓名和班主任?,S,C,姓名,班主任(S C),连接运算等值连接,两类特殊连接运算等值连接:为“”的连接运算,即从输入关系R与S的广义笛卡尔积中选取A、B属性值相等的那些元组 r s=t q|t r and q s and trA=tsB,连接运算等值连接(续),等值连接的例子,RS,连接运算自然连接,自然连接():一种特殊的连接运算,要求两个关系连接的元组在同名属性上相等,并且在连接后的结果中去掉重复的同名属性。自然连接运算的输出一个(无名字的)新关系,包含r和s的所有属性,但要去除多余的同名属性。新关系的元组,由那些匹配的r元组和s元组(在同名属性上取相同值)连接而成,并且要去掉多余的同名属性值,连接运算自然连接(续),自然连接运算的例子,r,r s,s,连接运算自然连接(续),自然连接可等价表示为其它运算组成的式子,例如:r(A,B,C,D),s(B,D,E)r s A,r.B,C,r.D,E(r.B=s.B r.D=s.D(r x s),重命名运算(),大多数关系运算(关系表达式)的结果是一个无名字的关系重命名运算(一元)的作用允许我们对关系运算/关系代数表达式的结果进行命名,以便后面引用给一个已经有名字的关系起另一个新名字,允许我们通过多个名字来引用它格式1:x(E)E是一个关系代数表达式,也可以是单个关系下标x是一个名字,表示将E的结果关系命名为x,重命名运算(续),student,?,sex=“Male”(student),boy,boy(sex=“male”(student),重命名运算(续),格式2:x(A1,A2,An)(E)下标表示将E的结果关系命名为x,同时属性依次命名为A1,A2,An思考:下标中列出的属性个数n可以任意不受限制么?,重命名运算(续),RS,R,S,V(RA,RB,RC,SB,SC,SD)(RS),V,赋值运算(),赋值运算编程语言中的赋值运算:将一个表达式的结果赋给变量关系代数中的赋值运算:将一个关系代数表达式的结果赋给关系(变量)形式var E表示将右边表达式E的结果,赋予左边的关系(变量)var,赋值运算(续),用途对复杂的关系代数表达式,可以用如下方法简化将其中的一些子式分解出来,并赋值给“中间关系”再利用中间关系代替这些子式重写原表达式,赋值运算(续),例:A(A=1(r.A,s.B(r x s)B=2(r.A,s.B(r x s)A(r)可以重写为 temp1 r.A,s.B(r x s)result=A(A=1(temp1)B=2(temp1)A(r)或temp1 r.A,s.B(r x s)temp2 A=1(temp1)B=2(temp1)result=A(temp2)A(r),除运算(),除运算(二元)笛卡尔积的逆运算设有关系R,S,T,满足 T=R x S,则 T R=ST S=RT R有效的充分必要条件:T包含R的全部属性,并额外含有不在R中的属性这些属性将会出现在除的结果中,除运算(续),更一般地,如果R x S T,则 T R=S,S是满足R x S T的最大关系T S=R,R是满足R x S T的最大关系,除运算(续),T,R,=,除运算(续),T,R,=,除运算(续),T,R,=,除运算(续),T,R,=,除运算(续),除运算的输出T R的属性集合:Z=X Y X为T的属性集合,Y为R的属性集合T R的元组集合:满足以下条件的所有元组 出现在T在属性集Z=X Y上的投影中 与R所有元组的连接都出现在关系T中,除运算(续),除运算的例子,T R,除运算(续),设关系R的属性集为X,关系T的属性集为X+Y(Y为不在R中的属性集),则T R 可重写为:T R Y(T)Y(Y(T)R T),除运算(续),应用举例:设有学生表,课程表,以及反映学生,课程间联系的选修表。以下可求得“选修所有课程”的学生(学号):学号,课程号(选修表)课程号(课程)以下可求得“所有学生都选修”的课程(课程号):学号,课程号(选修表)学号(学生)结论:“所有都”的查询,一般可用除运算表示,除运算(续),除运算的例子,T R,