···························································· 第3 章 chapter3 关系数据库 本章学习重点: . 关系完整性。 . 关系运算。 关系数据库系统是支持关系模型的数据库系统。关系数据模型由关系数据结构、关 系操作集合和关系完整性约束3部分组成。在关系数据库设计中,为使其数据模型合理 可靠、简单实用,需要使用关系数据库的规范化设计理论。 本章介绍关系数据库的基本概念,围绕关系数据模型的三要素展开,利用集合、代数 等抽象的知识,深刻而透彻地介绍关系数据结构、关系数据库完整性及关系数据库操作 等内容。 3.1 关系数据结构 关系模型的数据结构非常简单。在关系数据模型中,现实世界的实体以及实体间的 各种联系均用关系来表示。在用户看来,关系模型中数据的逻辑结构是一张二维表。 3.1.1 关系的定义和性质 关系就是一张二维表,但并不是任何二维表都叫作关系,人们不能把日常生活中所 用的任何表格都当成一个关系直接存放到数据库中。 关系数据库要求其中的关系必须具有以下性质。 (1)在同一个关系中,同一个列的数据必须是同一种数据类型。 (2)在同一个关系中,不同列的数据可以是同一种数据类型,但各属性的名称都必须 互不相同。 (3)同一个关系中,任意两个元组都不能完全相同。 (4)在一个关系中,列的次序无关紧要,即列的排列顺序是不分先后的。 (5)在一个关系中,元组的位置无关紧要,即排行不分先后,可以任意交换两行的 位置。 (6)关系中的每个属性必须是单值,即不可再分,这就要求关系的结构不能嵌套。这 ◆ 第 3 章 关系数据库25 是关系应满足的最基本的条件。 【例3-1】有学生成绩表如表3-1所示。这种表格就不是关系,应对其结构进行修 改,才能成为数据库中的关系。对于该复合表,可以把它转化成一个关系,即学生成绩关 系(学号,姓名,性别,年龄,班级号,数学,语文,英语); 也可以转化成两个关系,即学生关 系(学号,姓名,性别,年龄,班级号)和成绩关系(学号,数学,语文,英语), 如表3-2和表3-3 所示。 表3- 1 学生成绩表 学号姓名性别年龄班级号 成绩 数学语文英语 201501 张鹏男20 01 77 81 85 201502 王宏女19 01 78 82 86 201503 赵飞男21 02 79 83 87 201504 黄明男19 02 80 84 88 表3- 2 学生关系表 学号姓名性别年龄班级号 201501 张鹏男20 01 201502 王宏女19 01 201503 赵飞男21 02 201504 黄明男19 02 表3- 3 成绩关系表 学号数学语文英语 201501 77 81 85 201502 78 82 86 201503 79 83 87 201504 80 84 88 关系是一种规范化了的二维表格,是一个属性数目相同的元组的集合。集合中的元 素是元组,每个元组的属性数目应该相同。 在关系数据模型中,实体以及实体之间的联系都是用关系来表示的,它是通过关系 当中的冗余属性(一般是主码和外码的关系)来实现实体之间的联系。例3-1中的学生关 系和成绩关系就是通过“学号”属性实现的一对一联系,即一个学生只有一行成绩,而一 行成绩也只属于一个学生。 2 6 ◆S QL Server 2019 实用教程 3.1.2 关系模式 关系数据库中,关系模式(relationschema)是型,关系是值;关系模式是对关系的描 述。因此关系模式必须指出这个元组集合的结构,即它由哪些属性构成,这些属性来自 哪些域,以及属性与域之间的映像关系。 关系模式的定义:关系的描述称为关系模式。一个关系模式应是一个五元组。关系 模式可以形式化地表示为R(U,D,dom,F)。 其中,R是关系名;U 是组成该关系的属性名集合;D 是属性组U 中属性所来自的 域;dom 是属性间域的映像集合;F是属性间的数据依赖关系集合。 关系模式通常可以简记为R(U)或R(A1,A2,…,An)。 其中,R是关系名,A1,A2,…,An为属性名,域名及属性间域的映像,常常直接说明 为属性的类型、长度。 关系实际上就是关系模式在某一时刻的状态或内容。关系模式是静态的、稳定的, 而关系是动态的、随时间不断变化的,因为关系操作在不断地更新着数据库中的数据。 可以把关系模式和关系统称为关系。 3.1.3 关系数据库 关系数据库就是采用关系模型的数据库。关系数据库有型和值的区别,关系数据库 的型是指对关系数据库的描述,它包括若干关系模式;关系数据库的值是这些关系模式 在某一时刻对应的关系的集合。 在一个给定的应用领域中,所有实体及实体之间联系的关系的集合构成一个关系数 据库。关系数据库的型也称为关系数据库模式,是对关系数据库的描述,它包括若干域 的定义以及在这些域上定义的若干关系模式。关系数据库的值是这些关系模式在某一 时刻对应的关系的集合,通常称为关系数据库。 3.2 关系的完整性 数据完整性是指关系模型中数据的正确性与一致性。关系模型允许定义3类完整 性规则:实体完整性规则、参照完整性规则和用户定义的完整性规则。 1.实体完整性规则 实体完整性要求关系的主码具有唯一性且主码中的每个属性都不能取空值。例如, 学生表中的学号属性应具有唯一性且不能为空。 关系模型必须满足实体完整性的原因如下。 (1)现实世界中的实体和实体间的联系都是可区分的,即它们具有某种唯一性标识。 相应地,关系模型中以主码作为唯一性标识。 (2)空值就是“不知道”或“无意义”的值。主键取空值,就说明存在某个不可标识的 第◆3 章 关系数据库2 7 实体,这与(1)矛盾。 2.参照完整性规则 设F是基本关系R的一个或一组属性,但不是关系R的码,如果F与基本关系S的 主码Ks相对应,则称F是基本关系R的外码,并称基本关系R为参照关系(referencing relation),基本关系S为被参照关系(referencedrelation)或目标关系(targetrelation)。 关系R和S也可以是相同的关系,即自身参照。 目标关系S的主码Ks和参照关系的外码F必须定义在同一个(或一组)域上。参照 完整性规则就是定义外码与主码之间的引用规则。 参照完整性规则:若属性(或属性组)F是基本关系R的外码,它与基本关系S的主 码Ks相对应(基本关系R和S可能是相同的关系),则对于R中每个元组在F上的值必 须为空值(F的每个属性值均为空值);或者等于S中某个元组的主码值。 【例3-2】 学生实体和系实体可以用下面的关系表示,其中主码用下画线标识。 学生(学号,姓名,性别,系号) 系(系号,系名) 学生关系的“系号”与系关系的“系号”相对应,因此,“系号”属性是学生关系的外码, 是系关系的主码。这里系关系是被参照关系,学生关系为参照关系。学生关系中的每个 元组的“系号”属性只能取下面两类值:空值或系关系中已经存在的值。 3.用户定义的完整性规则 用户定义的完整性规则由用户根据实际情况对数据库中数据的内容进行的规定,也 称为域完整性规则。通过这些规则限制数据库只接受符合完整性约束条件的数据值,不 接受违反约束条件的数据,从而保证数据库的中数据的有效性和可靠性。例如,学生表 中的性别数据只能是男和女,选课表中的成绩数据为1~100等。 关系完整性的作用就是要保证数据库中的数据是正确的。通过在数据模型中定义 实体完整性规则、参照完整性规则和用户定义的完整性规则,数据库管理系统将检查和 维护数据库中数据的完整性。 3.3 关系运算 关系代数是以关系为运算对象的一组高级运算的集合;关系代数是一种抽象的查询 语言,是关系数据操纵语言的一种传统表达方式。关系代数的运算对象是关系,运算结 果也是关系。 关系代数中的操作可以分为如下两类。 (1)传统的集合操作:笛卡儿积、并、差、交。 (2)专门的关系操作:投影(对关系进行垂直分割)、选择(水平分割)、连接(关系的 结合)、除法(笛卡儿积的逆运算)等。 2 8 ◆S QL Server 2019 实用教程 3.3.1 传统的集合运算 传统的关系运算包括笛卡儿积(×)、并(∪)、差(-)和交(∩)。 1.笛卡儿积(Cartesianproduct) 设关系R和S的属性个数分别为r和s,定义R和S的笛卡儿积是一个(r+s)元的 元组集合,每个元组的前r个分量(属性值)来自R的一个元组,后s个分量来自S的一个 元组,记为R×S。形式化定义如下: R×S={t|t=∧tr∈R∧ts∈S} 其中,tr、ts 中r和s为上标。若R有m 个元组,S有n个元组,则R×S有m×n个元组。 实际操作时,可从R的第一个元组开始,依次与S的每个元组组合,然后对R的下一 个元组进行同样的操作,直至R的最后一个元组也进行完同样的操作,即可得到R×S的 全部元组。 【例3-3】 已知关系R和关系S如表3-4和表3-5所示,求R和S的笛卡儿积。 表3-4 关系R M N m1 n1 m2 n2 m3 n3 表3-5 关系S X Y x1 y1 x2 y2 x3 y3 R和S的笛卡儿积结果如表3-6所示。 表3-6 R 和S的笛卡儿积 M N X Y m1 n1 x1 y1 m1 n1 x2 y2 m1 n1 x3 y3 m2 n2 x1 y1 m2 n2 x2 y2 m2 n2 x3 y3 m3 n3 x1 y1 m3 n3 x2 y2 m3 n3 x3 y3 ◆ 第 3 章 关系数据库29 2.并(union) 设关系R和S具有相同的关系模式,R和S是n元关系,R和S的并是由属于R或 属于S的元组构成的集合,记为R∪S 。形式定义如下: R∪S={|t∈R∨t∈S} 其含义为任取元组t,当且仅当t属于R或 tt属于S时, t属于R∪S 。R∪S是一个n元 关系。关系的并操作对应于关系的插入或添加记录的操作,俗称为+操作,是关系代数 的基本操作。 【例3-4】已知关系R和S如表3-7和表3-8所示,求R和S的并 。 R和S的并结果如表3-9所示 。 表3- 7 关系 R M N K m1 n2 k3 m4 n5 k6 m7 n8 k9 表3- 8 关系 S M N K m1 n2 k3 m4 n5 k6 m10 n11 k12 表3- 9 R 和S的并结果 M N K m1 n2 k3 m4 n5 k6 m7 n8 k9 m10 n11 k12 注意:并运算会取消某些元组(避免重复行)。 3.差(diference) 关系R和S具有相同的关系模式,R和S是n元关系,R和S的差是由属于R但不 属于S的元组构成的集合,记为R-S。形式定义如下: R-St|t∈R∧t.S} 其含义为当且仅当t属于R并且不属于 = S{ 时,t属于R-S。R-S也是一个n元关系。 关系的差操作对应于关系的删除记录的操作,俗称为-操作,是关系代数的基本操作。 3 0 ◆S QL Server 2019 实用教程 【例3-5】 已知关系R和S如表3-7和表3-8所示,求R和S的差。 R和S的差结果如表3-10所示。 表3-10 R-S M N K m7 n8 k9 4.交(intersection) 关系R和S具有相同的关系模式,R和S是n元关系,R和S的交是由属于R且属 于S是元组构成的集合,记为R∩S。形式定义如下: R∩S={t|t∈R∧t∈S} 其含义为任取元组t,当且仅当t既属于R又属于S时,t属于R∩S。R∩S是一个n元 关系。关 系的交操作对应于寻找两关系共有记录的操作,是一种关系查询操作。 【例3-6】 已知关系R和S如表3-7和表3-8所示,求R和S的交。 R和S的交结果如表3-11所示。 表3-11 R∩S M N K m1 n2 k3 m4 n5 k6 3.3.2 专门的关系运算 专门的关系运算包括选择、投影、连接等。 1.选择(selection) 选择运算是在关系R中选择满足给定条件的诸元组,记作 σF(R)={t|t∈R∧F(t)='真'} 其中,F表示选择条件,它是一个逻辑表达式,取逻辑值“真”或“假”。逻辑表达式F的基 本形式为X1θY1[ΦX2θY2]…。其中,θ表示比较运算符,它可以是>、>=、<、<=、= 图3-1 σ运算示意图 或<>。X1、Y1 等是属性名或常量或简单函数。属性名也可以用它的序号来代替。Φ 表示逻辑运算符,它可以是..、∧或∨。[]表示任选项, 即[]中的部分可要可不要,…表示上述格式可以重复 下去。因 此,选择运算实际上是从关系R 中选取使逻辑表 达式F为真的元组。这是从行的角度进行的运算,如 图3-1所示。 ◆ 第 3 章 关系数据库31 接下来举例说明选择运算的操作。 有学生表(student)如表3-12 所示,课程表(course)如表3-13 所示,成绩表(score)如 表3-14 所示。 表3学生表( -12 student) 学号姓名性别年龄专业 20154103101 王鹏男18 软件工程 20154103102 张超女17 大数据 20154103103 刘明浩男19 计算机科学与技术 20154103104 李明男18 软件工程 20154103105 王晓女18 大数据 表3-13 课程表(course) 课程号课程名学分 20001 Java语言3 20002 C+ + 4 20003 数据库3 20004 操作系统3 20005 Web设计2 20006 算法分析4 20007 C程序设计3 表3成绩表(e) -14 scor 学号课程号成绩 20154103101 20001 67 20154103101 20001 78 20154103102 20004 98 20154103102 20005 56 20154103103 20005 87 20154103103 20002 68 【例3-7】查询软件工程专业学生的信息。 σ专业=‘软件工程’(student) 或σ5=‘软件工程’(student), 结果如表3-15 所示。 ◆ 32 S QL Server 2019 实用教程 表3-15 查询软件工程专业学生的信息 学号姓名性别年龄专业 20154103101 王鹏男18 软件工程 20154103104 李明男18 软件工程 【例3-8】查询年龄大于17 的女同学的信息。 σ年龄>17∧ 性别=‘女’(student) 或σ4>17∧3=‘女’(student), 结果如表3-16 所示。 表3-16 查询年龄大于17 的女同学的信息 学号姓名性别年龄专业 20154103105 王晓女18 大数据 2. 投影(projection) 关系R上的投影是从R中选择出若干属性列组成新的关系。记 作 πA(R)={A]|t∈R} t[ 其中,A为R中的属性列。投影之后不仅取消了原关系中的某些列,而且还可能取消某 些元组,因为取消了某些属性列后,就可能出现重复行,应取消这些完全相同的行。 这个操作是对一个关系进行垂直分割,投影运算示意图如图3-2所示。 图3- 2 投影运算示意图 【例3-9】查询学生的学号和姓名。 π学号,姓名(student) 或π1,2(student), 结果如表3-17 所示。 表3-17 查询学生的学号和姓名 学号 20154103101 20154103102 20154103103 20154103104 20154103105 姓名 王鹏 张超 刘明浩 李明 王晓 【例3-10 】查询课程表中的课程号和课程名。 π课程号,课程名(course) 或π1,2(course), 结果如表3-18 所示。 ◆ 第 3 章 关系数据库33 表3-18 查询课程号和课程名 课程号 20001 20002 20003 20004 20005 20006 20007 课程名 Java语言 C+ + 数据库 操作系统 Web设计 算法分析 C程序设计 3. 连接(n) joi RAθBS=σAθB(R×S)trt|tr∈R∧ts∈S∧trθts 其中,A是R的属性组(A1,A2,…,Ak),B(s) 是S的属性组(B1,B2,…,BK);AθB 的实际形 式为A1θB1∧A2θB2∧…∧AkθBk;Ai和Bi=2,…,不一定同名,但必须可比;θ∈ {>,<,≤,≥,=,≠}。 i(1,k) 1)连接运算的含义 连接也称为θ连接,是从两个关系的笛卡儿积中选取满足某规定条件的全体元组, 形成一个新的关系,记为 ={[A][B]} 连接操作是从行和列的角度进行运算,连接运算示意图如图3-3所示。 图3- 3 连接运算示意图 2)连接运算的过程 确定结果中的属性列,然后确定参与比较的属性列,最后逐一取R中的元组分别和 S中与其符合比较关系的元组进行拼接。 3)两类常用连接运算。 (1)等值连接(equal-join)。θ为=的连接运算称为等值连接,它是从关系R与S的 笛卡儿积中选取A、B属性值相等的那些元组。等值连接为 RAθBS={[A][B]} tt|tr∈R∧ts∈S∧t=t (2)自然连接(naturaljo殊的连接,若A、B是相同的属 性组,就可以在结果中把重复的属性去掉。这种去掉了重复属性的等值连接称为自然连 接。自然连接可记作in)。(r) 自(s) 然连接是一种特(r) 等值(s) ◆ 34 S QL Server 2019 实用教程 ={[B][B]} R Stt|tr∈R∧ts∈S∧tr=ts接下来举例说明以上连接类型。(s) (r) 【例3-11 】已知关系R和关系S如表3-19 和表3-20 所示,求RN=18∧年龄<=19(student)) 习  题 一、选择题 1.关系模式的候选关键字可以有1个或多个,而主关键字有( )。 A.多个B.0个C.1个D.1个或多个 2.采用二维表格结构表达实体型及实体间联系的数据模型是( )。 A.层次模型B.网状模型 C.关系模型D.实体联系模型 3.同一个关系模型的任意两个元组值( )。 A.不能完全相同B.可以完全相同 C.必须完全相同D.以上都不是 4.参照完整性规则:若属性(或属性组)F是基本关系R的外码,它与基本关系S的 主码Ks相对应,则对于R中每个元组在F上的值( )。 A.只能取空值 B.只能等于S中某个元组的主码值 C.或者为空值,或者等于S中某个元组的主码值 D.可以取任意值 5.学生实体和系别实体如下,其中主码用下画线标识: 学生(学号,姓名,年龄,系别号) 系别(系别号,系名) 则学生关系的外码是( )。 A.学号B.系别号C.姓名D.年龄 ◆ 36 S QL Server 2019 实用教程 6. 设关系:职工(职工号,姓名,年龄,性别), 下列可以求出年龄大于50 岁的职工信 息的关系代数是( )。 A.σ年龄>50(职工) B.Π年龄>50(职工) C.σ50(职工) D.Π50(职工) 7. 关系R和关系S的并运算是( )。 A. 由关系R和关系S的所有元组合并组成的集合,再删除重复的元组 B. 由属于R而不属于S的所有元组组成的集合 C. 由既属于R又属于S的元组组成的集合 D. 由R和S的元组连接组成的集合 二、填空题 关系R中有m个元组,S中有n个元组,则R×S 中元组的个数为( )。()(.) 规则是指若属性A是基本关系R的主属性,则属性A不能取空值。 .关(.) 系模型的3类完整性规则是实体完整性规则、参照完整性规则、( )。 在专门关系运算中,从表中按照要求取出指定属性的操作称为( )。 运算。 .关(.) 系代数中4类传统的集合运算分别为( )、差运算、交运算和广义笛卡儿积