1、第第5 5章章 关系关系数据库方法数据库方法u本章导读本章导读 本章为次重点章,主要介绍了关系模型的关系运算理论、关系代数,使本章为次重点章,主要介绍了关系模型的关系运算理论、关系代数,使学生理解操作对象为数据表的运算,为后续数据查询打下基础,同时对课学生理解操作对象为数据表的运算,为后续数据查询打下基础,同时对课程综合案例中的数据表进行运算,使学生进一步理解数据表的运算。程综合案例中的数据表进行运算,使学生进一步理解数据表的运算。5.1.1关系模型概述关系模型概述关系是一张二维表格。在关系数据库系统中通过关系是一张二维表格。在关系数据库系统中通过二维表格组织数据,表达信息。关系操作指存储操作
2、二维表格组织数据,表达信息。关系操作指存储操作和检索操作,且以检索操作为核心。关系操作的数据和检索操作,且以检索操作为核心。关系操作的数据对象是二维表格。关系模型给出了关系操作的能力和对象是二维表格。关系模型给出了关系操作的能力和特点。关系操作包括:选择、投影、条件连接、除、特点。关系操作包括:选择、投影、条件连接、除、并、交、差等查询操作、添加、删除和修改操作。并、交、差等查询操作、添加、删除和修改操作。关系模型有三类完整性约束,分别是实体完整性关系模型有三类完整性约束,分别是实体完整性、参照完整性和用户定义的完整性。、参照完整性和用户定义的完整性。5.1 关系数据库的基本概念关系数据库的基
3、本概念5.1.2 关系数据结构及形式化定义关系数据结构及形式化定义定义定义5.15.1:域(:域(DomainDomain)是值的集合,属性的取)是值的集合,属性的取值范围。基数是域的取值个数。值范围。基数是域的取值个数。例如:例如:域,姓名域,姓名=李丽,马俊萍,王永明,姚江李丽,马俊萍,王永明,姚江,基数为,基数为4 4;域,系域,系=管理信息系,汽车系,海运管理信息系,汽车系,海运,基数为,基数为3 3;域,性别域,性别=男,女男,女,基数为,基数为2 2;2笛卡尔积定义定义5.2 5.2:给定一组域:给定一组域D1D1,D2D2,DnDn,则,则D D1 1D D2 2D Dn n=(
4、d=(d1 1,d,d2 2,d,dn n)|d)|di iDDi i,i=1,2,i=1,2,n,n 称为称为D D1 1,D D2 2,D Dn n的笛卡尔积。其中每一个的笛卡尔积。其中每一个(d(d1 1,d,d2 2,d,dn n)叫做一个叫做一个n n元元组(表中的一行,称为一个元组),元组中的每一个组(表中的一行,称为一个元组),元组中的每一个d di i是是D Di i域域中的一个值,称为一个分量(元组中的属性)。若中的一个值,称为一个分量(元组中的属性)。若D Di i(i=1,2,(i=1,2,n),n)为有限集,其基数为为有限集,其基数为m mi i(i=1,2,(i=1,
5、2,n),n),则则D D1 1D D2 2D Dn n的基数为:的基数为:m=mm=m1 1m m2 2m mn n(i=1,2,(i=1,2,n),n);其;其中:中:m=m=笛卡尔积的基数。笛卡尔积的基数。例:给定三个域:例:给定三个域:D D1 1=李丽,马俊萍李丽,马俊萍,D D2 2=管理信息系,汽车系管理信息系,汽车系,D D3 3=男,女男,女,则则D D1 1D D2 2D D3 3笛卡尔积是笛卡尔积是D D1 1,D D2,D D3各域的各元素间的一切各域的各元素间的一切可能的组合。可能的组合。D D1D D2D D3的基数为的基数为m m,m=2m=22 22=82=8。
6、5.1.2 关系数据结构及形式化定义关系数据结构及形式化定义姓名姓名系系性别性别李丽李丽管理信息系管理信息系男男李丽李丽管理信息系管理信息系女女李丽李丽汽车系汽车系男男李丽李丽汽车系汽车系女女马俊萍马俊萍管理信息系管理信息系男男马俊萍马俊萍管理信息系管理信息系女女马俊萍马俊萍汽车系汽车系男男马俊萍马俊萍汽车系汽车系女女表表5.1 D5.1 D1 1D D2 2D D3 3笛卡尔积笛卡尔积5.1.2 关系数据结构及形式化定义关系数据结构及形式化定义5.1.2 关系数据结构及形式化定义关系数据结构及形式化定义定义定义5.3 关系的描述称为关系模式。它可以形式化关系的描述称为关系模式。它可以形式化地
7、表示为:地表示为:R(U),其中,其中R为关系名,为关系名,U为组成该关系为组成该关系的属性名集合。简记为:关系名(属性名,属性的属性名集合。简记为:关系名(属性名,属性名,名,属性,属性n)。)。定义定义5.4:给定一组域:给定一组域D1,D2,Dn,则,则D1D2Dn的子集称为的子集称为D1D2Dn上的关系上的关系:记作:记作R(D1,D2,Dn,),其中,),其中,R为关系名为关系名,n为关系为关系R的度或目。当的度或目。当n=1时,称该关系为单元时,称该关系为单元关系,当关系,当n=2时,称该关系为二元关系。时,称该关系为二元关系。例:表例:表5.1中有两个元组符合中有两个元组符合实际
8、情况,构成名为实际情况,构成名为“职工职工”的关系。如表的关系。如表5.2所示,可所示,可记作:职工(姓名,职称,记作:职工(姓名,职称,性别)。性别)。姓名姓名系系性别性别李丽李丽管理信息系管理信息系男男李丽李丽管理信息系管理信息系女女李丽李丽汽车系汽车系男男李丽李丽汽车系汽车系女女马俊萍马俊萍管理信息系管理信息系男男马俊萍马俊萍管理信息系管理信息系女女马俊萍马俊萍汽车系汽车系男男马俊萍马俊萍汽车系汽车系女女表表5.1 关系中的某一属性组,若它的值唯一地标识一关系中的某一属性组,若它的值唯一地标识一个元组个元组(记录记录),则称该属性组为,则称该属性组为候选键候选键(码码),若一个,若一个关
9、系有多个候选键,则选定其中一个关系有多个候选键,则选定其中一个为主键为主键(码码),主键的诸属性称主键的诸属性称为主属性为主属性。关系可以有三种类型:。关系可以有三种类型:基本关系基本关系(通常又称为基本表或基表通常又称为基本表或基表)、查询表和视、查询表和视图表。图表。关系性质关系性质任意两个元组(即两行)不能完全相同。任意两个元组(即两行)不能完全相同。关系中元组(行)的次序是不重要的,可以任意交换。关系中元组(行)的次序是不重要的,可以任意交换。属性(列)的次序也是不重要的,可以任意交换。属性(列)的次序也是不重要的,可以任意交换。同一列中的分量,必须来自同一个域,是同类型的数据。同一列
10、中的分量,必须来自同一个域,是同类型的数据。属性必须有不同的名称,但不同的属性可以出自相同的域,属性必须有不同的名称,但不同的属性可以出自相同的域,即它们的分量可以取值于同一个域。即它们的分量可以取值于同一个域。每一分量必须是原子的,即是不可再分的数据项。每一分量必须是原子的,即是不可再分的数据项。对关系模式的数据操纵可描述为:对关系模式的数据操纵可描述为:l操纵的对象操纵的对象l基本操纵方式有五种,基本操纵方式有五种,属性指定属性指定元组选择元组选择关系合并关系合并元组插入元组插入元组删除。元组删除。5.1.3 关系数据库模式关系数据库模式多个关系的集合构成了多个关系的集合构成了关系数据库关
11、系数据库传统的集合运算主要指并、交、差、笛卡尔积四种运传统的集合运算主要指并、交、差、笛卡尔积四种运算。它们传统地用于两个集合之间的运算。当用于关系运算。它们传统地用于两个集合之间的运算。当用于关系运算时,参加运算的关系必须是相容的和可并的,即它们应算时,参加运算的关系必须是相容的和可并的,即它们应有相同的度(属性个数相等),且相应的属性值来自同一有相同的度(属性个数相等),且相应的属性值来自同一域。如表域。如表5.35.3和表和表5.5.中的关系中的关系J J和和K K就是两个相容的关系。就是两个相容的关系。5.2 关系代数关系代数5.2.1 传统的集合运算传统的集合运算学号学号课程号课程号
12、成绩成绩学号学号课程号课程号成绩成绩J0401C0188J0401C0188J0401C0293J0402C0190J0401C0399J0403C0176Q0401C0190表表5.3 关系关系J 表表5.4关系关系 K 关系关系J J与关系与关系K K之并,记作之并,记作JKJK1并运算并运算5.2.1 传统的集合运算传统的集合运算学号学号课程号课程号成绩成绩J0401J0401C01C018888J0401J0401C02C029393J0401J0401C03C039999J0402J0402C01C019090J0403J0403C01C017676Q0401Q0401C01C019
13、090表表5.5 JK关系关系J J与关系与关系K K之差,记作之差,记作J-KJ-K2差运算差运算5.2.1 传统的集合运算传统的集合运算学号学号课程号课程号成绩成绩J0401J0401C02C029393J0401J0401C03C039999表表5.5 J-K关系关系J J与关系与关系K K之交,记作之交,记作J J K K3交运算交运算5.2.1 传统的集合运算传统的集合运算学号学号课程号课程号成绩成绩J0401J0401C01C018888表表5.5 J K两个分别为两个分别为n n目和目和m m目的关系目的关系J J和和K K的广义笛卡尔积是一的广义笛卡尔积是一个(个(n+mn+m
14、)列的元组的集合。元组的前)列的元组的集合。元组的前n n列是关系列是关系J J的一个元的一个元组,后组,后m m列是关系列是关系K K的一个元组。若的一个元组。若J J有有k k1 1个元组,个元组,K K有有k k2 2个个元组,则关系元组,则关系J J和关系和关系K K的广义笛卡尔积有的广义笛卡尔积有k k1 1k k2 2个元组。个元组。4广义笛卡尔积广义笛卡尔积5.2.1 传统的集合运算传统的集合运算学号学号课程号课程号成绩成绩学号学号课程号课程号成绩成绩J0401C0188J0401C0188J0401C0188J0402C0190J0401C0188J0403C0176J0401
15、C0188Q0401C0190J0401C0293J0401C0188J0401C0293J0402C0190J0401C0293J0403C0176J0401C0293Q0401C0190J0401C0399J0401C0188J0401C0399J0402C0190J0401C0399J0403C0176J0401C0399Q0401C0190表表5.8 JK5.2.2 专门的关系运算专门的关系运算公式表示:公式表示:,记为:,记为:c(J)c(J)。作用:在关系的水平方向上选取符合给定条件的子集。作用:在关系的水平方向上选取符合给定条件的子集。例例5.15.1:找出关系:找出关系J J中
16、成绩大于或等于中成绩大于或等于9090的学号及其选修的学号及其选修的课程号。的课程号。公式:公式:成绩成绩9090(J(J)。1.选择运算选择运算学号学号课程号课程号成绩成绩J0401J0401C02C029393J0401J0401C03C0399995.2.2 专门的关系运算专门的关系运算公式表示:公式表示:(关系名),记为:(关系名),记为:U(J)U(J)。作用:在关系的水平方向上选取符合给定条件的子集。作用:在关系的水平方向上选取符合给定条件的子集。在关系的垂直方向选取含有给定属性的子集。如果新关在关系的垂直方向选取含有给定属性的子集。如果新关系中包含重复元组,则要删除重复元组。系中
17、包含重复元组,则要删除重复元组。例例5.25.2:找出关系:找出关系J J中选修了课程的学生学号及其选修中选修了课程的学生学号及其选修的课程号。的课程号。公式:公式:学号,课程号学号,课程号(J)(J)2.投影运算投影运算学号学号课程号课程号J0401C01J0401C02J0401C03表表5.10JK5.2.2 专门的关系运算专门的关系运算例例5.35.3:找出关系:找出关系SCSC中选修了课程的学生学号。中选修了课程的学生学号。公式:公式:学号学号(SC)(SC)学号学号J0401J0402J0403Q0401Q0403表表5.11SNO3连接连接JOIN运算运算(1)条件连接条件连接5
18、.2.2 专门的关系运算专门的关系运算条件连接是二目运算,它的操作对象有两个关系。条条件连接是二目运算,它的操作对象有两个关系。条件连接是从关系件连接是从关系M和和N的笛卡尔积中选取属性值满足连接的的笛卡尔积中选取属性值满足连接的元组,连接可看成是有选择的笛卡尔乘积。元组,连接可看成是有选择的笛卡尔乘积。记为:记为:M ij N i (n+j)(MN)是比较运算符,如果是比较运算符,如果是等号是等号“=”,该连接操作称为,该连接操作称为“等值连接等值连接”。5.2.2 专门的关系运算专门的关系运算(2)自然连接自然连接两个关系两个关系M和和N的自然连接用的自然连接用M N表示。选择表示。选择M
19、和和N公共属性值均相等的元组,并去掉公共属性值均相等的元组,并去掉MN中重复的中重复的公共属性列。具体计算过程如下。公共属性列。具体计算过程如下。计算计算M MN N设设M M和和N N的公共属性是的公共属性是A1A1,AkAk,挑选,挑选M MN N中中满足满足M.A1=N.A1,M.A1=N.A1,,M.Ak=N.AkM.Ak=N.Ak的那些元组的那些元组去掉去掉N.A1,N.A1,,N.AkN.Ak的这些列。的这些列。5.2.2 专门的关系运算专门的关系运算例例5.4:利用数据表:利用数据表C、SC,求选修了课程,求选修了课程“数据库数据库”的学生学号及课程成绩。的学生学号及课程成绩。第
20、一步第一步:将将C与与SC建立自然连接(两数据表的公共属性相等建立自然连接(两数据表的公共属性相等C.课程号课程号=SC.课程号),得出新关系课程号),得出新关系 NEW=C SC,如表如表5.17所示。所示。5.2.2 专门的关系运算专门的关系运算第二步,对关系第二步,对关系NEW进行条件进行条件课程名课程名=数据库数据库选选择,运算结果如表择,运算结果如表5.18所示,得到新关系所示,得到新关系 NEW1=课程名课程名=数据库数据库(NEW)5.2.2 专门的关系运算专门的关系运算第三步,对关系第三步,对关系NEW1进行投影运算,运算结果如进行投影运算,运算结果如表表5.19所示,得到新关
21、系所示,得到新关系NEW2,NEW2=学号,课程名,成绩学号,课程名,成绩(NEW1)5.2.2 专门的关系运算专门的关系运算完整的公式如下:完整的公式如下:5.2.2 专门的关系运算专门的关系运算4除法运算除法运算公式表示:公式表示:/2,记为:,记为:T=M/NT=M/N 。作用:在商关系作用:在商关系T T中中,只包含属性组(或者说关系只包含属性组(或者说关系M M中的属中的属性组性组X X、Y Y已除去已除去N N中的属性组中的属性组Y Y)。中只允许保留这样的)。中只允许保留这样的元组:当它们与元组:当它们与N N连接,所组成的新元组全部能在原来的关连接,所组成的新元组全部能在原来的
22、关系系M M中找到。中找到。例例5.55.5:利用数据表:利用数据表SCSC(见表(见表5.165.16),求同时选修了课程号),求同时选修了课程号为为“C01C01”和和“C02C02”的学生学号。的学生学号。第一步,组建数据表第一步,组建数据表N N,如表,如表5.205.20所示。所示。验证:当验证:当T与与N连接时,所组成的新元组全部能在原来的关系连接时,所组成的新元组全部能在原来的关系M中找到。中找到。第二步,完成除法运算,设第二步,完成除法运算,设M=学号,课程号学号,课程号(SC),T=M/N,如表,如表5.21和表和表5.22所示所示5.2.3查询优化查询优化查询优化的目的是为
23、了系统在执行时,既省时间又能提查询优化的目的是为了系统在执行时,既省时间又能提高效率。优化的策略主要从算法步骤入手,在关系代数表达高效率。优化的策略主要从算法步骤入手,在关系代数表达式中尽可能早地执行选择操作,把广义笛卡尔积和随后的选式中尽可能早地执行选择操作,把广义笛卡尔积和随后的选择操作合并成连接运算。择操作合并成连接运算。例例5.65.6:利用数据表:利用数据表S S、SCSC,求,求“李丽李丽”同学选修的课程同学选修的课程号及课程成绩。号及课程成绩。方法一:先进行连接运算,后执行选择操作。方法一:先进行连接运算,后执行选择操作。第一步,将第一步,将S S与与SCSC建立自然连接,建立自
24、然连接,得出新关系得出新关系SNEW第二步,对关系第二步,对关系sNEWsNEW进行条件进行条件 姓名姓名=“李丽李丽”选择选择得出新关系得出新关系SNEW1第三步,对关系第三步,对关系sNEW1sNEW1进行投影运算进行投影运算sNEW2=sNEW2=姓名,课程号,成绩姓名,课程号,成绩(sNEW1sNEW1)方法二:尽可能早地执行选择操作方法二:尽可能早地执行选择操作第一步,对关系第一步,对关系S S进行条件进行条件 姓名姓名=“李丽李丽”选择选择,得到新关系,得到新关系SLI 第二步,将第二步,将S S与与SCSC建立自然连接(两数据表的公共属性相等建立自然连接(两数据表的公共属性相等S
25、LI.SLI.学号学号=SC.=SC.学号学号),得出新关系得出新关系SLINEW第三步,对关系第三步,对关系sLINEWsLINEW进行投影运算进行投影运算 在关系代数运算中,把由基本操作经过有限次复合的式子称为关系代数表达式。这种表达式的结果仍然是一个关系。可以使用关系代数表达式表示各种数据查询操作。5.2.4 关系代数应用举例关系代数应用举例例题:例题:设设“学生选课学生选课”数据库中存在三个关系,具体内容如数据库中存在三个关系,具体内容如表表5.15表表5.24所示。所示。学生基本资料表学生基本资料表S(学号学号,姓名,姓名,性别性别,出生日期,系,出生日期,系,电话电话)课程数据表课
26、程数据表C(课程号,课程名,学分,预选课程号,教师课程号,课程名,学分,预选课程号,教师)学生选课数据表学生选课数据表SC(学号,课程号,成绩学号,课程号,成绩)下面用关系代数表达式表达各个查询语句下面用关系代数表达式表达各个查询语句1检索选修课程号为检索选修课程号为C03的学生学号与成绩的学生学号与成绩例题:例题:设设“学生选课学生选课”数据库中存在三个关系,具体内容如数据库中存在三个关系,具体内容如表表5.15表表5.24所示。所示。学生基本资料表学生基本资料表S(学号学号,姓名,姓名,性别性别,出生日期,系,出生日期,系,电话电话)课程数据表课程数据表C(课程号,课程名,学分,预选课程号
27、,教师课程号,课程名,学分,预选课程号,教师)学生选课数据表学生选课数据表SC(学号,课程号,成绩学号,课程号,成绩)下面用关系代数表达式表达各个查询语句下面用关系代数表达式表达各个查询语句2检索选修课程号为检索选修课程号为C02的学生学号与姓名的学生学号与姓名例题:例题:设设“学生选课学生选课”数据库中存在三个关系,具体内容如数据库中存在三个关系,具体内容如表表5.15表表5.24所示。所示。学生基本资料表学生基本资料表S(学号学号,姓名,姓名,性别性别,出生日期,系,出生日期,系,电话电话)课程数据表课程数据表C(课程号,课程名,学分,预选课程号,教师课程号,课程名,学分,预选课程号,教师
28、)学生选课数据表学生选课数据表SC(学号,课程号,成绩学号,课程号,成绩)下面用关系代数表达式表达各个查询语句下面用关系代数表达式表达各个查询语句3检索选修课程名为检索选修课程名为“数据库数据库”的学生学号与姓名的学生学号与姓名例题:例题:设设“学生选课学生选课”数据库中存在三个关系,具体内容如数据库中存在三个关系,具体内容如表表5.15表表5.24所示。所示。学生基本资料表学生基本资料表S(学号学号,姓名,姓名,性别性别,出生日期,系,出生日期,系,电话电话)课程数据表课程数据表C(课程号,课程名,学分,预选课程号,教师课程号,课程名,学分,预选课程号,教师)学生选课数据表学生选课数据表SC
29、(学号,课程号,成绩学号,课程号,成绩)下面用关系代数表达式表达各个查询语句下面用关系代数表达式表达各个查询语句4检索选修课程号为检索选修课程号为C02或或C03的学生学号的学生学号例题:例题:设设“学生选课学生选课”数据库中存在三个关系,具体内容如数据库中存在三个关系,具体内容如表表5.15表表5.24所示。所示。学生基本资料表学生基本资料表S(学号学号,姓名,姓名,性别性别,出生日期,系,出生日期,系,电话电话)课程数据表课程数据表C(课程号,课程名,学分,预选课程号,教师课程号,课程名,学分,预选课程号,教师)学生选课数据表学生选课数据表SC(学号,课程号,成绩学号,课程号,成绩)下面用关系代数表达式表达各个查询语句下面用关系代数表达式表达各个查询语句5检索至少选修课程号为检索至少选修课程号为C03和和C05的学生学号的学生学号