1.3 关系数据库
关系数据库是建立在关系模型基础上的数据库,是由若干张二维表格组成的集合,它借助于集合代数等概念和方法来处理数据库中的数据。
1.3.1 关系数据库的基本术语
这里主要介绍关系、属性(字段)、元组(记录)、分量、域、主关键字以及外部关键字等关系数据库中的基本术语。
1.关系
关系是满足关系模型基本性质的二维表格,一个关系就是一张二维表格。对关系的描述称为关系模式,一个关系模式对应一个关系的结构。关系模式的一般格式如下。
关系名(属性名1,属性名2,…,属性名n)
例如,表1-1课程表的关系模式为:课程表(课程编号,课程名称,学分,开课状态,课程大纲)。
2.属性(字段)
二维表格中的一列称为一个属性,每一列都有一个属性名。在关系数据库中的一列称为一个字段,每个字段都有字段名称。例如,表1-1课程表中有5列,因此它有5个字段,其字段名称分别为课程编号、课程名称、学分、开课状态和课程大纲。
3.元组(记录)
二维表格中的一行称为一个元组,在关系数据库中的一行称为一条记录。例如,表1-1课程表中有9行,因此它有9条记录,其中的一行(如10600611,数据库应用,3.5,True, Microsoft Word文档)为一条记录。
4.分量
记录中的一个字段值称为一个分量。关系数据库要求每一个分量必须是不可分的数据项,即不允许表中还有表。例如,表1-2就不满足关系数据库的要求,因为“成绩”列包含了3个子列。要想满足关系数据库的要求,删掉“成绩”项,将“通用英语”“高等数学”和“大学物理”直接作为基本字段即可,如表1-3所示。
表1-2 不满足关系数据库的二维表格
表1-3 满足关系数据库的二维表格
5.域
字段的取值范围称为域。例如,选课成绩表中的“成绩”字段只能输入整数值,而且只能在[0,100]的范围。
6.主关键字
关系中能够唯一标识一条记录的字段集(一个字段或几个字段的组合)称为主关键字,也称为主键或主码。例如,在学生表中,学号可以唯一确定一个学生,因此“学号”字段就可以设置为主关键字。在课程表中,课程编号可以唯一确定一门课程,因此“课程编号”字段就可以设置为主关键字。在选课成绩表中,一个学生可以选修多门课程,就有可能出现多条学号相同,课程编号不同的记录,但学号和课程编号可以唯一确定一个学生某门课程的成绩,因此可以将它们组合在一起作为主关键字。
7.外部关键字
如果一个字段集不是所在关系的主关键字,而是另一个关系的主关键字,则该字段集称为外部关键字,也称外键或外码。例如,在选课成绩表中,“学号”字段单独使用时不是主键,但它是学生表的主键,因此,选课成绩表中的“学号”字段是一个外部关键字。同理,选课成绩表中的“课程编号”字段也是一个外部关键字。
1.3.2 关系的基本性质
一个关系就是一张二维表格,但并不是所有的二维表格都是关系,关系应具有以下7个性质。
(1)元组(记录)个数有限。
(2)元组(记录)均各不相同。
(3)元组(记录)次序可以交换。
(4)元组(记录)的分量是不可分的基本数据项。
(5)属性(字段)名各不相同。
(6)属性(字段)次序可以交换。
(7)属性(字段)分量具有与该属性相同的值域。
由关系的基本性质可知,二维表格的每一行都是唯一的,而且每一列的数据类型都是相同的。
1.3.3 关系完整性约束
关系完整性约束是为了保证数据库中数据的正确性和相容性,对关系模型提出的某种约束条件或规则。完整性包括域完整性、实体完整性、参照完整性和用户定义完整性。其中域完整性、实体完整性和参照完整性是关系模型必须满足的完整性约束条件,而用户定义完整性是针对具体应用领域的关系模型需要遵循的约束条件。
1.域完整性
域完整性用于保证关系中每个字段取值的合理性。例如,字段的数据类型、格式、值域范围、是否允许空值等。以字段的数据类型为例,如果数据类型是整型,那么该字段就不能取任何非整数的数值。
2.实体完整性
实体完整性是指关系的主关键字既不能重复也不能取空值,因此组成主关键字的每一个字段值都不能为空值。例如,学生表的主关键字“学号”字段的值既不能重复也不能为空值,课程表的主关键字“课程编号”字段的值同样既不能重复也不能为空值。
3.参照完整性
参照完整性是建立在两个关系上的约束条件。关系数据库中通常包含多个存在相互联系的关系,关系与关系之间的联系是通过一个关系中的主关键字和另一个关系中的外部关键字实现的。参照完整性要求一个关系中外部关键字的取值只能是与其关联的关系中主关键字的值或空值。例如,选课成绩表中含有与学生表的主键“学号”相对应的外键字段,则选课成绩表中“学号”字段的取值只能是在学生表中已有学号的值或空值。
4.用户定义完整性
用户定义完整性是根据应用环境的要求和实际需要,对某一具体应用所涉及的数据提出约束性条件。例如,学生表中“性别”字段的值只能是“男”或“女”,选课成绩表中“成绩”字段的值只能在[0,100]的范围内取值。
1.3.4 关系运算
关系运算有两类:一类是传统的集合运算(并、交、差、广义笛卡儿积运算等),另一类是专门的关系运算(选择运算、投影运算、连接运算等)。关系运算的结果也是一个关系。
1.传统的集合运算
1-5 传统的集合运算
传统的集合运算包括并、交、差和广义笛卡儿积运算。参与并、交、差运算的两个关系必须具有相同的结构。假设“喜欢唱歌的学生R”和“喜欢跳舞的学生S”是两个结构相同的关系,分别如表1-4和表1-5所示。下面基于这两个关系介绍集合的并、交、差运算。
表1-4 喜欢唱歌的学生R
表1-5 喜欢跳舞的学生S
(1)并运算。R和S是两个结构相同的关系,则R和S两个关系的并运算可以记作R∪S,运算结果是将两个关系的所有元组组成一个新的关系,若有相同的元组则只保留一个。喜欢唱歌的学生R和喜欢跳舞的学生S的并运算结果如表1-6所示。
表1-6 喜欢唱歌或喜欢跳舞的学生(R∪S)
(2)交运算。R和S是两个结构相同的关系,则R和S两个关系的交运算可以记作R∩S,运算结果是将两个关系中的公共元组组成一个新的关系。喜欢唱歌的学生 R 和喜欢跳舞的学生S的交运算结果如表1-7所示。
(3)差运算。R和S是两个结构相同的关系,则R和S两个关系的差运算可以记作R-S,运算结果是将属于R但不属于S的元组组成一个新的关系。喜欢唱歌的学生R和喜欢跳舞的学生S的差运算结果如表1-8所示。
表1-7 既喜欢唱歌又喜欢跳舞的学生(R∩S)
表1-8 喜欢唱歌但不喜欢跳舞的学生(R-S)
(4)广义笛卡儿积运算。假设R和S是两个结构不同的关系,R有m个属性,i个元组;S有n个属性,j个元组。则两个关系的广义笛卡儿积可以记作R×S,运算结果是一个具有m+n个属性,i×j个元组的关系。
假定学生R和课程S两个关系分别如表1-9和表1-10所示,则R×S的运算结果如表1-11所示。
表1-9 学生R
表1-10 课程S
表1-11 学生选修课程(R×S)
2.专门的关系运算
1-6 专门的关系运算
关系数据库中有3种专门的关系运算:选择运算、投影运算和连接运算。
(1)选择运算。选择运算是指从指定关系中选择出满足给定条件的元组组成一个新的关系。选择运算是一元运算,通常记作:σ<条件表达式>(R)。其中,σ是选择运算符。例如,在表1-4所示的“喜欢唱歌的学生R”关系中,选择出“英语2001”班级的学生,可以写为σ班级=“英语2001”(喜欢唱歌的学生R)。运算结果如表1-12所示。
表1-12 英语2001班喜欢唱歌的学生(s运算)
(2)投影运算。投影运算是指从指定关系中选择出某些属性组成一个新的关系。投影运算是一元运算,通常记作ΠA(R)。其中,Π是投影运算符,A是投影的属性或属性组。例如,在表1-4所示的“喜欢唱歌的学生R”关系中,投影出所有学生的学号和姓名,可以写为Π学号,姓名(喜欢唱歌的学生R)。运算结果如表1-13所示。
表1-13 喜欢唱歌的学生学号和姓名(∏运算)
(3)连接运算。连接运算是关系的横向结合,它把两个关系中满足连接条件的元组组成一个新的关系。连接运算是二元运算,通常记作R⋈S。其中,⋈是连接运算符。
连接分为内连接和外连接。内连接的运算结果仅包含符合连接条件的元组,最常用的内连接是等值连接和自然连接。外连接的运算结果不仅包含符合连接条件的元组,同时也会包含不符合连接条件的元组,外连接有3种:左外连接、右外连接和全外连接。
① 等值连接
等值连接就是从关系R和S的广义笛卡儿积中选取满足等值条件的元组组成一个新的关系。这个运算要求将两个关系的连接条件设置为属性值相等,运算结果包含两个关系的所有属性,也包括重复的属性。
例如,将表1-14所示的学生R与表1-15所示的选课成绩S两个关系进行等值连接运算,等值条件设置为关系R和S的“学号”属性值相等,则在关系R和S的广义笛卡儿积中只保留“学号”属性值相等的元组,运算结果如表1-16所示。
表1-14 学生R
表1-15 选课成绩S
表1-16 学生选课成绩单(等值连接)
② 自然连接
自然连接是按照公共属性值相等的条件进行连接,要求两个关系中必须有相同的属性,运算结果就是从关系R和S的广义笛卡儿积中选取公共属性满足等值条件的元组,并且在结果中去除重复的属性。
例如,将表1-14所示的学生R与表1-15所示的选课成绩S两个关系进行自然连接运算,其运算的结果如表1-17所示。结果中只有一个“学号”属性,自然连接实际上就是在等值连接的基础上去掉重复的属性。
表1-17 学生选课成绩单(自然连接)
提示
等值连接和自然连接都会舍弃不满足等值条件的元组,那如何能够不舍弃元组呢?外连接可以解决这个问题。
③ 左外连接
左外连接是在等值连接的基础上,保留左边关系R中要舍弃的元组,同时将右边关系S对应的属性值用Null(空值)代替。
例如,将表1-14所示的学生R与表1-15所示的选课成绩S两个关系进行左外连接运算,其运算结果如表1-18所示。左外连接能够保证其运算结果包含左边关系R中的所有元组。
表1-18 学生选课成绩单(左外连接)
④ 右外连接
右外连接是在等值连接的基础上,保留右边关系S中要舍弃的元组,同时将左边关系R对应的属性值用Null代替。
例如,将表1-14所示的学生R与表1-15所示的选课成绩S两个关系进行右外连接运算,其运算结果如表1-19所示。右外连接能够保证其运算结果包含右边关系S中的所有元组。
表1-19 学生选课成绩单(右外连接)
⑤ 全外连接
全外连接是在等值连接的基础上,同时保留关系R和S中要舍弃的元组,将其他属性值用Null代替。
例如,将表1-14所示的学生R与表1-15所示的选课成绩S两个关系进行全外连接运算,其运算结果如表1-20所示。全外连接能够保证其运算结果包含关系R和S中的所有元组。
表1-20 学生选课成绩单(全外连接)