——数据库应用教程本章主要内容关系数据模型的完整性约束关系数据库的基本概念关系的数学定义关系的规范化关系代数主要内容2.1关系数据库的基本概念2.1.1关系与关系模式1.关系与关系模式的概念在关系模型中,实体和实体之间的联系都由单一的数据结构——关系来描述,关系数据库是由一张或多张相关联的表(关系)组成。对关系的结构的描述,称为该关系的关系模式,也就是一个关系的型。2.关系模式的表示如果给定一个关系名为R,其属性名为A1,A2,…,AN,则关系模式可以表示为:R(A1,A2,…,AN)。Student(Name,Sex,Birthday,Major)2.1关系数据库的基本概念2.1.2关系数据库与关系数据库模式1.关系数据库模式一个关系数据库的逻辑结构是所有关系模式(包括关系的名称、属性名称、关键字及可能提供的有关数据完整性约束规则及安全性控制要求)的集合,人们习惯称之为关系数据库模式。2.关系数据库关系数据库模式中所有的关系模式的具体关系的集合称之为关系数据库。关系数据库模式是数据的“型”的表示,而关系数据库则是数据的“值”的表示。Student(StuNo,StuName,Sex,Major,Birthday,Department,BirthPlace)CourseSelect(CurNo,CourseName,Hours,StuNo,Score)2.1关系数据库的基本概念2.1.3视图1.概念视图通常是由关系数据库模式的某关系中满足用户给定条件的若干属性列或元组组成,也可以是对若干个不同关系进行关系运算的结果,它反映的是局部逻辑结构。形象地说视图好比窗口,它能反映一个表或若干个表的局部数据。视图也有自己的名字、属性和元组,可以把它看作一个特殊类型的表。视图一旦定义,用户就可以把它当作表一样看待,可以对它进行查询,甚至还可以进行修改或插入操作,不过这种修改和插入操作最终都要转化为对表的操作。2.视图与表的区别视图和表的一个重要区别在于:表是存放实际数据的,而视图本身并不存放实际数据,它只是被定义成对应一个表或多个表的部分数据。实际数据并不依赖于视图而是依赖于表存放在数据库中的,因此人们也称视图为“虚表”。2.1关系数据库的基本概念2.1.4关键字及其相关概念1.超关键字在二维表中,能够唯一地确定元组的一个属性或几个属性的组合称为“超关键字”。超关键字虽然能唯一地确定元组,但是它所包含的属性可能是有多余的。2.候选关键字如果一个超关键字去掉其中任何一个属性后不再能唯一地确定元组,则称它为“候选关键字”(CandidateKey)。候选关键字既能唯一地确定元组,它包含的成份又是最精练的。3.主关键字二维表的候选关键字有很多,从二维表的候选关键字中,选出一个可作为“主关键字”(PrimaryKey)。对于表中的每个元组来说,主关键字必须包含一个不同于其他元组的唯一的值。主关键字的各个分量均不能为空。2.1关系数据库的基本概念2.1.4关键字及其相关概念4.外关键字如果F是关系R1的一个或一组属性,但F不是R1的主关键字,并且F是另一个关系R2的主关键字或与其主关键字相对应,则称F是关系R1的外关键字。5.主属性和非主属性包含在任一候选关键字中的属性称为主属性,不包含在任何候选关键字中的属性称非主属性。2.2关系数据模型的完整性约束1.概念关系模式一般用R(A1,A2,…,AN)表示,它说明了关系的语法,但并不是每个符合语法的元组都能成为关系R的元素,它还要受到语义的限制。数据的语义不但会限制属性的值(如学生选课成绩不能为负数且必须在某个范围内),而且还应反映关系间的联系(如学生选课表的学生必须是学生基本信息表中登记的学生)。以上所述的语义约束,可以用来保证数据库中数据的正确性,称为关系数据模型的完整性约束。2.分类实体完整性约束、参照完整性约束和用户自定义完整性约束。2.2关系数据模型的完整性约束(1)实体完整性约束实体完整性约束是指在关系中的任何一个元组,主关键字的任一分量都不允许为空。这是因为在一个关系中,关键字是唯一标识一个元组的,如果主关键字的属性中某些成分为空,则将难以判断该元组与其他元组的区别。(2)参照完整性约束参照完整性约束规定了外关键字的取值:外关键字要么取空值,要么等于对应关系中某个元组中的主关键字值。(3)参照完整性约束实体完整性约束和引用完整性约束适用于任何关系数据库系统,而用户自定义完整性约束反映某一具体应用所涉及的数据必须满足的语义要求,由用户根据具体的语义定义的完整性约束。2.3关系的数学定义1.笛卡尔积的直观含义某小区三个家庭,有成年男性3名,儿童2名,把成年男性看成一个集合F,把儿童看成一个集S,如下:F={李正勇,李道义,李泽世};S={李宏剑,李亚兵}。若F集合和S集合存在着父子关系,则可能的父子关系如下:{(李正勇,李宏剑),(李正勇,李亚兵),(李道义,李宏剑),(李道义,李亚兵),(李泽世,李宏剑),(李泽世,李亚兵)}在数学上把这种由两个或多个集合中的值的所有可能组合称“笛卡尔积”,本题的“笛卡尔积”可记为:F×S。2.3.1从日常生活中看关系的含义2.关系的直观含义实际的父子关系只有两种:{(李正勇,李宏剑),(李泽世,李亚兵)}。它是笛卡积的一个子集,是一个实际的“关系”。2.3关系的数学定义1.域域(Domain)是值的集合。如:{0到100之间的整数},{小学,初中,高中,大专,本科,硕研,博研},{男,女}等都是域。域中元素的个数称为域的基数,例如有下列集合:D1={李小军,张亚平,周平},表示单位人员的集合;D2={教授,副教授,讲师,助教},表示职称的集合;D3={已婚,未婚,再婚},表示婚姻情况的集合。2.3.2关系的数学定义2.3关系的数学定义2.笛卡尔积2.3.2关系的数学定义【例2-1】学生关系例。有以下三个域:D1={武洪运,张小萍},学生姓名集合;D2={男,女},学生性别集合;D3={计算机应用,计算机软件},学生专业集合。求D1×D2×D3。2.3关系的数学定义3.关系2.3.2关系的数学定义2.4关系代数1.关系数据操作数据库系统的目的就是利用计算机来维护机构中的各种有用的信息,并使之能满足机构中用户的需要,因此用户就应该能够利用DBMS来操作数据库中的数据,这种操作包括增加、删除、修改与查询。在关系数据库中把这些操作称为关系数据操作。2.关系数据操作的特点两个基本特点:一是一次操作可存取多个元组;二是语言的非过程化,即用户只需要告诉DBMS需要做什么而不需要告诉它怎样去做。关系的数据操作语言根据其所反映的数学意义可分成两大类:关系代数与关系演算。3.关系代数的种类关系代数是直接应用关系运算来表达操作目的,关系代数运算可分为传统的集合运算和专门的关系运算两大类。其中,传统的集合运算有并、交、差、关系的笛卡尔积等运算,专门的关系运算有选择、投影、连接、除法等运算。2.4关系代数传统集合运算的一般特点传统的集合运算是二目运算,运算是在两个关系的行上进行。除关系的笛卡尔积以外,参加运算的两个关系必须是并相容的,即两个关系应有相同的属性,且相应的属性值都取自同一个域。运算结果是两个关系中若干个完整元组的集合。2.4.1传统的集合运算2.4关系代数1.并运算(UNION)两个关系R1和R2相并,结果产生一个新关系R3,该关系由全体属于R1或属于R2的元组组成,记作R3=R1∪R2。2.4.1传统的集合运算【例2-2】求R∪S。解:两个关系的并运算的结果也是一个关系,运算结果如表2-8所示。2.4关系代数2.交运算(INTERSECTION)两个关系R1和R2的交运算产生一个新关系R3,该关系由既属于R1同时又属于R2的元组组成,记作R3=R1∩R2。2.4.1传统的集合运算【例2-3】求R∩S。解:两个关系的交运算的结果也是一个关系,运算结果如表2-9所示。2.4关系代数3.差运算(DIFFERENCE)两个关系R1和R2的差运算产生一个新的关系R3,该关系由属于R1但不属于R2的元组组成,记为R3=R1-R2。2.4.1传统的集合运算【例2-4】求R-S。解:两个关系的差运算的结果也是一个关系,运算结果如表2-10所示。2.4关系代数4.关系的笛卡尔积设R1为M元(有M个属性)关系,R2为N元关系,R1和R2的笛卡尔积产生一个新关系R3,R3由R1的所有元组与R2的所有元组组合连接而成的具有(M+N)个属性的元组组成。新关系中的前M个属性是R1的一个元组,后N个属性为R2的一个元组,则称R3是关系R1和R2的笛卡尔积,记作R3=R1×R2。可见关系的笛卡尔积也是二目运算,但它和并、交、差运算不一样,它并不要求参加运算的两个关系是并相容的。2.4.1传统的集合运算【例2-5】求R×S。关系R如表2-11所示,关系S如表2-12所示。解:两个关系的笛卡尔积,是它们的所示元组所有可能的组合,计算出来的R×S如图2-13所示。2.4关系代数专门的关系运算包括选择、投影、连接(包括内连接、自然连接、左外连接、右外连接和全外连接)、除法等运算,与传统的集合运算不同点可概括成两个方面:(1)不是所有的运算都是在行上进行,某些运算是在关系的列上进行的;(2)可以是单目运算也可以是双目运算。2.4.2专门的关系运算2.4关系代数1.选择运算(SELECTION)选择运算是从某个给定的关系中筛选出满足限定条件的元组子集组成一个新的关系,它是一元关系运算,可以定义为:2.4.2专门的关系运算表达式F中使用的运算符主要有:比较运算符:、≥、、≤、=、≠;逻辑运算符:(非)、∧(与)、∨(或)。其作用是从关系R中选取满足条件F的元组。“t”表示元组。F为条件,是由常数、变量、属性名、算术运算符、关系运算符及逻辑运算符组成的逻辑表达式,R是关系名。2.4关系代数【例2-6】要从表2-6表示的关系R中找出所有的计算机系的学生,请写出相应的关系表达式。解:本题是从关系中选出符合条件的元组,因此是选择运算,可表示如下:2.4.2专门的关系运算2.4关系代数2.投影(PROJECTION)运算选择运算是从某个关系中选取一个满足给定条件的行的子集,而投影运算是对关系中的列进行运算,是从指定的关系中选取一个列的子集构成一个新的关系,其表示形式如下:2.4.2专门的关系运算其中A是关系R的属性集的一个子集,t[A]表示只取元组t中相应A属性中的分量。2.4关系代数2.投影(PROJECTION)运算【例2-6】列出表2-6表示的关系R的所有的学号、姓名和专业。解:要查询某些列的信息,应使用投影运算,投影表达式如下:2.4.2专门的关系运算2.4关系代数3.连接运算(JOIN)连接运算是从两个关系的笛卡尔积中选取属性间满足一定条件的元组,组成一个新的关系。连接运算也可以表示为:2.4.2专门的关系运算其中R1和R2是两个不同的关系名,Ai和Bj分别代表R1的第i个属性和R2的第j个属性;代表比较运算符(即、、、、等)。表示从笛卡尔积R1×R2上选取R1的第i属性值与R2的第j个属性值符合条件的那些元组组成一个新的关系。2.4关系代数3.连接运算(JOIN)(1)内连接(InnerJoin)当连接条件中的运算符是“=”时,为等值联接。若等值联接的联接属性是公共属性,且在连接结果中不消除重复属性时,此等值联接称为内连接。2.4.2专门的关系运算【例2-8】求如表2-16和表2-17所示的两个关系R1和R2的内连接的结果。解:内连接是接照同名属性进行等值联接,且在联接的结果中不消除重复属性,故R1和R2的内连接的结构如表2-19所示。2.4关系代数3.连接运算(JOIN)(2)自然连接运算(Naturaljoin)连接运算中最有实用价值的一类运算是自然连接运算。它只要求参与运算的两个关系在同名属性上具有相同的值,由于同名属性上的值相同,所以在产生的结果关系中同名属性也只出现一次。关系R1和R2的自然连接运算可表示为:R1►◄R2。2.4.2专门的关系运算【例2-9】求如表2