第二章关系模型和关系运算理论2.1关系模型的基本概念2.1.1基本术语1、关系:所谓关系就是一种规范化的二维表,如图所示。关系模型的数据结构就是这种被称为“关系”的二维表,也就是说关系模型用二维表结构来表示数据及数据之间的联系。从数学角度上看:“关系”就是“集合”。学生课程教学班学号姓名性别民族生日电话家庭住址200513558图门毕力格男蒙古族1987-3-6200613210努恩吉雅女蒙族1988-10-2200518001李强男汉族1986-4-54392451200518002王蕾女回族1986-5-51380471987620071117031石艳女汉族1989-12-1020071118066李强男汉族1990-2-1课号课名课程类型学时要求教室要求先导课号180001计算机导轮专业54普通180002C语言程序设计专业72多媒体180001180003C++专业72多媒体180002180004数据结构专业90多媒体180002180005数据库原理专业90多媒体180004189001VB程序设计公共80实验室教学班号课号学年学期容纳人数180005-011800052008160180005-021800052008160189001-011890012008180189001-021890012008180180004-011800042008160选课学号教学班号成绩200518001180005-01200518001180004-0170200518102180005-0120071117031189001-0120071118066189001-022、属性:我们把表的列称为属性(又称字段或数据项)。例如:学生表有七列,那么它就有七个属性。每个属性都包括属性名、属性的取值类型及范围三个方面。例如:学生表的第一个属性的名称是:学号,其取值类型是字符串,取值范围是数字字符。3、关系模式:我们把关系名称(属性1名称,属性2名称,…,属性n名称)称为一个关系的模式。例如:学生(学号,姓名,性别,民族,生日,电话,家庭住址)就是学生关系的模式。4、元组:我们把表的行称为元组(又称记录)。5、候选键:如果一个属性集能唯一地标识元组,且又不含有多余的属性,那么我们把这个属性集称为候选键。例如:“学号”属性是学生关系的候选键,(学号,教学班号)是选课关系的候选键。6、主键:用户可以从候选键中选出一个作为主键。例如:我们可以选“学号”属性作为学生关系的主键7、外键:如果关系模式R中的某属性集A是另一个关系模式的主键,那么我们称A是关系模式R的外键。例如:“选课”关系中的“学号”属性就是“学生”关系的主键,因此,我们称“学号”属性是“选课”关系的外键。2.1.2关系的数学定义和性质一、定义从数学上看:关系是一个属性数目相同的元组的集合。二、性质1、关系中每一个属性都是不可分解的。2、关系中不允许出现重复元组。3、由于关系是一个集合,因此不考虑元组之间的顺序。4、关系的属性也是无序的。2.1.3关系模型的三类完整性规则了维护数据库中数据与现实世界的一致性,关系数据库的数据更新操作必须遵守下列三类完整性约束规则,具体如下:1、实体完整性规则:这条规则要求“关系中的元组在组成主键的属性上不能有空值”。例如:一个元组插入“学生”关系时,学号不能没有值。2、参照完整性规则:这条规则要求“不能引用不存在的元组”。例如:“选课”关系中不能出现“学生”关系中没有的“学号”。3、用户定义的完整性规则:这是针对某一具体数据的约束条件,有应用环境决定。例如:根据学校的实际规定,可以对“选课”关系的成绩属性作约束:0≤成绩≤1002.1.4ER模型向关系模型的转换规则一、实体类型的转换规则将每个实体类型转换成一个关系模式,实体的属性即为关系模式的属性,实体标识符即为关系模式的属性。二、实体之间联系的转换规则1、若实体间联系是1:1的,可以在两个实体转换的关系模式中的任何一个关系模式的属性中加入另一个关系模式的键以及联系类型的属性。示例12、若实体间联系是1:n的,则在n端实体类型转换成的关系模式中加入1端的键和联系类型的属性。示例23、若实体间的联系是m:n的,则将联系类型也转换成一个关系模式,其属性为两端实体的键和联系类型的属性。示例3三、示例2.1.5关系模型的三级体系结构一、模式我们称构成一个数据库的所有关系模式为数据库模式。二、子模式子模式是用户所用到的那部分数据的描述。三、存储模式数据在计算机的外存储器(如:磁盘)上的存储结构及特征的描述。2.1.6关系模型的优点1、关系模型的数据结构单一、简单。2、关系模型的逻辑结构和相应的操作完全独立于数据存储方式,具有高度的数据独立性。3、关系模型的数学基础比较坚实。4、关系数据库语言与一阶谓词逻辑的固有内在联系,为以关系数据库为基础的推理系统和知识库系统的研究开发提供了方便。2.1.7关系查询语言和关系运算关系数据库的数据操纵语言(DML)的语句分成查询语句和更新语句两大类。查询语句用于描述用户的各种检索要求;更新语句用于描述用户进行插入、删除、修改等操作。从计算机语言的角度看,后者是在前者的基础上工作,前者比后者复杂。但前者有理论基础,是主要研究对象。关于查询的理论称为“关系运算理论”。关系查询语言根据其理论基础的不同分成三类:1、关系代数语言:查询操作是以集合操作为基础的运算。2、关系演算语言:查询操作是以谓词演算基础的运算。3、关系逻辑语言:查询操作是以if—then逻辑操作为基础的运算。2.2关系代数2.2.1关系代数的五个基本操作关系代数是以关系为运算对象的一组高级运算的集合。由于关系是属性个数相同的元组的集合,因此集合代数的操作就可以引入到关系代数中。1、并(Union)设关系R和关系S具有相同的模式,我们把R∪S≡﹛t|t∈R∨t∈S,t是元组变量﹜称为R和S的并。从定义可见R和S的并是由属于R或属于S的元组组成的集合。例如:RSR∪S2、差(Difference)设关系R和关系S具有相同的模式,我们把R-S≡﹛t|t∈R∧tS,t是元组变量﹜称为R和S的差。从定义可见R和S的差是由属于R而不属于S的元组组成的集合。RSR-SABa1b1a2b2a3b3ABa1b1a2b3a3b3ABa1b1a2b2a2b3a3b3ABa1b1a2b2a3b3ABa1b1a4b4a3b3ABa2b23、笛卡儿积(CartesianProduct)设关系R和关系S的元数(关系的元数就是关系所具有的属性个数)分别为r和s。定义R和S的笛卡尔积是一个(r+s)元的元组集合,其每个元组的前r个分量来自R的一个元组,后s个分量来自S的一个元组,记为R×S。R×S≡﹛t|t=﹤tr,ts﹥∧tr∈R∧ts∈S﹜例如:关系R关系SABa1b1a2b2关系R×SABCDEa1b1c1d1e1a1b1c1d2e1a2b2c1d1e1a2b2c1d2e14、投影(Projection)这个操作是对一个关系进行垂直分割,削去某些列,并重新安排列的顺序,再删去重复元组。关系R(A1,A2,...,An)在属性列Ai1,Ai2,...,Aik的投影记为:π(Ai1,Ai2,...,Aik)(R)例如:关系R在属性A,B上的投影为:π(A,B)(R)ABCDEa1b1c1d1e1a1b1c1d2e1a2b2c1d1e1a2b2c1d2e15、选择(Selection)这个操作是根据某些条件对关系的元组进行筛选。关系R关于公式F的选择操作用σ(F)(R)表示。σ(F)(R)=﹛t|t∈R∧F(t)=true﹜公式F是由R的属性、常数,关系运算符等构成的逻辑表达式。举例:Rσ(A=’a1’orB=’b2’)(R)CDEc1d1e1c1d2e1ABa1b1a2b2以上五个操作组成了关系代数的完备的操作集。2.2.2关系代数的四个组合操作1、交(intersection)关系R和S的交是由既属于R又属于S的元组构成的集合,记为:R∩S,这里要求R和S定义在相同关系模式上。形式定义如下:R∩S≡﹛t|t∈R∧t∈S,t是元组变量﹜,R和S的元数相同。由于R∩S=R-(R-S),因此交操作不是一个独立的操作。2、联接(join)连接有两种:连接和F连接(这里是算术比较符,F是公式)。⑴连接连接是从关系R和S的笛卡尔积中选取属性值满足某一操作的元组,记为:RiθjS,这里i和j分别是关系R和S中的第i个、第j个属性的序号。形式定义为:RiθjS=﹛t|t=﹤tr,ts﹥∧tr∈R∧ts∈S∧tritsj﹜此处tri是元组tr的第i个分量,tsj是元组ts的第j个分量,tritsj表示这两个分量值满足比较。显然连接是由笛卡尔积和选择操作组合而成。既:RiθjS=σiθ(r+j)(R×S)该式表示连接是在关系R和S的笛卡尔积中挑选第i个分量和第(r+j)个分量满足比较操作的元组。如果是“=”则称该连接是等值连接。⑵F连接F连接是从关系R和S的笛卡尔积中挑选属性值满足某一公式F的元组,记为:RFS这里F是形为F1∧F2∧…Fn的公式,每个Fp(p=1,2…n)是形为ij的式子(i和j分别为关系R和S的第i个分量和第j个分量的序号。)ABCa1b1c1a1b2c2a2b1c3a2b2c4a2b3c4a3b2c1ABCa1b1c1a1b2c2a2b2c4a3b2c1⑶举例:RSRSRS2121∧1=23、自然连接(NaturalJoin)两个关系R和S的自然连接用RS表示,具体计算过程如下:⑴计算R×S⑵设R和S的公共属性是A1,A2,…,AK,从R×S中挑选满足R.A1=S.A1∧R.A2=S.A2∧…∧R.Ak=S.Ak的那些元组。⑶去掉S.A1,S.A2,...,S.Ak这些列。因此两个关系R和S的自然连接可用下式定义:RS≡πi1,i2…ik(σR.A1=S.A1∧…∧R.Ak=S.Ak(R×S))RSR×S4、除法(Division)设关系R和S的元数分别为r和s(设rs0),R的属性集包含S的属性集。那么R÷S是一个(r-s)元的元组集合。(R÷S)是满足下列条件的最大关系:R÷S中每个元组t与S中每个元组u组成的新元组t,u必在关系R中。为方便,我们假设S的属性为R的后s个属性。R÷S的计算过程如下:⑴T=π1,2,…,r-s(R)⑵W=(T×S)-R(计算T×S中不在R的元组)⑶V=π1,2,…,r-s(W)⑷R÷S≡T-VABC123456789DE3162ABCDE123311236245662ABCDE123311236245662ABCabcdbcbbfcadBCDbcdbceadbABCDabcddbcedbcd举例:RS1S2S32.2.3关系代数运算的应用实例题目:设教学数据库中有三个关系学生关系:S(S#,SNAME,AGE,SEX)选课关系:SC(S#,C#,GRADE)课程关系:C(C#,CNAME,TEACHER)请用关系代数表达下面每个查询1、检索学习课号为C2的学生的学号与成绩。2、检索选修课号为C2或C4的学生学号。3、检索选修课名为OS的学生的学号及姓名。4、检索至少选修了课号为C2和C4的学生学号。5、查询至少选了两门课程的学生学号。选课关系:SC(S#,C#,GRADE)S1c1S1c2S2c1S3c4π1=4AND25(SCxSC)6、检索没选C2课的学生的姓名及年龄。Πsname,age((πS#(S)-πS#(σC#=’C2’(SC)))学号姓名S1BAOS2GUS3ANS4LI学号姓名课号课名S1BAOC1DBS1BAOC2OSS1BAOC3DSS1BAOC4MISS2GUC1DBS2GUC2OSS3ANC2OSS4LIC2OSS4LIC4MIS课号课名C2OS课号课名C2OSC4MIS学号姓名S1BAOS4LI课号课名C1DBC2OSC4MIS学号姓名S1BAOS)7、检索选修了全部课程的学生学号。πS#(πS#,C#(S