第2章 关系数据库
一、选择题
1在关系中能唯一标识元组的最小属性集称为( )。
A.外码
B.候选码
C.主码
D.超码
【答案】B
【解析】超码(Super Key)是关系中能唯一标识每个元组的属性或属性组(集),一个关系可能有多个超码。
候选码(Candidate Key)是关系中能唯一标识每个元组的最小属性或属性组,一个关系可能有多个候选码;主码(Primary Key)则是从候选码中选择一个,作为该关系的主码。数据库系统将按主码标识和排序每个元组。一个关系在任一时刻至多只能有一个主码,但在不同时刻可以指定不同的候选码作为主码。
外码(Foreign Key)则是在关系R1中的属性或属性组,若在另一个关系R2中作为主码使用,则称该属性或属性组为R1的外码。R1的外码和R2中的主码必须定义在相同的域上,允许使用不同的属性名。
2对关系数据库来说,下面哪些说法是错误的( )。
A.每一列的分量是同一种类型数据,来自同一个域
B.不同列的数据可以出自同一个域
C.行的顺序可以任意交换,但列的顺序不能任意交换
D.关系中的任意两个元组不能完全相同
【答案】C
【解析】基本关系具有以下6条性质:
①列是同质的,即每一列中的分量是同一类型的数据,来自同一个域。
②不同的列可出自同一个域,但是具有不同的列名(属性名)。
③列的顺序无所谓,即列的次序可以任意交换。
④任意两个元组的候选码不能相同。
⑤行的顺序无所谓,即行的次序可以任意交换。
⑥分量必须取原子值,即每一个分量都必须是不可分的数据项。
3关于关系的完整性约束条件,下列说法错误的是( )。
A.在关系模型中,允许定义实体完整性、参照完整性和用户定义的完整性
B.用户完整性应该由关系系统自动支持
C.参照完整性可由用户或系统定义
D.用户定义的完整性是应用领域需要遵循的约束条件
【答案】B
【解析】关系完整性有三类:实体完整性、参照完整性和用户定义的完整性。其中实体完整性保证每一个数据(实体)是可识别的,参照完整性保证当数据与数据之间有联系时,这种联系造成的数据取值的制约;用户定义的完整性保证每一个数据的取值在应用领域内是合理的。其中,实体完整性和参照完整性是关系模型必须满足的完整性约束条件,被称为关系的两个不变性。也就是说,只要是关系数据库系统就应该自动支持实体完整性和参照完整性。
4关系代数中的⋈连接操作由( )操作组合而成。
A.σ和π
B.σ和×
C.π、σ和×
D.π和×
【答案】B
【解析】连接又称为θ连接。它是从关系R和S的笛卡尔积中选取属性值之间满足一定条件的元组。因此,该运算首先计算R和S的笛卡尔积,然后再从得到的结果集合中选择属性值之间满足一定条件的元组。该运算得到结果是R和S的笛卡尔积的子集,其关系模式同R和S的笛卡尔积一样。
5设关系R(A,B,C)和S(B,C,D),下列各关系代数表达式不成立的是( )。
A.R÷S
B.πB(R)∪πB(S)
C.R∩S
D.R⋈S
【答案】C
【解析】R∩S运算也要求R和S具有相同的属性。
6有两个关系R和S,分别包含15个和10个元组,则在R∪S、R-S、R∩S中不可能出现的元组数目情况是( )。
A.15,5,10
B.18,7,7
C.21,11,4
D.25,15,0
【答案】B
【解析】①A项的情形:若R∩S为10个元组,那么R∪S为15个元组、R-S为5个元组是正确的。
②B项的情形:若R∩S为7个元组,那么R∪S应为18个元组、R-S应为8个元组。
③C项的情形:若R∩S为4个元组,那么R∪S为21个元组、R-S为11个元组是正确的。
④D项的情形:若R∩S为0个元组,那么R∪S为25个元组、R-S为15个元组是正确的。
7关系R与关系S只有一个公共属性,T1是R与S等值连接的结果,T2是R与S自然连接的结果,下列叙述正确的是( )。
A.T1的属性个数等于T2的属性个数
B.T1的属性个数小于T2的属性个数
C.T1的属性个数大于或等于T2的属性个数
D.T1的属性个数大于T2的属性个数
【答案】D
【解析】连接中有两种最重要也最常用的连接,它们分别是等值连接和自然连接。等值连接就是比较运算符θ为“=”的连接运算;自然连接是一种特殊的等值连接,它要求两个关系中进行比较的分量必须是相同的属性或属性组合,并且在结果中把重复的属性去掉。也就是说,自然连接是在笛卡尔积的结果中选择相同属性值相等的那些元组,最后还要去掉重复的属性。因此,等值连接结果的属性个数应该大于自然连接结果的属性个数。
8设关系R(A,B,C)和S(B,C,D),下列各关系代数表达式不成立的是( )。
A.πA(R)⋈πD(S)
B.R∪S
C.πB(R)∩πB(S)
D.R⋈S
【答案】B
【解析】A项、D项都是执行自行连接运算,当两个关系无公共属性时,自然连接就等同于笛卡尔积运算,因此,A项、D项都是正确的。关系的并、交、差运算要求两个关系是相容关系,即两个关系属性个数相等,且对应的属性来自同一个值域,R与S不是相容关系,所以B项是错误的。
9有关系R(X,Y,Z),主键=X;S(W,X),主键W,外键=X,参照R的属性X,关系R和关系S的元组如下所示。指出关系S中违反关系完整性规则的元组是( )。
A.(1,2)
B.(2,null)
C.(3,3)
D.(4,1)
【答案】C
【解析】关系完整性有三类:实体完整性、参照完整性和用户自定义的完整性。其中参照完整性保证当数据与数据之间有联系时,这种联系造成数据取值的制约。参照完整性规则是:若属性(或属性组)F是基本关系R的外码,它与基本关系S的主码Ks相对。
对于S关系而言,X是该关系的外码,它与R关系的主码X相对应。根据参照完整性规则,S关系中X的取值或者取空值或者等于R中X的某个分量值。因此,S关系中X的分量值为3这一元组就是违背参照完整性规则的元组。
10关系运算以关系代数为理论基础,关系代数的最基本操作是并、差、笛卡尔积、( )。
A.投影、连接
B.连接、选择
C.选择、投影
D.交、选择
【答案】C
【解析】关系代数是一种抽象的查询语言,它通过对关系的运算来表达查询要求。关系代数的运算共有8种,可分两类:传统的集合运算和专门的关系运算一传统的集合运算有:交、并、差、笛卡尔积,专门的关系运算有:选择、投影、连接和除。其中,并、差、笛卡尔积、选择和投影5种运算是基本运算,其他3种运算均可以用这5种基本运算来表达。
二、填空题
1关系模型由( )、( )和( )组成。
【答案】数据结构;数据操作;完整性规则
2关系代数运算中,基本的运算是( )、( )、( )、( )和( )。
【答案】并;差;笛卡尔积;投影;选择
3关系数据库中基于数学的两类运算是( )和( )。
【答案】关系代数;关系演算
4已知系(系编号,系名称,系主任,电话,地点)和学生(学号,姓名,性别,入学日期,专业,系编号)两个关系,系关系的主码是( ),系关系的外码是( ),学生关系的主码是( ),外码是( )。
【答案】系编号;无;学号;系编号
三、判断题
1在一个关系中,不同的列可以对应同一个域,但必须具有不同的列名。( )
【答案】√
【解析】例如一个关系中有平时分数、期末考试分数和总分属性,它们的域都是相同的。
2关系中任何一列的属性取值是不可再分的数据项,可取自不同域中的数据。( )
【答案】×
【解析】关系中任何一列的属性取值是不可再分的数据项,只能取自同一域中的数据。
3一个关系中不可能出现两个完全相同的元组是由实体完整性规则确定的。( )
【答案】×
【解析】一个关系中不可能出现两个完全相同的元组,这是由关系的定义和特点确定的。
4投影操作是对关系表进行水平方向的分割。( )
【答案】×
【解析】投影操作是对关系表进行垂直方向的分割。
5有两个关系R和S,分别包含15个和10个元组,则在R∪S、R-S、R∩S中可能出现的一种元组数目情况是18、7、7。( )
【答案】×
【解析】因为若R∪S元组数目为18,表示R和S中有25-18=7个相同元组,R∩S的元组数目为7,但R-S的元组数应为15-7=8个。
四、问答题
1设有如图2-1所示的关系R和S,计算:
(1)R1=R-S
(2)R2=R∪S
(3)R3=R∩S
(4)R4=R×S
图2-1 关系R和S
答:本题各小题的结果如图2-2所示。
图2-2 计算结果
2设有如图2-3所示的3个关系S、C和SC,将下列关系代数表达式用汉语表示出来,并求其结果。
图2-3 关系S、C和SC
(1)π2,6,7(б籍贯=‘上海’(S⋈SC))
(2)π2,6,7(S⋈SC⋈б课程=‘操作系统’(C))
(3)π2,3(S⋈(π1,2(SC)÷π1(C)))
答:(1)检索籍贯为上海的学生的姓名、选修的课程号和成绩,其结果为图2-4中的R1。
(2)检索选修操作系统的学生姓名、课程号和成绩,其结果为图2-4中的R2。
(3)检索选修了全部课程的=学生姓名和年龄,其结果为图2-4中的R3。
图2-4 关系R1、R2和R3
3设有如图2-5所示的关系S、SC和C,试用关系代数表达式表示下列查询语句:
图2-5 关系S、C和SC
(1)检索程军老师所授课程的课程号(C#)和课程名(CNAME)。
(2)检索年龄大于21的男学生学号(S#)和姓名(SNAME)。
(3)检索至少选修程军老师所授全部课程的学生姓名(SNAME)。
(4)检索李强同学不学课程的课程号(C#)。
(5)检索至少选修两门课程的学生学号(S#)。
(6)检索全部学生都选修的课程的课程号(C#)和课程名(CNAME)。
(7)检索选修课程包含程军老师所授课程之一的学生学号(S#)。
(8)检索选修课程号为k1和k5的学生学号(S#)。
(9)检索选修全部课程的学生姓名(SNAME)。
(10)检索选修课程包含学号为2的学生所修课程的学生学号(S#)。
(11)检索选修课程名为C语言的学生学号(S#)和姓名(SNAME)。
答:本题各个查询操作对应的关系代数表达式表示如下:
(1)πC#,CNAME(бTEACHER=‘程军’(C))
(2)πS#,SNAME(бAGE>21∧SEX=‘男’(S))
(3)πSNAME(S⋈(πS#,C#(SC)÷πC#(бTEACHER=‘程军’(C))))
(4)πC#(C)-πC#(бSNAME=‘李强’(S)⋈SC)
(5)πS#(б[1]=[4]∧[2]≠[5](SC×SC)
(6)πC#,CNAME(C⋈(πS#,C#(SC)÷πS#(S)))
(7)πS#(SC⋈πC#(бTEACHER=‘程军’(C)))
(8)πS#(SC)÷πC#(бC#=‘k1’∨C#=‘k5’(C))
(9)πSNAME(S⋈(πS#,C#(SC)÷πC#(C)))
(10)πS#,C#(SC)÷πC#(бC#=‘2’(SC))
(11)πS#,SNAME(S⋈πS#(SC⋈(бCNAME=‘C语言’(C))))
4现有学生课程数据库,其中包括:学生关系Student,课程关系Course和选修关系Sc,关系的实例如表2-1、表2-2和表2-3所示。其中,Sc中的属性Grade表示该学生该门课取得的成绩,Course中的属性Credit表示该门课程的学分。
表2-1 学生课程数据库-Student
表2-2 学生课程数据库-Sc
表2-3 学生课程数据库-Course
计算下述表达式的结果,并说明各操作的实际查询含义。
(1)σCname=‘数据库原理’(Course)
(2)πSno(Sc)
(3)πCname(σCredit>2(Course))
(4)πCno,Grade(σSno=‘03090101’(Sc))
(5)Sc⋈Course⋈Student
(6)πSname(σCname=‘数据库原理’(Student⋈Sc⋈Course))
(7)πSno,Cno(Sc)÷Course
答(1)对Course关系作选择运算,选择条件是课程名称Cname属性的取值为“数据库原理”。因此,可以逐行考查Cname属性的取值,如果某行的Cname属性的取值为“数据库原理”,就把该行放到结果集中。结果集合的关系模式仍同Course一样。最终得到的结果集如图2-6(a)。该操作实际上就是查询“数据库原理”课程的基本情况。
图2-6(a) (1)的结果集合
(2)对Sc关系作投影运算,只留下属性Sno一列,因而结果集合中的关系模式不再同Sc一样了,同时还会出现相同的行,最终结果集合中还会去掉重复的行。最终得到的结果集如图2-6(b)。该操作实际上就是查询选修过课程的学生的学号信息。
图2-6(b) (2)的结果集合
(3)括号优先,因此,首先对关系Course作选择运算,选择那些学分Credit属性的取值大于2的行,所得结果集合的关系模式仍同Course一样,元组有2行。然后,再对此结果集合作投影运算,只留下属性Cname一列。最终得到的结果集如图2-6(c)所示。该操作实际上就是查询学分大于2分课程的课程名称信息。
图2-6(c) (3)的结果集合
(4)括号优先,因此,首先对关系Sc作选择运算,选择那些学号Sno属性的取值为“03090101”的所有行,所得结果集合的关系模式仍同Sc一样,元组有3行。这部分实际上就是查询学号为“03090101”学生的所有选修情况,再对此结果集合作投影运算,留下课程编号属性Cno和成绩属性Grade两列。最终得到的结果集如图2-6(d)所示。该操作实际上就是查询学号为“03090101”学生选修的所有课程的课程编号和对应的成绩信息。
图2-6(d) (4)的结果集合
(5)运算次序从左到右。首先关系Sc与关系Course作自然连接,共同属性是Cno,因而此运算就是在Sc与Course的笛卡尔积中选择那些使Se.Cno-Course.Cno成立的行,同时得到的结果集中去掉重复的Cno属性。结果如图2-6(e)所示。然后,此结果集合再与Student作自然连接,共同属性是Sno,此运算就是在上述结果集合与Student的笛卡尔积中选择那些使Se.Sno=Student.Sno成立的行,同时得到的结果集中去掉重复的Sno属性。最终得到的结果集如图2-6(f)所示。该操作实际上就是查询选修过课程的学生的基本情况、选修情况以及课程情况信息。
图2-6(e) (5)中Sc与Course自然连接的结果集合
图2-6(f) (5)的最终结果集合
(6)括号优先,因此,首先进行Student与Sc再与Course的自然连接,得到的中间结果如图2-6(f)所示。然后,对此中间结果集合进行选择运算,即从中选择课程名称Cname属性的取值为“数据库原理”的行,得到的结果如图2-6(g)所示。此操作实际上是查询选修了“数据库原理”课程的学生的基本情况、选修情况以及该门课程的基本、情况。最后,再对图2-6(g)所示的结果集合进行投影运算,只留下学生姓名Sname属性这一列,最终得到的结果集合如图2-6(h)所示。该操作实际上就是查询选修了“数据库原理”课程的学生姓名信息。
图2-6(g) 对自然连接的结果进行选择运算后的结果集合
图2-6(h) (6)的最终结果集合
(7)运算次序从左到右。首先对关系Sc作投影运算,留下学号属性Sno和课程编号Cno属性,然后与关系Course作除运算。根据除运算定义,我们可以知道,结果集合是只有属性Sno的新关系,其中的元组根据除运算定义可知只有一行,如图2-6(i)所示。该操作实际上就是查询选修了全部课程的学生学号信息。
图2-6(i) (7)的最终结果集合