关系数据模型是以集合论中的关系概念为基础发展起来的数据模型,其概念清晰、简洁,建立在严格的数学理论基础上,能够用统一的结构表示实体集和它们之间的联系,因此大多数据库都支持关系数据模型。
关系数据库采用关系模型作为数据的组织方式,在前面一节中介绍过数据模型由数据结构、数据操作和完整性约束三部分构成。关系模型的数据结构就是关系,关系不仅表示数据的存储,还表示数据之间的联系。一个关系就是一张二维表,接下来主要介绍关系模型的操作和关系模型的约束条件。
关系操作采用集合操作方式,即操作的对象和结果都是集合。关系模型中常用的操作包括:选择、投影、连接、除、并、交、差等查询操作和增加、删除、修改等更新操作两大部分,而查询是关系操作中最主要的部分。
关系模型中的关系操作通常用代数方式或逻辑方式来表示,分别称为关系代数和关系演算。关系代数和关系演算都是抽象的关系查询语言,简称关系数据语言,另外还有一种介于关系代数和关系演算之间的关系数据语言SQL。这些关系数据语言的共同点是:具有完备的表达能力,是非过程化的集合操作语言,功能强大且能够嵌入高级语言中使用。
关系模型允许定义三类完整性约束:实体完整性、参照完整性、用户定义的完整性。前两种完整性约束由关系数据库系统自动支持,而用户定义的完整性则由关系数据库提供完整性约束语言,用户利用该语言定义出约束条件,运行时由系统自动检查。
(1)实体完整性(Entity Integrity Constraint)。
实体完整性指关系中的每一个元组,其主键属性对应的各个分量不能为空值。
空值就是“不知道”的值,空值不等于数值零,也不等于空字符串,通常用NULL表示。例如学生选课情况表中某位学生选修了某门课程,这门课程还没有进行考核,则相应的成绩属性值暂时为空,待考核后再写上具体值。
因为主键能够唯一标识一个元组,如果主键值为空,该元组将不可标识,所以主键中的属性值不能为空值是数据库完整性的最基本要求。
(2)参照完整性约束(Reference Integrity Constraint)。
参照完整性约束要求关系中的外键要么是所关联关系中实际存在的元组,要么为空值。该约束是关系之间相关联的基本约束条件,它不允许引用不存在的实体。
例如学生选课情况表中的学号是学生表中的主键,是选课情况表中的外键,那么选课情况表中学号的取值只能是学生表中学号的取值之一,表示该学生选修某门课程;或者取空值,说明没有学生选该门课程。选课情况表中的学号不能取其他值,否则会出现“查无此人”的情况。
(3)用户定义的完整性约束(User defined Integrity Constraint)。
用户定义的完整性约束是针对具体数据环境与应用环境由用户具体设置的约束,它反映了具体应用中数据的语义要求。例如学生的性别必须为男或女,考核成绩限制在0~100之间等。
DBMS提供了定义和检验这类完整性约束规则的机制,而不必由应用程序来处理。
关系数据库是关系的集合,而关系是有严格数学定义的,因此关系数据库是建立在数学理论的基础之上,有很多数学理论可以表示关系模型的数据操作,其中最为著名的是关系代数和关系演算。关系代数是用关系的运算来表达查询要求的方式,关系演算是用谓词来表达查询要求的方式,二者在功能上是等价的,这里我们主要介绍关系代数。
关系代数的运算分为两类:传统的集合运算和专门的关系运算。
传统的集合运算主要有并、差、交、广义笛卡儿积。这类运算将关系看成元组的集合,其操作是从行的角度进行的。
传统的集合运算除广义笛卡儿积外,其他运算对参加操作的关系有如下两个要求:关系R和关系S有相同的属性个数,均有n列属性;关系R的第i个属性和关系S的第i个属性取自同一个域(i=1,2,…,n),如表6-4所示。
表6-4 关系示例
学 号 姓名 性别 所在系 20060721 王甜 女 经管 20060205 应杰 男 机械 20060426 周忡 男 电子
学 号 |
姓名 |
性别 |
所在系 |
20060609 |
孙英 |
女 |
计算机 |
20060426 |
周忡 |
男 |
电子 |
20040430 |
刘民 |
男 |
电子 |
下面分别介绍4种传统的集合运算。
(1)并运算:关系R和关系S的所有元组合并,再删去重复的元组,组成一个新关系,称为R和S的并,记为R∪S。其结果仍然具有n列属性,如表6-5所示。
(2)差运算:在关系R中删去与关系S中相同的元组,组成一个新关系,记为R-S。其结果仍然具有n列属性,如表6-5所示。
(3)交运算:在两个关系R和S中取相同的元组组成一个新关系,记为R∩S。如果两个关系没有相同的元组,那么R∩S为空。其结果仍然具有n列属性,如表6-5所示。
表6-5 并、差、交运算示例
R∪S
学 号 |
姓 名 |
性 别 |
所 在 系 |
20060609 |
孙英 |
女 |
计算机 |
20060426 |
周忡 |
男 |
电子 |
20040430 |
刘民 |
男 |
电子 |
20060721 |
王甜 |
女 |
经管 |
20060205 |
应杰 |
男 |
机械 |
R-S
学 号 |
姓 名 |
性 别 |
所 在 系 |
20060609 |
孙英 |
女 |
计算机 |
20040430 |
刘民 |
男 |
电子 |
R∩S
学 号 |
姓 名 |
性 别 |
所 在 系 |
20060426 |
周忡 |
男 |
电子 |
(4)广义笛卡儿积运算:关系R有n列属性,关系S有m列属性,则R和S的广义笛卡儿积是一个(n+m)列的元组集合,元组的前n列是R的一个元组,后m列是S的一个元组。若R有r个元组,S有s个元组,则R和S的广义笛卡儿积有r′s个元组。R和S的广义笛卡儿积记为R′S,如表6-6所示。
表6-6 积运算示例
R
学 号 |
姓 名 |
性 别 |
所 在 系 |
20060609 |
孙英 |
女 |
计算机 |
20060426 |
周忡 |
男 |
电子 |
20040430 |
刘民 |
男 |
电子 |
S
课程编号 |
课程名称 |
学 分 |
110601 |
计算机文化基础 |
2 |
110602 |
数据库原理 |
3 |
R′S
学号 |
姓名 |
性别 |
所在系 |
课程编号 |
课程名称 |
学分 |
060609 |
孙英 |
女 |
计算机 |
110601 |
计算机文化基础 |
2 |
060609 |
孙英 |
女 |
计算机 |
110602 |
数据库原理 |
3 |
20060426 |
周忡 |
男 |
电子 |
110601 |
计算机文化基础 |
2 |
20060426 |
周忡 |
男 |
电子 |
110602 |
数据库原理 |
3 |
20040430 |
刘民 |
男 |
电子 |
110601 |
计算机文化基础 |
2 |
20040430 |
刘民 |
男 |
电子 |
110602 |
数据库原理 |
3 |
专门的关系运算包括选择、投影、连接、除等。这类运算不仅涉及行,还涉及列。
(1)选择运算:指在关系中选择符合条件的元组,记为sF?,其中s为选择运算符,
sF?表示从R中选出满足布尔表达式F为真的元组所构成的关系。该运算是从行的角度进行的操作。
例如从表6-4所示的关系中查找电子系学生的情况:s所在系=’电子’?。结果如表6-7所示。
表6-7 选择运算示例
学 号 |
姓 名 |
性 别 |
所 在 系 |
20060426 |
周忡 |
男 |
电子 |
20040430 |
刘民 |
男 |
电子 |
(2)投影运算:从关系中选出若干属性列组成新的关系,记为pA(R),其中π为投影运算符,A为R的属性子集。该运算是从列的角度进行的操作,投影之后不仅属性列减少了,而且根据实体完整性规则,相同的元组也被取消了。
例如选取表6-4所示的关系中的所有姓名和所在系:p姓名,所在系(R)或者p2,4(R)。结果如表6-8所示。
表6-8 投影运算示例
姓 名 |
孙英 |
周忡 |
刘民 |
所 在 系 |
计算机 |
电子 |
电子 |
(3)连接运算:指从两个关系的广义笛卡儿积中选择符合条件的元组,记为R S,其中|x|是连接运算符,A、B分别为关系R和S上列数相同并且可比较的属性组,θ是算数比较符,R.AqS.B是连接条件。
连接运算中有两种最为常用的连接如下。
等值连接:算术运算符q是等号“=”,则称为等值连接,记为RS。
自然连接:一种特殊的等值连接,要求两个关系中进行比较的分量必须是相同的属性组,并且要在结果中将重复的属性去掉,记为R|x|S。
连接运算一般是从行的角度进行的操作,但自然连接是同时从行和列的角度进行的操作。表6-9表示的是关系R和S进行自然连接的结果。
表6-9 连接运算示例
R
A |
B |
C |
a1 |
b1 |
3 |
a1 |
b2 |
5 |
a2 |
b2 |
2 |
a3 |
b1 |
8 |
S
B |
C |
D |
b1 |
3 |
d1 |
b2 |
4 |
d2 |
b2 |
2 |
d1 |
b1 |
8 |
d2 |
R|x|S
A |
B |
C |
D |
a1 |
b1 |
3 |
d1 |
a2 |
b2 |
2 |
d1 |
a3 |
b1 |
8 |
d2 |
(4)除运算:设有关系R(X,Y)和S(Y),R中的Y与S中的Y可以有不同的属性名,但必须出自相同的域集。R与S的除运算得到一个新的关系P(X),P是R中满足下列条件的元组在X属性上的投影:除运算结果中的任一元组与S中每个元组所构成的有序组均出现在关系R中。R能被S除的充分必要条件是:R中的属性列包含S中的所有属性;R中有一些属性不出现在S中。如果关系R有n个属性列,关系S有m个属性列,并且n>m>0,那么除运算的结果是一个有(n-m)列的新关系。除运算记为R?S,如表6-10所示。
表6-10 除运算示例
在上述运算中最常用的是并运算、差运算、选择运算、投影运算及自然连接运算。