数据库系统概论05届课件第3章.ppt
,数据库系统概论An Introduction to Database System,广东科学技术职业学院,2,第三章 关系模型和关系运算,理解:关系模型的基本概念。熟练掌握:ODL设计转换为关系设计。熟练掌握:E/R图设计转换为关系设计。熟练掌握:用关系代数表达式表达查询要求。基本掌握:用关系演算表达式表达查询要求。基本掌握:用关系逻辑表达式(数据逻辑规则)表达查询要求。,3,第三章 关系模型和关系运算,3.1 关系模型的基本概念3.2 从ODL设计到关系设计3.3 从E/R图到关系设计3.4 关系代数3.5 关系演算3.6 关系逻辑,4,3.1 关系模型的基本概念,系统而严格地提出关系模型的是美国IBM公司的E.F.Codd1970年提出关系数据模型E.F.Codd,“A Relational Model of Data for Large Shared Data Banks”,Communication of the ACM,1970之后,提出了关系代数和关系演算的概念1972年提出了关系的第一、第二、第三范式1974年提出了关系的BC范式,5,关系数据库系统是支持关系模型的数据库系统关系模型的组成关系数据结构关系操作集合关系完整性约束,3.1 关系模型的基本概念,6,1.关系数据结构,单一的数据结构-关系现实世界的实体以及实体间的各种联系均用关系来表示数据的逻辑结构-二维表从用户角度,关系模型中数据的逻辑结构是一张二维表。,7,2.关系操作集合,1)常用的关系操作2)关系操作的特点3)关系数据语言的种类4)关系数据语言的特点,8,2.关系操作集合,1)常用的关系操作查询选择、投影、连接、除、并、交、差数据更新插入、删除、修改查询的表达能力是其中最主要的部分2)关系操作的特点集合操作方式,即操作的对象和结果都是集合。,9,2.关系操作集合,3)关系数据语言的种类关系代数语言:用对关系的运算来表达查询要求关系演算语言:用谓词来表达查询要求具有关系代数和关系演算双重特点的语言典型代表:SQL,10,2.关系操作集合,4)关系数据语言的特点关系语言是一种高度非过程化的语言存取路径的选择由DBMS的优化机制来完成用户不必用循环结构就可以完成数据操作能够嵌入高级语言中使用关系代数、元组关系演算和域关系演算三种语言在表达能力上完全等价,11,关系模型中的几个概念,属性:关系的标题栏中各列的名字。属性描述了该列各数据项的含义 模式:关系的名称和关系的属性集称为关系的“模式”,例如 Student(StudentNo,StudentName,Age,Dept)元组:除了关系的标题栏以外,其他各行统称为“元组”。通常一个元组就表示一个对象,而元组所属的关系就表示对象所属的类。例如,(990011,李明,19,计算机系)域:与关系的每个属性相关的特定基本类型,12,域(Domain),域是一组具有相同数据类型的值的集合。例:整数实数介于某个取值范围的整数长度指定长度的字符串集合男,女介于某个取值范围的日期,13,第三章 关系模型和关系运算,3.1 关系模型的基本概念3.2 从ODL设计到关系设计3.3 从E/R图到关系设计3.4 关系代数3.5 关系演算3.6 关系逻辑,14,3.2 从ODL设计到关系设计,将ODL设计转换为关系设计主要要把握三个方面的内容:从ODL属性到关系属性;将ODL中的联系转换为关系;将ODL中的子类结构转换为关系。,15,3.2.1 从ODL属性到关系属性,若类的所有特性都是属性,而不是联系或者方法,并且属性都是原子类型。在这种情况下,对类建立对应的关系,类的每个属性对应于该关系的一个属性。,16,3.2.2 非原子属性的表示,如果ODL中的属性是复杂的数据类型,如结构、集合等,在转化为关系模型时,需要将其转化为原子类型。有几种不同的情况:(1)组成结构的每个域本身都是原子类型的;(2)如果属性是多个值的集合,要针对每个值建立一个元组;(3)如果属性是定长的数组,可以在关系中用带有数组名和下标的属性来表示类中的数组类型的属性。,17,3.2.2 非原子属性的表示,interface Student Attribute integer StudentNo;Attribute struct NameType string First,string Last StudentName;Attribute integer Age;Attribute string Dept;,18,3.2.2 非原子属性的表示,interface Student Attribute integer StudentNo;Attribute String StudentName;Attribute integer Age;Attribute Set Dept;转化为如下关系模型:注意其中定长数组类型属性的转换,19,3.2.3 单值联系的表示,类的特性除了属性,一般还包含与其他ODL的联系,通过建立相关类中构成键码的属性集就可以表示相关类的对象,这个属性集的作用类似于指针。,20,3.2.3 单值联系的表示,例:interface Movie Attribute string Title;Attribute integer Year;Attribute integer Length;Attribute enum color,blackwhite FilmType;Relationship Set actors inverse Actor:movies;Relationship Studio ownedby inverse Studio:owns;interface Studio Attribute string Name;Attribute string Address;Relationship Set owns inverse Movie:ownedby;,21,3.2.3 单值联系的表示,在Movie类与Studio类之间具有单值联系,在Studio类中的键码是Name,可以在关系Movie的模式中增加一个属性StudioName,关系Movie如下:,22,3.2.4 多值联系的表示,对于多值联系(联系是某个类的聚集类型,表现为带有“Set”关键字),首先找出表示每个相关对象的键码,然后和表示集合类型的属性一样,为相关对象集合的每个元素建立一个元组。缺点:数据冗余大,23,3.2.4 多值联系的表示,例:interface Movie Attribute string Title;Attribute integer Year;Attribute integer Length;Attribute enum color,blackwhite FilmType;Relationship Set actors inverse Actor:movies;Relationship Studio ownedby inverse Studio:owns;interface Actor Attribute string Name;Attribute integer Year;Relationship Set movies inverse Movie:actors;,24,3.2.4 多值联系的表示,在Movie类与Actor类之间具有多值联系,在Actor类中的键码是Name,可以在关系Movie的模式中增加一个属性ActorName,关系Movie如下:,25,3.2.5 联系与反向联系的表示,联系与反向联系是从两个不同的角度说明一个事实,因此在转化为关系时,只需要保留一个即可 例如在关系Movie中,用ActorName来表示Movie类到Actor类的联系,那么在关系Actor中,就无需再建立电影名MovieTitle等属性来建立演员和电影类直接的联系了,26,3.2.6 ODL子类的表示,将ODL子类转化为关系模式,需要遵循的原则是:1)每个子类都对应于一个关系;2)这个关系用相应子类的所有特性(包括从超类继承下来的全部特性)来表示。例:Cartoon类是Movie类的子类,它增加了一个与Actor类的联系voice,则Cartoon的关系模式是:,Cartoon(Title,Year,Length,FilmType,StudioName,ActorName,voice),27,第三章 关系模型和关系运算,3.1 关系模型的基本概念3.2 从ODL设计到关系设计3.3 从E/R图到关系设计3.4 关系代数3.5 关系演算3.6 关系逻辑,28,3.3 从E/R图到关系设计,E/R图与ODL的主要区别:1)在E/R图中,联系作为独立的概念存在(框在菱形框中),而不是像ODL那样作为特性嵌套在类的定义中,这有助于避免数据冗余;2)在ODL中,属性可能是任意的聚集类型,比如集合;而在E/R图中,虽然并没有严格规定允许使用的数据类型,但通常都认为允许使用结构化的数据,而不允许使用集合或者其他聚集类型的数据。3)在E/R图中,联系可以具有属性,而ODL中没有相应的概念。,29,3.3.1 实体集到关系的转换,30,3.3.2 E/R联系到关系的转换,对于E/R图中的一个联系R,它所对应的关系具有如下特性:1)是联系R所涉及到的每个实体集的键码属性(集);2)是R本身的属性;3)如果属性之间有重名现象,必须重新命名关系的属性。一个联系R涉及几个实体集,在将R转换为关系的时候,只要让R的属性包括与其相关的所有实体集的键码属性(集)和它本身的属性即可。,31,3.3.2 E/R联系到关系的转换,32,3.3.3“属于”联系到关系的转换,不为“isa”联系建立相应的关系,与“isa”联系有关的实体集都具有相同的键码。新建立的关系的属性包括被属于的实体集的键码及相应实体集的属性,33,Movie(Title,Year,Length,FilmType,StudioName,ActorName)Murder(Title,Year,Weapon)Cartoon(Title,Year)Voice(Title,Year,Name),34,下课了。,休息一会儿吧。,35,第三章 关系模型和关系运算,3.1 关系模型的基本概念3.2 从ODL设计到关系设计3.3 从E/R图到关系设计3.4 关系代数3.5 关系演算3.6 关系逻辑,36,3.4 关系代数,一种抽象的查询语言,用对关系的运算来表达查询传统的集合运算 并、差、交、广义笛卡尔积专门的关系运算 选择、投影、连接、除,37,3.4 关系代数,集合运算符将关系看成元组的集合运算是从关系的“水平”方向即行的角度来进行专门的关系运算符不仅涉及行而且涉及列算术比较符辅助专门的关系运算符进行操作逻辑运算符辅助专门的关系运算符进行操作,38,关系代数运算符,3.4 关系代数,39,3.4 关系代数,关系代数运算符(续),40,3.4.1 关系的集合运算,并差交,41,1.并(Union),R和S具有相同的目n(即两个关系都有n个属性)相应的属性取自同一个域RS 是R中的元素和S中的元素共同组成的集合 RS=t|t Rt S,42,R,S,RS,1.并(Union),43,1.并(Union),44,2.差(Difference),R和S具有相同的目n相应的属性取自同一个域R-S 只在R中出现,不在S中出现的元素组成的集合 R-S=t|tRtS,45,R,S,R-S,2.差(Difference),46,2.差(Difference),差集RS,差集SR,47,3.交(Intersection),R和S具有相同的目n相应的属性取自同一个域RS由既属于R又属于S的元组组成 RS=t|t Rt S RS=R(R-S),48,R,S,R S,3.交(Intersection),49,3.交(Intersection),50,3.4.2 投影,投影运算符是,该运算作用于关系R将产生一个新关系S,S只具有R的某几个属性列。投影运算的一般表达式如下:S=A1,A2,An(R)S是投影运算产生的新关系,它只具有R的属性A1,A2,An所对应的列,51,2)投影操作主要是从列的角度进行运算投影之后不仅取消了原关系中的某些列,而且还可能取消某些元组(避免重复行),3.4.2 投影,52,表1.Student,3.4.2 投影,53,例1 查询学生的姓名和所在系,即求Student关系上学生姓名和所在系两个属性上的投影 Sname,Sdept(Student)或 2,5(Student)查询结果:,3.4.2 投影,54,3.4.2 投影,例2 查询学生关系Student中都有哪些系 Sdept(Student)结果:,55,3.4.2 投影,例3,关系 R,对于关系R,StudentNo,StudentName(R)的结果是:,56,3.4.3 选择运算,选择运算符是,该运算符作用于关系R也将产生一个新关系S,S的元组集合是R的一个满足某条件C的子集。选择运算的一般表达式为:S=C(R)S的模式与R的模式完全相同。C是我们所熟悉的条件表达式。,57,3.4.3 选择运算,例4,关系 R,对于关系R,Age19(R)的结果是:,58,3.4.4 笛卡儿积,两个关系R和S的笛卡尔积是一个新的关系,记作RS,其关系模式是R和S的模式的并集,R S是把R和S的元组以所有可能的方式组合起来,R S拥有的元组数量是R的元组数与S的元组数的乘积。,59,3.4.4 笛卡儿积,关系 R,关系S,R S,60,3.4.5 自然连接,两个关系R和S的自然连接,记作R S,得到的关系模式是R和S模式的并集。假设A1、A2、A3An 是R和S的模式中的公共属性,那么如果R的元组r和S的元组s在这些属性上的取值都相同,r和s组合而成的元组就归入R S,61,3.4.5 自然连接,对于上例中的关系R和S,R S为,关系R,关系S,注意:只有两个关系的元组在所有公共属性上的取值都相同时,才可以将他们的组合放入两个关系的自然连接中。,62,3.4.6 连接,关系R与关系S的基于C的连接首先作R和S的笛卡尔积,然后从RS的元组中选择满足条件C的元组集合。表现为:R c S,63,3.4.6 连接,对于上例中的关系R和S,R R.BS.B S为,关系R,关系S,64,3.4.7 改名,运算S(A1,A2,An)(R)用来把关系R改名为关系S,同时把关系S的属性从左至右依次命名为A1,A2,An。假如我们只想改变关系名,不想改变关系模式中的属性名,那么用如下形式 S(R),65,3.4.7 改名,RS(X,C,D)(S),关系R,关系S,66,3.4.8 复合运算,将各种运算符组合,配合花括号表明运算的先后次序,可以完成功能强大的查询。,复合运算StudentName(Score80(Student SC))的结果是:,67,3.4.9 基本运算与导出运算,有的运算符可以由其他运算符来表达,例如下面几种表达:交集:RS=R(RS),R c S=C(RS),R S=L(C(RS),连接:,自然连接:,另外六种运算并、差、选择、投影、笛卡尔积和改名都是基本运算,每一种都不能由另外五种运算导出。,68,下课了。,休息一会儿吧。,69,第三章 关系模型和关系运算,3.1 关系模型的基本概念3.2 从ODL设计到关系设计3.3 从E/R图到关系设计3.4 关系代数3.5 关系演算3.6 关系逻辑,70,3.5 关系演算,关系演算:把数理逻辑中的谓词演算应用到关系中,就是所谓的关系演算。在关系演算中,以元组为变量称为元组关系演算,而以域为变量,则称为域关系演算。关系代数中的8种运算都可用元组关系演算表达式来表达,用关系演算表达查询时,还常用到存在量词和全称量词。,71,3.5.1元组关系演算,一般形式为t|(t),其中t为元组变量,(t)是以元组变量t为基础的公式。公式是递归定义的:(1)原子公式是公式。(2)假如1(t)和2(t)是公式,那么1,1 2,12也都是公式,它们为真的条件分别是:“1非真”,“1和2皆为真”,“1和2中至少有一个为真”。(3)假如是公式,那么(t)()和(t)()也都是公式,它们为真的条件分别是:“至少有一个元组t使得为真”,“所有的元组t都使为真”。其中为存在量词,为全称量词。若在变量前加上量词,则变量为约束变量。因此,我们称(t)()和(t)()中的t为约束变量。(4)只有按上述三个规则的有限次组合形式的才是公式。,72,3.5.1元组关系演算,原子公式有三种:(1)R(t),其中R是关系名,t是元组变量,R(t)表示t是关系R的一个元组。(2)tisj,其中t和s是元组变量,是算术比较运算符(如、=等),tisj表示元组t的第I个分量与元组S的第j个分量满足关系,例如t1 s3表示t的第1个分量大于元组S的第3个分量。(3)tiC或Cti,其中C表示一个常量,其他含义同上。tiC表示t的第i个分量与常量C满足关系,例如t1 8表示t的第1个分量小于8。,73,3.5.1元组关系演算,在关系演算公式中,运算符的优先级为:(1)算术比较运算符优先级最高。(2)量词优先级次之,且的优先级高于(3)逻辑运算符优先级最低,且的优先级高于,的优先级高于。(4)若加括号,则括号内优先。,74,3.5.1元组关系演算,关系S,关系R,t|R(t)S(t)的结果为:,t|(s)(R(t)S(s)t1=s1)的结果为:,t|(s)(R(t)S(s)t2s1)的结果为:,75,3.5.1元组关系演算,1.交 RS可以表示为t|R(t)S(t)2.并 RS可以表示为t|R(t)S(t)3.差 RS可以表示为t|R(t)S(t),76,3.5.1元组关系演算,4.选择 C(R)可以表示为t|R(t)C,其中C是C的等价条件,只是把C中的属性名在C中换成ti的形式,i代表属性对应的是元组的第几个分量 对于学生关系模式 Student(StudentNo,StudentName,Age,Dept)下列查询等价:Age18 AND Dept=计算机系(Student)t|Student(t)t(3)18t4=计算机系,77,3.5.1元组关系演算,5.投影i1,i2,in(R)=t(n)|(r)(R(r)t1=ri1 t2=ri2tn=rin)其中n为投影后得到的元组t的分量数,rij(j=1,2,n)代表元组t的属性j所对应的元组r的相应分量。对于学生关系模式 Student(StudentNo,StudentName,Age,Dept)要查询学生的姓名和所在系,用关系代数表达如下:StudentName,Dept(Student)用元组关系演算表达式表达如下:t(2)|(s)(Student(s)t1=s2 t2=s4),78,3.5.1元组关系演算,6.笛卡尔积RS用如下形式表示:t(m+n)|(r(m)(s(n)(R(r)S(s)t1)=r1 tm=rm tm+1=s1tm+n=sn 其中R的属性个数为m,S的属性个数为n。假设R有两个属性,S有三个属性,那么RS可以用元组关系演算表达式表示如下:t(2+3)|(r(2)(s(3)(R(r)S(s)t(1)=r1 t2=r2 t3=s1 t4=s2 t5=s3),79,3.5.1元组关系演算,7.自然连接 基本上与笛卡儿积相似,假设关系R为R(A,B),关系S为S(B,C,D),那么R与S的自然连接可以用关系演算表达式表示如下:t(2+3-1)|(r(2)(s(3)(R(r)S(s)t(1)=r1 t2=r2 t2=s1 t3=s2 t4=s3),80,3.5.1元组关系演算,8.连接R cS的表示可以参考RS和c(R)的表示方法。假如进行R(A,B)与S(B,C,D)的连接:R R,BS,B S可以用元组关系演算表达式表示如下:t(2+3)|(r(2)(s(3)(R(r)S(s)t1=r1 t2=r2 t3=s1 t4=s2 t5=s3)r2 s1,81,3.5.1元组关系演算,9.复杂的关系代数表达式下列表达式等价:StudentName(Score80(Student SC)t(1)|(u)(v)(Student(u)SC(v)t1=u2 u1=v1 v3 80),82,3.5.2 域关系演算,域关系演算表达式中使用元组分量的变量,简称为域变量,其变化范围是某个值域,而不是某个关系。域关系演算的原子公式有两种:(1)R(x1,x2,xk),其中R是一个关系,具有k个属性,xi(i=1,2,k)是一个常量或者域变量.如果(x1,x2,xk)是R的一个元组,那么R(x1,x2,xk)为真.(2)xy,其中x和y是常量或域变量,是算术比较运算符(如、=等).如果x和y满足关系,则 x y为真,83,3.5.2 域关系演算,域关系演算表达式的一般形式是:x1,x2,x3,xk|(x1,x2,x3,xk)其中x1,x2,x3,xk都是域变量,是公式。该表达式的含义是:使为真的域变量x1,x2,x3,xk组成的元组的集合。,84,3.5.2 域关系演算,域关系演算、元组关系演算、关系代数三者的描述能力是一样的,转换的方法为:(1)如果t是有n个分量的元组变量,则为t的每个分量ti引进一个域变量ti,用ti来替换公式中所有的ti。相应的域关系演算表达式则有了n个域变量,形式为 t1,t2,t3,tk|(t1,t2,t3,tk)(2)出现存在量词(u)或者全称量词(u)的时候,如果u是有m个分量的元组变量,则为u的每个变量ui 引进一个域变量ui,将量词辖域内所有的u用u1,u2,u3,um替换,所有的ui用ui来替换。,85,3.5.2 域关系演算,例1:对于学生关系模式Student(StudentNo,StudentName,Age,Dept),查询计算机系年龄为18岁的学生;元组关系演算表达式如下:t|Student(t)t3=18 t4=”计算机系”域关系演算表达式如下:t1t2t3t4|Student(t1t2t3t4)t3=18 t4=”计算机系”,86,3.5.2 域关系演算,例2:,关系R,关系S,1、xy|R(xy)S(xy),2.xy|(u)(V)(R(xy)S(uv)x=u),3、xy|(u)(V)(R(xy)S(uv)yu),87,第三章 关系模型和关系运算,3.1 关系模型的基本概念3.2 从ODL设计到关系设计3.3 从E/R图到关系设计3.4 关系代数3.5 关系演算3.6 关系逻辑,88,3.6 关系逻辑,关系逻辑也是一种表达关系查询的方法,凡是能用关系代数表达的查询,都可以用关系逻辑来表达。以逻辑的形式对关系模型进行查询的一种语言,具体用的查询语言称为数据逻辑。在数据逻辑中,用规则来表达查询。规则主要由称为部关系原子和含有一个或多个原子的体组成。体中的原子称为子目标,既可以是关系原子,也可以是算术原子。关系代数中的8种运算也都能用数据逻辑规则来表达。总之,关系代数、关系演算和关系逻辑完全等价。,89,3.6.1谓词和原子,谓词有固定数量的参数,类似于返回布尔值的函数名,其函数随参数的取值不同而为真或假。原子:谓词及其随后的参数合称为原子,类似于C+程序设计中的函数调用例如P(x1,x2,x3,xn)中P是谓词,P(x1,x2,x3,xn)是原子。,90,3.6.1谓词和原子,算术原子:两个算术表达式的比较,例如X+2=y*z关系原子:若P是以某种固定顺序排列的n个属性的关系,并且(x1,x2,x3,xn)是P的一个元组,则关系原子P(x1,x2,x3,xn)的值为真(TRUE),否则原子的值为假(FALSE)对于右图中的关系R,R(a,1)为真,R(b,n)为真,其他R(x,y)均为假。,91,3.6.2 规则和查询,规则:数据逻辑用“规则”来描述关系代数中的运算。规则包括三个部分:(1)一个称为头部(head)的关系原子;(2)一个符号,读为“if”(如果);(3)由一个或多个原子组成的体(body),体中的原子称为子目标(subgoal)。子目标可以是关系原子,也可以是算术原子。各个子目标之间用AND连接,或以NOT开始。,92,3.6.2 规则和查询,假设关系Student,其关系模式为Student(StudentNo,StudentName,Age,Dept)如果用关系代数表示查询“计算机系学生的学号和姓名”如下:ComputerStudent StudentNo,StudentName(Dept=“计算机系”(Student))用一个数据逻辑规则表示上述查询为:ComputerStudent(Sno,SName)Student(Sno,Sname,A,D)AND D=”计算机系”分析:(1)该规则的头部是ComputerStudent(Sno,SName);(2)规则体包括两个部分 第一个子目标为关系原子,谓词为Student,参数有四个:Sno、Sname、A、D,分别对应于StudentNo、StudentName、Age、Dept;第二个子目标为算术原子,它的含义是Student元组中的“系别”分量的取值是“计算机系”。数据逻辑中的查询就是一个或多个规则的聚集。,93,3.6.3从关系代数到数据逻辑,1.交 两个关系的交集可以用一个规则来表示,该规则具有与两个关系相对应的子目标和与交集相对应的 头部,对相应的参数使用相同的变量,每个变量对应于关系的一个属性。例如:R与S的交集I(a,b,c)R(a,b,c)AND S(a,b,c),94,3.6.3从关系代数到数据逻辑,2.并两个关系的并集要用两个规则表示,每个规则都有一个唯一的子目标,分别对应一个关系,两个规则头部的谓词是相同的,与并集对应。例如:R与S的并集U(a,b,c)R(a,b,c)U(x,y,z)S(x,y,z),95,3.6.3从关系代数到数据逻辑,3.差两个关系的差可以用一个具有求反子目标的规则来表示,子目标和头部对于相应的参数都有相同的变量。例如:RSD(a,b,c)R(a,b,c)AND NOT S(a,b,c),96,3.6.3从关系代数到数据逻辑,4.选择 假如选择的条件C是一个算术比较或多个算术比较的“与”,可以用一个规则来表示,该规则具有一个关系子目标,对应于选择运算所针对的关系,还要有若干算术子目标,每个都对应于条件C中的一个算术比较。规则的头部与子目标相对应的参数要使用相同的变量。如果条件C中涉及n个子条件的“或”,那么就要用n个规则来表示这种选择运算。其中,每个规则的头部具有相同的谓词,第i个规则是按第i个子条件进行选择。,97,3.6.3从关系代数到数据逻辑,例1:Age18 AND Dept=“计算机系”(Student)用数据逻辑规则表示为:S(a,b,c,d)Student(a,b,c,d)AND c18 AND d=“计算机系”例2:涉及多个子条件的OR查询Age18 OR Dept=“计算机系”(Student)用数据逻辑规则表示为:S(a,b,c,d)Student(a,b,c,d)AND c18 S(a,b,c,d)Student(a,b,c,d)AND d=“计算机系”,98,3.6.3从关系代数到数据逻辑,例3:具有求反的算术比较NOT(Age18 AND Dept=“计算机系”)(Student),(NOT(Age18)OR(NOT(Dept=“计算机系”)(Student),(Age18)OR(Dept“计算机系”)(Student),S(a,b,c,d)Student(a,b,c,d)AND c18 S(a,b,c,d)Student(a,b,c,d)AND d“计算机系”,99,3.6.3从关系代数到数据逻辑,5.投影 假定我们要把关系Student投影到两个属性StudentName和Dept上,那么可以用如下规则表示:P(b,d)Student(a,b,c,d)6.笛卡尔积 假设关系R具有两个属性,关系S具有三个属性,那么RS可以表示如下:M(a,b,x,y,z)R(a,b)AND S(x,y,z),100,3.6.3从关系代数到数据逻辑,7.自然连接 自然连接的表达与笛卡尔积有些相似,有两点要注意:R和S中的公共属性必须使用相同的变量,公共属性所对应的变量在头部只出现一次关系R(A,B)和S(B,C,D)的自然连接可以表示如下:N(a,b,c,d)R(a,b)AND S(b,c,d)8.连接参考如何用数据逻辑来表示选择,例如R R.BS.BS,用数据逻辑规则表示为:J(a,rb,sb,c,d)R(a,rb)AND S(sb,c,d)AND rbsb9.复杂的关系代数表达式先为表达式建立一棵表达树,将表达式分解成几步只含有单一关系代数运算符的运算,随后将每步运算改写成一个规则,得到一个辅助用的中间关系,最后得到的关系就是我们需要的查询结果。,101,例如,以下关系代数表达式:StudentName(Score80(Student StudentCouese))表达树为:,102,3.6.3从关系代数到数据逻辑,连接、选择和投影:(1)A(Sno,Sname,A,D,Cno,S)Student(Sno,Sname,A,D)AND StudentCourse(Sno,Cno,S)(2)B(Sno,Sname,A,D,Cno,S)A(Sno,Sname,A,D,Cno,S)AND S80(3)Result(Sname)B(Sno,Sname,A,D,Cno,S)对这些规则作适当简化,例如用(1)的规则体替代(2)中的子目标A,再用(2)的规则体替代(3)中的子目标B,最终得到:Result(Sname)Student(Sno,Sname,A,D)AND StudentCourse(Sno,Cno,S)AND S80,103,本章总结,关系模型(Relational Model):用称为关系的二维表来表示数据,其数据模型就称为关系模型。模式(Schema)与实例(Instance):关系的名称和属性集总称为关系的模式。关系模式的集合称为关系数据库模式。一个关系或关系集合所对应的特定数据称为该关系模式或该数据库模式的实例。,104,本章总结,ODL类转换为关系:分为属性和联系两方面的转换。对于原子类型的属性,类的每个属性对应于关系的一个属性。对于非原子属性,若为结构,则把结构中的每个元素作为关系的一个属性;若为集合,则按元素的个数把相关的一个元组扩展为多个元组;若为数组,则按元素的个数既可扩展为多个元组,也可扩展为多个属性。,105,本章总结,ODL中联系的转换:若为单值联系,则把相关类中构成键码的属性(集)作为关系的附加属性(集)即可。若为多值联系,如为集合类型,那么,首先,把相关类的键码属性(集)作为关系的附加属性(集);其次,为相关对象集合的每个元素建立一个关系元组。对于联系与反向联系,常用的方法是将其独立出来作为一个新的关系。,106,本章总结,实体集与联系转换为关系:实体集可直接转换为关系,实体集的每个属性都对应于关系中的一个属性。E/R图中的联系转换为关系时,其属性由两部分组成:与该联系有关的每个实体集的键码属性(集);该联系本身的属性。,107,本章总结,子类结构到关系的转换:一种方法是为每个子类建立一个关系,而关系中含有子类及其超类的所有特性;另一种方法是,把子类结构划分为基本类和派生类(子类或通过属于联系扩展的实体集),用基本关系对应于基本类,而为每个派生类建立特定的关系,其中只包含基本类的键码属性(集)和该派生类的特有属性。,108,本章总结,关系代数(Relational Algebra):是以代数的形式对关系模型进行查询的一种语言。其主要运算有并、交、差、选择、投影、笛卡尔积、自然连接、连接和改名。综合使用这些运算可以表达各种各样的查询要求。关系演算(Relational Calculus):把数理逻辑中的谓词演算应用到关系中,就是所谓的关系演算。在关系演算中,以元组为变量称为元组关系演算,而以域为变量,则称为域关系演算。关系逻辑(Relational Logic):是以逻辑的形式对关系模型进行查询的一种语言,具体用的查询语言称为数据逻辑(Datalog)。在数据逻辑中,用规则来表达查询。,109,习题1:结合学生选课数据库,用关系代数进行以下查询:(1)学号为9900111的学生的系别和年龄;(2)有不及格(成绩60)学生的课程名;(3)计算机系有不及格课程的学生名单;(4)学生张林的“数据库原理”课成绩。,110,解:假设学生选课数据库关系模式如下:Student(SNo,SName,SAge,SDept)Course(CNo,CName)SC(SNo,CNo,Score)(1)SDept,Sage(SNO=9900111(Student)(2)Cname(score60(SC)Course)(3)SName(score60(SC)(SDept=计算机系(Student))(4)Score(SName=张林(Student)SC(CName=数据库原理(Course)),111,习题2:用数据逻辑规则表示习题1中的查询。(1)学号为9900111的学生的系别和年龄;S(D,A)Student(SNO,SN,A,D)AND SNO=9900111(2)有不及格(成绩60)学生的课程名;C(CN)Coures(CNo,CN)AND SC(SNo,CNo,S)AND S60(3)计算机系有不及格课程的学生名单;S(SN)Student(SNo,SN,A,D)AND SC(SNo,CNo,S)AND D=计算机系AND S60(4)学生张林的“数据库原理”课成绩。U(S)Student(SNo,SN,A,D)AND SC(SNo,CNo,S)AND Coures(CNo,CN)AND SN=张林 AND CN=数据库原理,112,2002年1月试题A 题3 设有学生选课数据库如下:学生关系:S(SNO,Sname,Age,Sex,Dept)课程关系:C(CNO,Cname,Teacher)学生选课关系:SC(SNO,CNO,Score)要求查询:学生“李大勇”所选修的成绩在80分以上的全部课程名称。(共20分),113,1)给出以笛卡尔积为基础的表达上述查询要求的关系代数表达式;(4分)Cname(sname=”李大勇”AND score80(S.SNO=SC.SNO AND C.CNO=SC.CNO(SSCC),114,(2),115,3)、优化后的关系代数表达式及优化后的关系表达树为:Cname(sname=”李大勇”(S)score80(SC)C),score80,116,2002年1月试题B 题3 设有一个简单的图书管理数据库如下:图书关系:Book(BNO,Title,Author,Publisher,Price),其中BNO,Title,Author,Publisher,Price分别表示图书的总编号、书名、作者、出版单位和单价;读者关系:Reader(LNO,Name,Unit),其中LNO,Name,Unit分别表示读者的借书证号、姓名和所在单位;借阅关系:Loan(LNO,BNO,Date)其中LNO,BNO,Date分别表示借阅图书的借书证号、所借图书的总编号和借书日期。要求查询:读者“李小波”于2001年元旦前所借的所有图书的书名及借书日期。(共20分),117,1)给出以笛卡尔积为基础的表达上述查询要求的关系代数表达式;(4分)解:以笛卡尔积为基础的表达查询要求的关系代数表达式为:Title,Date(sname=”李小波”ANDDate20010101(Read.LNO=Loan.LNO AND Loan.BNO=Book.BNO(ReaderLoanBook)(4分),118,2)、画出1)所给出的关系代数式对应的关系表达树;(3分),Read.LNO=Loan.LNO AND Loan.BNO=Book.BNO,sname=”李小波”AN