第3章关系数据库理论

3.知识图谱
1. 
学习内容
关系数据库理论的学习内容主要包括关系数据模型的三个组成要素,即关系数据模型所
采用的数据结构、关系操作能力的表达方法、关系模型对于存储在数据库中的数据具有的约束
能力;用关系代数表达式或关系演算表达式表达数据库操作。

2. 
知识点
本章涉及的知识点主要包括: 

(1)关系模型中关系、关系模式、关系实例、关系数据库的概念。
(2)关系模型的三种完整性约束规则。
(3)关系代数的操作运算符及运算规则。
(4)用关系代数表达式表达数据库操作的方法。
(5)关系演算中关系的表达,关系演算公式的定义。
(6)用关系演算表达式表达数据库查询操作的方法。
3. 
知识点概念图
知识点涉及的概念及其概念间内涵可用概念图呈现,如图3-1所示。

4. 
概念图解读
关系数据模型是目前大多数DBMS 所采用的数据模型,用“关系”数据结构描述数据库模
式,对关系进行查询和更新操作,对关系的操作结果进行实体完整性、参照完整性和用户定义
完整性约束。

关系概念建立在集合论中笛卡儿积的概念基础之上,关系是元组的集合,某一时刻元组的

集合称为关系实例,即该时刻关系的值。关系的逻辑结构用关系模式描述,包括关系名称、包

含的属性、属性的域、属性向域的映像以及属性之间的数据依赖5个要素。

关系操作可用关系代数和关系演算表达,关系代数和关系演算在表达能力上是等价的。

关系代数用对关系的代数运算表达关系操作,关系代数运算包括传统的集合运算和专门

的关系运算。传统的集合运算包括并、差、交、广义笛卡儿积等,专门的关系运算包括投影、选

择、连接、除、重命名等,其中选择、投影、并、差、广义笛卡儿积是5种基本代数运算。包含关系

代数运算符、关系名变量、元组集合常量,以及辅助代数运算的算术运算符、比较运算符和逻辑

运算符的关系代数操作序列构成一个关系代数表达式,可表达数据库操作。

关系演算用关系操作的结果应满足的谓词条件表达关系操作,在关系演算表达式中,主要


图3-
1 
关系数据库理论知识点概念图

使用比较运算符、量词和逻辑运算符等构造谓词条件。根据谓词变元的不同,关系演算分为元
组关系演算和域关系演算。

实际的关系数据库管理系统(RDBMS)产品使用SQL 定义数据库的三级模式结构及完整
性约束,实现数据库的查询、更新和控制等操作。SQL 吸纳了关系代数的概念和关系演算的
逻辑思想,关系代数和关系演算是SQL 学习的基础。

3.习题
2 

一、填空题

1. 关系数据模型的三个组成要素是关系数据结构、、关系的完整性约束。
2. 关系模型用单一的数据结构,即,描述实体以及实体之间的联系。
3. 关系数据模型中的关系可用二维表表示,表中的一行对应关系的一个,表中
的一列对应关系的一个。
4. 关系模型有、、三类完整性约束,其中完整性和
完整性是关系数据库必须满足的完整性约束条件,应该由RDBMS默认支持。
5. 在关系数据库中,实体完整性通过定义关系的实现。
6. 在关系数据库中,两个关系中数据间的参照关系是通过定义实现的。
7. 包含在任何一个候选键中的属性称为。
8. 关系数据模型的实体完整性约束规则要求,关系的主属性。
9. 根据参照完整性约束规则,外键的值或者等于对应主键的关系中某个元组主键的值, 
或者取。
21 


10. 在关系A(S,SN 
,D)和B(D,CN 
,NM 
)中,
S 
是
A 
的主键,
A 
中的属性
D 
与
B 
中的
主键
D 
相对应,则
D 
在
A 
中称为,且
D 
的取值可以为NULL 值。
11.对于关系:学生(学号,姓名,性别,专业号,年龄), 将属性“年龄”的取值范围定义在
18~30 岁属于完整性约束。
12.设有学生关系S(学号,姓名,班级)和学生选课关系SC(学号,课程号,成绩), 为实现
参照完整性,应定义关系SC 
中的“学号”为该关系的。
13.对于关系:教学(学号、教工号、课程号), 若每名学生可以选修多门课程,每门课程可
以由多名学生选修,每位老师只能讲授一门课程,每门课程可以由多位老师讲授,那么该关系
的候选键是。
14.假定关系“列车时刻表”中的属性有车次、始发站、发车时间、终点站、到达时间,且每
辆列车有唯一的始发站和终点站,则该关系的主键是。
15.关系模式的候选键可以有1个或多个,而主键只能有个。
16.关系操作的结果是一个。
17.早期的关系操作能力通常用和的方式表示。
18.关系代数运算中的5种基本操作包括、差、笛卡儿积、投影和选择。
19.在关系代数运算中,使用运算可从关系中得到满足条件的元组;如果只对关
系中的某些属性感兴趣,则可用关系代数的运算选择这些属性。
20.对于学生关系S(S#,SNAME,SEX,AGE), 若要用关系代数表达查询得到的某名
学生的基本信息,需使用运算。
21.设关系
R 
和
S 
分别有
m 
和
n 
个元组,k1 和k2 个属性,若它们有k3 个相同的属性,则
R×S 
的元组个数是,属性个数是;RS 
的属性个数是。
22.在关系代数中,从两个关系的笛卡儿积中选取它们属性间满足一定条件的元组的操
作,称为操作。
23.关系
R 
和
S 
做自然连接的前提条件是
R 
和
S 
有相同的。
24.对图3-2中的关系
R 
和
S 
进行RB<DS 
运算,则运算结果中含有个元组。
图3-
2 
关系
R 
与
S 
的连接运算

25.对关系R(A,
B 
,C,D)和S(A,C,D,E)进行自然连接运算RS 
后,结果关系
中有个属性。
26.若把自然连接结果中舍弃的悬浮元组保留下来,并在这些悬浮元组新增的属性上赋
空值NULL,则这种连接称作。若只保留连接运算符左边关系中的悬浮元组,需要
进行操作;若只保留连接运算符右边关系中的悬浮元组,则需要进行操作。
27.关系
R 
与
S 
的实例如图3-3所示,关系
R 
与
S 
的左外连接、右外连接和完全外连接
的元组个数分别为、、。
22 


图3-
3 
关系
R 
与
S 
的实例
1 

28.对图3-4中的关系
R 
进行关系代数运算后的结果如同关系S,则对应的关系代数表
达式为。
图3-
4 
关系
R 
与
S 
的实例
2 

29. 根据谓词变元的不同,关系演算分为和。
二、选择题

1. 关于关系性质的描述,错误的是。
A. 关系中任意两个元组的值不能完全相同
B. 关系中任意两个属性的值不能完全相同
C. 关系中任意两个元组可以交换顺序
D. 关系中任意两个属性可以交换顺序
2. 下列概念模型与关系模型的对应概念,错误的是。
A. 联系→关系模式B. 实体型→关系实例
C. 关键字→候选键D. 属性→属性
3. 关系模型的数据结构是。
A. 层次结构B. 关系结构C. 网状结构D. 树结构
4. 在关系数据库中,实现关系中任意两个元组不能相同的约束是依据关系的。
A. 外键B. 属性C. 候选键D. 列
5. 以下关于外键和对应的主键之间的关系,正确的是。
A. 外键并不一定与对应的主键同名
23 


B. 外键一定要与对应的主键同名
C. 外键一定要与对应的主键同名而且唯一
D. 外键一定要与对应的主键同名,但并不一定唯一
6. 下面关于主键的描述,正确的是。
A. 不同的元组可以具有相同的主键值
B. 关系中的主键可以包含一个或多个属性
C. 关系中主键只可以是一个属性
D. 关系中的主键的数据类型必须定义为自动编号或文本
7. 在关系数据库中,关系与关系之间的参照是通过定义实现的。
A. 主键B. 外键C. 主属性D. 值域
8. 在一个关系中,任意候选键中都不包含的属性称为。
A. 主属性B. 非主属性C. 主关键字D. 主键
9. 若一个关系的元组的某属性(或属性组)的取值需与另一个关系的某个元组的主键值
对应,则称该属性(或属性组)为这个关系的。
A. 候选键B. 主键C. 外键D. 连接键
10. 关系模式中,一个候选键。
A. 可由多个任意属性组成
B. 只需由一个属性组成
C. 可由一个或多个其值能唯一标识该关系中一个元组的属性组成
D. 必须由多个属性组成
11. 设有关系模式EMP(职工号,姓名,年龄,技能), 假设职工号唯一,每个职工有多项技
能,则关系EMP 
的候选键是。
A. 职工号B. 姓名,技能C. 技能D. 职工号,技能
12. 若关系R(A,B,C,D)的主键为全键,则关系
R 
的主键是。
A. 由属性A、B、C、
D 
组成的属性组
B. 在属性A、B、C、
D 
中任选一个
C. 在属性组AB,AC,AD,BC,BD,CD 
中任选一个
D. 在属性组ABC,ACD,ABD,BCD 
中任选一个
13. 在关系模式EMP(职工号,姓名,年龄,技能)中,假设职工号唯一,每个职工只能申报
一项技能,则EMP 
表的主键是。
A. 职工号B. 姓名,技能C. 技能D. 职工号,技能
14. 对于关系模式:学生(宿舍编号,宿舍地址,学号,姓名,性别,出生日期,专业), 若每个
宿舍可住多人,则候选键是。
A. 宿舍编号B. 学号C. 宿舍地址,姓名D. 宿舍编号,学号
15. 关系中的主键不允许取空值,其受约束规则约束。
A. 实体完整性B. 参照完整性
C. 用户定义完整性D. 数据完整性
16. 若关系SC(SNO,CNO,GRADE)的主键是(SNO,CNO), 则。
A. 只有SNO 
不能取空值B. 只有CNO 
不能取空值
C. 只有GRADE 
不能取空值D.SNO 
与CNO 
都不能取空值
24 

25 
17.若要求关系:学生(学号,姓名,所在系)中“所在系”属性的值来源于另一个关系:系
别(系名,主任)的“系名”属性值,则这一约束属于。
A.实体完整性约束B.参照完整性约束
C.用户定义完整性约束D.不属于任何约束
18.若要求关系:学生(学号,姓名,性别)中“学号”属性的值是8个数字组成的字符串,则
其规则属于。
A.实体完整性约束B.参照完整性约束
C.用户定义完整性约束D.关键字完整性约束
19.对于图3-5中的供应商关系S 和零件关系P ,主键分别是“供应商号”和“零件号”,零
件关系P 的属性“供应商号”是外键,属性“颜色”的取值范围为(红,白,蓝)。
图3-5 关系S 与P 的实例
(1)向关系P 中插入如下新元组,允许被插入的有。
Ⅰ.(2' 01','白',S' 10') Ⅱ.(3' 01','红','T11') Ⅲ.(3' 01','绿',B' 01') 
A.只有Ⅰ B.只有Ⅰ和Ⅱ C.只有Ⅱ D.都不能
(2)删除关系S 中的如下元组,可能被限制删除的有。
Ⅰ.('S10','宇宙','上海') Ⅱ.('Z01','立新','重庆') 
A.只有Ⅰ B.只有Ⅱ C.都可以D.都不可以
(3)如下更新操作能够被执行的有。
Ⅰ.将S 表中的供应商号的值'Z01'修改为'Z30' 
Ⅱ.将P 表中的供应商号的值'B01'修改为'B02' 
A.只有Ⅰ B.只有Ⅱ C.都可以D.都不可以
20.关系DML以关系为操作对象,操作后的结果是。
A.元组B.关系C.属性D.域
21.关系数据模型上的关系操作表示方式包括。
A.关系代数和集合运算B.关系代数和关系演算
C.关系演算和谓词演算D.关系代数和谓词演算
22.5种基本关系代数运算是。
A.∪,-,×,π和σ B.∪,-, ,π和σ 
C.∪,∩,×,π和σ D.∪,∩, ,π和σ 
23.在关系代数的专门关系运算中,从关系中筛选满足条件的元组的操作称为。
A.选择B.投影C.连接D.扫描

24. 集合
R 
与
S 
的交可以用关系代数的基本运算表示为。
A.R-(R-S) B.R+(R-S)
C.R-(S-R) D.S-(R-S)
25. 能进行并运算的关系是。
A.R1(A,B,C)和R2(A,B,C) B.R1(A,B,C)和R2(A,D,C)
C.R1(A,B,C)和R2(A,B,C,D) D.R1(A,B)和R2(A,B,C)
26. 关系
R 
与
S 
的实例如图3-6所示。
图3-
6 
关系
R 
与
S 
的实例

(1)R-
S 
的结果中包含的元组有。

A.(1,4,5) B.(6,4,3) C.(1,2,3) D.(1,7,5)

(2)R∩
S 
的结果中包含的元组有。

A.(1,4,5) B.(6,4,3) C.(1,2,3) D.(1,7,5)

(3)R∪
S 
的结果中包含的元组有。

A.(1,4,5) B.(6,4,3) C.(1,2,3) D.(1,7,5)

27. 在关系代数中,对一个关系做投影操作后,新关系的元组个
数原来关系的元组个数。
A. 小于B. 小于或等于
C. 等于D. 大于
28. 选取关系中的某些属性,并消去重复元组的关系代数运算
为。
A. 取列运算B. 连接运算
C. 投影运算D. 选择运算
29. 对于图3-7中的关系R。图3-
7 
关系
R 
的实例
(1)运算σB<6(R)的结果是。
A B C 
7 2 3 
4 4 3 

B2 
4 
A C 
7 3 
4 3 

A B C 
2 6 7 
7 2 3 
4 4 3 

ABC D 

(2)运算π3,2(R)的结果是。
26 


27 
A B C 
2 6 7 
7 2 3 
A 
C B 
7 6 
3 4 
3 2 
B 
A
3274 
C 
B C 
6 7 
6 7 
2 3 
4 3 
D 
30.如果关系R 中有4个属性和3个元组,关系S 中有3个属性和5个元组,则R×S 的
属性个数和元组个数分别是。
A.7和8 B.7和15 C.12和8 D.12和15 
31.在关系代数中,从两个关系的笛卡儿积中选取它们属性间满足一定条件的元组的操
作,称为。
A.并B.选择C.除D.连接
32.进行自然连接运算的两个关系必须具有。
A.相同属性个数B.公共属性C.相同关系名D.相同关键字
33.设有关系R(A ,B)和S(C,D ,E),那么R A<DS 等价于。
A.σA<D (R×S) B.σA<D (R∩S) C.σA<D (R S) D.σA<D (R∪S) 
34.学生选课数据库中的关系模式如下: 
学生(学号,姓名,性别) 
课程(课程编号,课程名称,学时) 
成绩(学号,课程编号,分数) 
(1)若要查询选修课程名称为“数据库原理与应用”,且分数低于60的学生姓名和分数, 
则需使用的关系代数运算包括。
A.选择、投影、连接B.选择、投影
C.选择、连接D.投影、连接
(2)查询“至少一门课程成绩在60分以上的学生姓名”的关系代数表达式不能是。
A.π姓名(σ分数>60(SC) S) B.π姓名(σ分数>60(S SC)) 
C.π姓名(π学号,姓名(S) (σ分数>60(SC))) D.π分数>60(π姓名(S) SC) 
35.把关系R 和S 进行自然连接时舍弃的元组保留到结果关系中的操作称为。
A.连接B.笛卡儿积C.外部并D.外连接
36.对于图3-8中的关系R 与S,关系T 中元组是通过R 与S 的操作得来的。
图3-8 关系R、S、T 的实例

28 
A.自然连接B.全外连接C.右外连接D.左外连接
37.学校数据库中有学生和宿舍两个关系: 
学生(学号,姓名) 
宿舍(楼名,房间号,床位号,学号) 
假设有的学生不住宿,床位也可能空闲。如果要查询所有学生住宿和宿舍分配的情况,包
括没有住宿的学生和空闲的床位,则应对这两个关系进行操作。
A.全外连接B.左外连接C.右外连接D.自然连接
38.在图3-9中,关系R 的属性A 是主键,属性B 是外键且参照关系S 的主键B。
图3-9 关系R 和S 的实例
(1)操作结果为图3-10的关系代数操作是。
A.R C<ES B.R C>ES C.R R.B=S.BS D.R S 
(2)操作结果为图3-11的关系代数操作是。
A.R C<ES B.R C>ES C.R R.B=S.BS D.R S 
图3-10 关系R 和S 的操作结果1 图3-11 关系R 和S 的操作结果2 
39.能直接做除运算R÷S 的关系R 和S 是。
A.R(A ,B,C), S(B) B.R(A ,B,C), S(B,D ) 
C.R(A ,B,C), S(D ,E) D.R(A ,B), S(A ,B,C) 
40.关系演算用表达关系操作要求。
A.谓词B.关系的运算C.元组D.域

29 
41.下列与关系代数的基本运算等价的元组关系演算表达式,表达不正确的是。
A.R∪S={t|R(t)∨S(t)} 
B.R-S={t|R(t)∧S(t)} 
C.σF (R)= {t|R(t)∧F'} 
D.πi1,i2,…,ik (R)={t(k)|(.u)(R(u)∧t[1]=u[i1]∧t[2]=u[i2]∧…∧t[k]=u[ik])} 
42.对于图3-12中的关系R 和S,元组关系演算表达式{t|R(t)∧(.u)(S(u)→t[3]> 
u[1])}的运算结果是。
图3-12 关系R 和S 的实例
A B C 
1 2 3 
4 5 6 
A 
A B C 
3 7 11 
4 5 6 
B 
A B C 
7 8 9 
10 11 12 
C 
A B C 
5 9 13 
6 10 14 
D 
三、简答题
1.名词解释:属性,域,元组,候选键,主键,外键。
2.简述关系模型的三个组成要素。
3.简述关系模型的完整性约束规则。在参照完整性约束规则中,为什么外键属性的值也
可以为空? 什么情况下它不可以为空? 
4.关系代数的基本运算有哪些? 如何用这些基本运算表示其他运算? 
5.说明关系的笛卡儿积、等值连接和自然连接的联系。
6.假设有关系R(a,b)和S(c,d),试把如下元组关系演算表达式用等价的关系代数表达
式表示: 
图3-13 关系R 和S 的实例
{t|R(t)∧(.u)(S(u)∧u[1]≠t[2])} 
7.关系R 和S 的半连接(semijoin)写作R S,它
表示由R 中满足如下条件的元组t 组成的集合:t 至少
跟S 中的一个元组在R 和S 的公共属性上相同。用三
种不同的关系代数表达式给出R S 的等价表示。
8.设有关系R 和S,如图3-13所示,给出πC (S)、
σB<c' '(R)、σA=C (R ×S)、R S、R R.B<S.BS 运算的
结果。

9.设有关系R(A,B)和S(A,C), 使用常量NULL 分别书写
R 
与
S 
的左外连接、右外连
接和完全外连接的元组关系演算表达式。
四、查询实现题

1.有一个学校教务管理系统中的数据库,数据库中有6个关系,分别是学生关系
STUDENT 
、班级关系CLASS 
、课程关系LESSON 
、教师关系TEACHER 
、班级所选修课程
信息的班级选课关系SELECTION 
,以及学生所选修课程成绩的学生成绩关系GRADE 
。表
中主外键见标识,学分、分数、上课年度属性为INT 类型,其余为CHAR 类型。
STUDENT(学号,姓名,性别,班级号
)
班级号,所在院系,所属专业,班长学号
)
CLASS( ......
......
..


LESSON 
(课程号,课程名,教材名,学分
)
TEACHER(教师编号,姓名,所在院系
)
SELECTION 
( ........
,


班级号,课程号,教师编号上课年度,上课学期
)
GRADE(学号,课程号,分数
)
试分别用关系代数、元组关系演算表达式表达如下查询操作
:


(1)查询“数据库”课程的课程号及相应教材。
(2)查询所有班长的学号、姓名、所在班级号和所属专业。
(3)查询选修了“数据库”或“软件工程”课程的班级号及所属专业。
(4)查询学过“陈卫”老师讲的“数据结构”课程的班级号和上课年度。
(5)查询至少选修了“王武”同学所学过的所有课程的学生学号。
(6)查询“软件学院”没讲授过“数据库”课程的教师编号。
(7)查询2020 年度讲授过两门和两门以上课程的教师编号和所教授的课程号。
2.设有一个供应商-零部件-工程数据库,包括S、P、
J 
和SPJ 
这4个关系模式,数据库模
式如下。
S 
(Sno,Sname,Status,City)
P 
(Pno,Pname,Color,Weight)
J 
(Jo,Jname,City)
SPJ (S(n) no,Pno,Jno,Qty) 

其中: 

.供应商关系
S 
有供应商代码(Sno)、供应商姓名(Sname)、供应商状态(Status)、供应
商所在城市(City)等属性,Sno 
为主键。
. 零部件关系
P 
有零部件代码(Pno)、零部件名称(Pname)、颜色(Color)、质量
(Weight)等属性,Pno 
为主键。
.工程项目关系
J 
有工程项目代码(Jno)、工程项目名称(Jname)、工程项目所在城市
(y)等属性,
o 
为主键。
CitJn

.供应情况关系SPJ 
有供应商代码(Sno)、零部件代码(Pno)、工程项目代码(Jno)、供
应数量(Qty)等属性,Qty 
表示某供应商给某项工程供应某种零部件的数量,Sno、
Pno、Jno 
共同构成关系的主键,又分别是关系的外键。
供应商-零部件-工程数据库实例如图3-14 所示。

30 


图3-14 
供应商-零部件-工程数据库实例

31 


试分别用关系代数、元组关系演算表达式表达如下查询操作。

(1)检索上海供应商供应的所有零部件的代码。
(2)检索使用上海供应商供应的零部件的工程项目名称。
(3)检索给项目代码为J1的工程供应代码为P1的零部件的供应商代码。
(4)检索给项目代码为J1的工程供应红色零部件的供应商代码。
(5)检索项目代码为J2的工程使用的各种零部件的名称及其数量。
(6)检索没有使用天津供应商供应的零部件的工程项目代码。
(7)检索至少使用了供应商代码为S1的供应商所供应的全部零部件的工程项目代码。
3.已知某公司数据库包含如下四个基本表。
Department(Dept_No,Dept_Name,Location)存储员工所在部门的编号、名称和办公
场所; 
Employe 
(Emp_No,Emp_Name,Dept_No)存储员工的编号、姓名和所在部门编号; 
Pjt(Po_No,Pro_Name,Budget)存储员工所参与的工程项目编号、名称和工程预

算,预算(r) 单(o) 位(e) 是万(r) 元;(c) Works(Emp_No,Pro_No,Job)存储员工的编号、所参与的工程项目编号和员工在工程
项目中承担的工作。
试分别用关系代数、元组关系演算表达式表达如下查询操作: 

(1)查询参与预算大于500万元的工程项目的员工所在部门编号。
(2)查询员工“王广”和“王丽”都参与的预算超出10万元的工程项目名称。
(3)查询所在部门编号为D2的员工没有参与的工程项目编号及名称。
(4)查询所有部门都参与的工程项目编号和名称。
(5)查询所在部门编号为D2的所有员工的编号、姓名,及其参加的工程项目编号和承担
的工作。
3.参考答案
3 

一、填空题

1.关系数据操作2.关系3.元组、属性
4.实体完整性、参照完整性、用户定义完整性、实体、参照5.主键
6.外键7.主属性8.不可为空9.空值(NULL) 10.外键
11.用户定义12.外键13.(学号,教工号)
14.车次15.1 16.关系(集合) 17.关系代数、关系演算
18.并19.选择、投影20.选择21.m×n、k1+k2、k1+k2-k3 
22.连接23.属性(或属性组) 24.6 25.5 
26.外连接、左外连接、右外连接27.4、4、6 28.σ单价>5(R)或σ单价≥8(R)
29.元组关系演算、域关系演算
32 

二、选择题


题号1 2 3 4 5 6 7 8 9 10 
答案B B B C A B B B C C 
题号11 12 13 14 15 16 17 18 19(1)-(2) 
答案D A A B A D B C D A 
题号19(3) 20 21 22 23 24 25 26(1)-(3) 
答案A B B A A A A C AB ABCD 
题号27 28 29(1)-(2) 30 31 32 33 34(1)-(2) 
答案B C A B B D B A A D 
题号35 36 37 38(1)-(2) 39 40 41 42 
答案D C A A D A A B C 

三、简答题

1.对属性、域、元组、候选键、主键、外键等名词进行解释。
答:属性(Atribute),对关系中元组分量的描述,用属性名表示,与定义关系的域对应。
其反映的是关系所描述的实体的属性,或实体间联系的属性。在同一关系中,属性名不能
相同。

域(Domain),属性的取值范围,是一组具有相同数据类型的值的集合。不同的属性可以
有相同的域,且关系数据模型要求所有的域都是原子数据的集合。
元组(Tuple),关系是给定一组域上的笛卡儿积的某个有一定语义的子集,其中每一个元
素称为一个
n 
元组(n-upe), tpl

tl简称为元组(ue)。

候选键(CandidateKey),若关系中的某一属性或属性集能唯一标识一个元组,而其任意
一个真子集无此性质,则称该属性或属性集为关系的候选键。因此,候选键是能唯一标识一个
元组的最小属性集,且每个关系都至少存在一个候选键。

主键(PrimaryKey),主键是数据库设计者选中用来在DBMS中区分一个关系中不同元
组的候选键。主键的选择会影响某些实现问题,例如索引文件的建立等。

外键(ForeignKey),若关系
R 
的一个属性(集)
F 
与关系
S 
的主键Ks 
对应,即关系
R 
中
的某个元组的
F 
上的值来自关系
S 
中某个元组的Ks 
上的值,则称该属性(集)
F 
为关系
R 
的
外键。其中,关系
R 
为参照关系(ReferencingRelation,或引用关系),关系
S 
为被参照关系
(ReferencedRelation)或目标关系(TargetRelation),目标关系的主键Ks 
和参照关系
R 
的外
键
F 
的命名可以不同,但必须定义在同一(或同一组)域上。关系
R 
和关系
S 
可以是同一个
关系。

2.简述关系模型的三个组成要素。
答:关系模型作为一种数据模型,包括数据结构、数据操作和完整性约束三个组成要素。
(1)关系模型用关系结构描述实体以及实体之间的联系。关系数据结构来自集合论中关
系的概念,是给定一组域上的笛卡儿积的某个有一定语义的子集。
33 


(2)关系模型的关系操作能力通常用关系代数(RelationalAlgebra)和关系演算
(RelationalCalculus)的方式表达。目前使用的是一种结构化的查询语言SQL,它不仅具有丰
富的数据操纵功能,而且具有数据定义和控制功能。
(3)关系模型有三类完整性约束:实体完整性、参照完整性和用户定义完整性。实体完
整性和参照完整性是关系模型必须满足的完整性约束条件,被称为关系的两个不变性,一般由
关系数据库管理系统(RDBMS)自动支持。用户定义完整性是针对具体应用定义的约束条件, 
体现了具体应用领域对数据的语义要求。
3. 简述关系模型的完整性约束规则。说明参照完整性约束规则为什么允许外键属性的
值可以为空,什么情况下其值不能空。
答:实体完整性和参照完整性是关系的两个不变性,是关系模型必须满足的完整性约束
条件,一般由RDBMS 提供支持,要求对关系的操作遵循如下完整性约束规则。

.实体完整性约束规则:若属性
A 
是关系
R 
的主属性,则属性
A 
的值不能为空值。
.参照完整性约束规则:若属性(或属性集)
F 
是关系
R 
的外键,它与关系
S 
的主键Ks 
对应,则
R 
中元组在
F 
上的取值只能有两种可能,即或者取空值,或者等于
S 
中某个
元组的Ks 
值。
外键不是候选键,是可以为空的,参照完整性只是要求当其有值时,其值必须是相应主键
的某个值。但当外键属性是构成候选键的主属性时,根据实体完整性约束规则,其值是不允许
为空的。

4.说明关系代数有哪些基本运算,并用这些基本运算表示关系代数的其他运算。
答:关系代数有5种基本运算操作:并、差、笛卡儿积、投影和选择运算。其他运算,如交、
连接和除等,可利用这些基本运算表达。

交:R∩S=R-(R-S)或R∩S=S-(S-R)

连接:
R 
FS=σF 
(R×S) 

连接运算是在两个关系的广义笛卡儿积中选取满足条件
F 
的元组,
F 
是逻辑表达式,
F 

AθS.A=S.

若形为R.B,则是
θ 
连接;若形为R.B,则是等值连接;若在等值连接的结果上再做

投影去掉重复列,则为自然连接。

除:R÷S=πX 
(R)-πX 
((πX 
(R)×S)-R)

X 
是在
R 
中但不在
S 
中的属性组,即除运算结果中包含的属性。

5.说明关系的笛卡儿积、等值连接和自然连接的联系。
答:关系的笛卡儿积是两个关系上的基本运算,是连接运算的基础。
等值连接是在笛卡儿积运算的结果上选取两个关系在某些属性上值相等的元组,计算等
价式为

RA=BS≡σA=
B 
(

R.S.R×S) 
其中,
A 
和
B 
分别是
R 
和
S 
上可包含多个属性的属性个数相等且可比的属性组,若包含的属
性个数有
k 
个,则A=A1=B1∧R.S.Ak 
=Bk 
。
B 
表示R.S.A2=B2∧…∧R.S.
自然连接是在两个关系的公共属性上进行等值连接,并去掉连接结果中的重复属性,计算
等价式为

RS≡πZ1,Z2,…,Zm 
(RA=AS)或RS≡πZ1,Z2,…,Zm 
(σA=
A 
(R×S)) 

R.S.
其中
A 
是两个关系的公共属性,Z2,…,是从RA=AS 
中去掉重复属性S.A2,…, 

Z1,Zm 

A1,S.

S.后的属性。
Ak 

34 

35 
6.对于关系R (a,b)和S (c,d),用等价的关系代数表达式表示如下元组关系演算表
达式: 
{t|R(t)∧(.u)(S(u)∧u[1]≠t[2])} 
答:表达式中涉及R 和S 两个关系中元组的属性值比较,需要用条件连接,结果元组来
自关系R,需要对连接结果在R 的属性上进行投影,则等价的关系代数表达式可为
πa,b(σR.b≠S.c(R×S)) 
7.用三种不同的关系代数表达式给出关系R 和S 的半连接R∝S 的等价表示。
答:假设关系R 和S 的属性集分别为AR 和AS ,公共属性集为A =AR ∩AS ,则R∝S 可
用以下三种形式表示: 
R∝S=πAR (σR.A=S.A (R×S)) 
R∝S=πAR (R R.A=S.AS) 
R∝S=πAR (R S) 
8.图3-13中关系R 和S 的πC (S)、σB<c' '(R)、σA=C (R×S)、R S、R R.B<S.BS 运算的
结果如图3-15所示。
答: 
图3-15 图3-13中关系R 和S 的运算结果
9.设有关系R(A ,B)和S(A ,C),使用常量NULL分别书写R 与S 的左外连接、右外连
接和完全外连接的元组关系演算表达式。
答:左外连接: 
{t(3)|(.u)(R(u)(((.v)(S(v)∧u[1]=v[1]∧t[1]=u[1]∧t[2]=u[2]∧t[3]=v[2]))∨ 
((.v)(S(v)∧u[1]≠v[1]∧t[1]=u[1]∧t[2]=u[2]∧t[3]=NULL))))} 
右外连接: 
{t(3)|(.v)(S(v)(((.u)(R(u)∧v[1]=u[1]∧t[1]=v[1]∧t[2]=u[2]∧t[3]=v[2]))∨ 
((.u)(R(u)∧v[1]≠u[1]∧t[1]=v[1]∧t[2]=NULL∧t[3]=v[2]))))}

36 
完全外连接: 
{t(3)|(.u)(R(u)(((.v)(S(v)∧u[1]=v[1]∧t[1]=u[1]∧t[2]=u[2]∧t[3]=v[2]))∨ 
((.v)(S(v)∧u[1]≠v[1]∧t[1]=u[1]∧t[2]=u[2]∧t[3]=NULL))))∨ 
(.v)(S(v)((.u)(R(u)∧v[1]≠u[1]∧t[1]=v[1]∧t[2]=NULL∧t[3]=v[2])))} 
四、查询实现题
1.分别用关系代数、元组关系演算表达式表达学校教务管理系统中的数据库查询操作。
(1)查询“数据库”课程的课程号及相应教材。
答:关系代数表达式: 
π课程号,教材名(σ课程名='数据库'(LESSON )) 
元组关系演算表达式: 
{t(2)|(.u)(LESSON (u)∧u[2]='数据库'∧t[1]=u[1]∧t[2]=u[3])} 
(2)查询所有班长的学号、姓名、所在班级号和所属专业。
答:关系代数表达式: 
π学号,姓名,STUDENT.班级号,所属专业(STUDENT STUDENT.学号=CLASS.班长学号CLASS) 
元组关系演算表达式: 
{t(4)|(.u)(.v)(STUDENT(u)∧CALSS(v)∧u[1]=v[4]∧t[1]=u[1]∧t[2]= 
u[2]∧t[3]=u[4]∧t[4]=v[3])} 
(3)查询选修了“数据库”或“软件工程”课程的班级号及所属专业。
答:关系代数表达式: 
π班级号,所属专业(σ课程名='数据库'∨课程名='软件工程'(LESSON ) SELECTION CLASS) 
元组关系演算表达式: 
{t(2)|(.u)(.v)(.w )(CLASS(u)∧SELECTION (v)∧LESSON (w )∧u[1]=v[1]∧ 
v[2]=w [1]∧(w [2]='数据库'∨w [2]='软件工程')∧t[1]=u[1]∧t[2]=u[3])} 
(4)查询学过“陈卫”老师讲的“数据结构”课程的班级号和上课年度。
答:关系代数表达式: 
π班级号,上课年度(σ姓名='陈卫'∧课程名='数据结构'(LESSON SELECTION TEACHER)) 
或
π班级号,上课年度(σ姓名='陈卫'(TEACHER) SELECTION (σ课程名='数据结构'(LESSON ))) 
元组关系演算表达式: 
{t(2)|(.u)(.v)(.w )(SELECTION (u)∧TEACHER(v)∧LESSON (w )∧u[3]= 
v[1]∧u[2]=w [1]∧v[2]='陈卫'∧w [2]='数据结构'∧t[1]=u[1]∧t[2]=u[4])} 
(5)查询至少选修了“王武”同学所学过的所有课程的学生学号。
答:关系代数表达式: 
π学号,课程号(GRADE)÷ (π课程号(π学号(σ姓名='王武'(STUDENT)) GRADE)) 
元组关系演算表达式: 
{t(1)|(.u)(STUDENT(u)∧(.v)(GRADE(v)∧((.w)(STUDENT(w)∧v[1]=w[1]∧ 
w [2]='王武' )→(.x)(GRADE(x)∧x[1]=u[1]∧x[2]=v[2])))∧t[1]=u[1])} 
(6)查询“软件学院”没讲授过“数据库”课程的教师编号。
答:关系代数表达式:

37 
π教师编号(σ所在院系='软件学院'(TEACHER))-π教师编号(σ课程名='数据库'(LESSON ) SELECTION ) 
或
π教师编号(σ所在院系='软件学院'(TEACHER))-π教师编号(σ课程名='数据库'(LESSON SELECTION )) 
元组关系演算表达式: 
{t(1)|(.u)(TEACHER(u)∧u[3]='软件学院'∧(.v)(SELECTION (v)∧(v[3]= 
u[1]→..(.w )(LESSON (w )∧w [2]='数据库'∧v[2]=w [1])))∧t[1]=u[1])} 
或
{t(1)|(.u)(.w )(TEACHER (u)∧u[3]='软件学院'∧LESSON (w )∧w [2]='数据库'∧ 
(..(.v)(SELECTION (v)∧v[3]=u[1]∧v[2]=w [1]))∧t[1]=u [1])} 
(7)查询2020年度讲授过两门和两门以上课程的教师编号和所教授的课程号。
答:关系代数表达式: 
πS1.教师编号,S1.课程号(σS1.课程号≠S2.课程号∧S1.上课年度=2020∧S2.上课年度=2020 
(ρS1(SELECTION ) S1.教师编号=S2.教师编号(ρS2(SELECTION )))) 
注:其中S1、S2可以有一个为SELECTION ,若属性也作了修改,则前面的属性也相应
地修改。
元组关系演算表达式: 
{t(2)|(.u)(.v)(SELECTION (u)∧SELECTION (v)∧u[4]=2020∧v[4]= 
2020∧u[3]=v[3]∧u[2]≠v[2]∧t[1]=u[3]∧t[2]=u[2])} 
2.分别用关系代数、元组关系演算表达式表达对供应商-零部件-工程数据库的查询操作。
(1)检索上海供应商供应的所有零部件的代码。
答:关系代数表达式: 
πPno(σCity='上海'(S) SPJ) 
元组关系演算表达式: 
{t(1)|(.u)(.v)(S(u)∧SPJ(v)∧u[4]= '上海'∧u[1]=v[1]∧t[1]=v[2])} 
(2)检索使用上海供应商供应的零部件的工程项目名称。
答:关系代数表达式: 
πJname(σCity='上海'(S) SPJ J) 
元组关系演算表达式: 
{t(1)|(.u)(.v)(.w )(S(u)∧SPJ(v)∧J(w )∧u[4]='上海'∧u[1]= 
v[1]∧w [1]=v[3]∧t[1]=w [2])} 
(3)检索给项目代码为J1的工程供应代码为P1的零部件的供应商代码。
答:关系代数表达式: 
πSno(σJno=J' 1'∧Pno=P' 1'(SPJ)) 
元组关系演算表达式: 
{t(1)|(.u)(SPJ(u)∧u[3]= J' 1'∧u[2]= P' 1'∧t[1]=u[1])} 
(4)检索给项目代码为J1的工程供应红色零部件的供应商代码。
答:关系代数表达式:
πSno(σColor='红色'(P) (σJno=J' 1'(SPJ))) 
或
πSno(σJno=J' 1'∧Color='红色'(SPJ P))

38 
元组关系演算表达式: 
{t(1)|(.u)(.v)(SPJ(u)∧P(v)∧u[3]= J'1'∧u[2]=v[1]∧v[3]= '红色'∧t[1]=u[1])} 
(5)检索项目代码为J2的工程使用的各种零部件的名称及其数量。
答:关系代数表达式: 
πPname,Qty (σJno=J' 2'(SPJ) P) 
元组关系演算表达式: 
{t(2)|(.u)(.v)(SPJ(u)∧P(v)∧u[3]= J'2'∧u[2]=v[1]∧t[1]=v[2]∧t[2]=u[4])} 
(6)检索没有使用天津供应商供应的零部件的工程项目代码。
答:关系代数表达式:
πJno(J)-πJno(πSno(σCity='天津'(S)) SPJ) 
元组关系演算表达式: 
{t(1)|(.u)(J(u)∧(.v)(SPJ(v)∧(u[1]=v[3]→..(.w)(S(w)∧ 
w[1]=v[1]∧w[4]= '天津')))∧t[1]=u[1])} 
注:常见错误表达式如下。
{t(1)|(.u)(J(u)∧(.v)(SPJ(v)∧(u[1]=v[3]→(.w )(S(w )∧ 
w [1]=v[1]∧w [4]≠'天津')))∧t[1]=u[1])} 
(7)检索至少使用了供应商代码为S1的供应商所供应的全部零部件的工程项目代码。
答:关系代数表达式:
πSno,Pno,Jno(SPJ)÷πSno,Pno(σSno='S1'(SPJ)) 
注:若关系代数表达式书写为
πPno,Jno(SPJ)÷πPno(σSno='S1'(SPJ)) 
则此表达式检索出的工程是其所使用的零件包括所有供应商所供应的、具有与S1所供应
零件相同的零件。
元组关系演算表达式: 
{t(1)|(.u)(SPJ(u)∧(.v)(SPJ(v)∧(v[1]='S1'→(.w )(SPJ(w )∧ 
w [1]=v[1]∧w [2]=v[2]∧w [3]=u[3])))∧t[1]=u[3])} 
注:若S1没有对各工程提供任何零件,则表达式检索的结果就是所有的有供应商供应零
件的工程号;若认为所有的工程都符合语义,则可将表达式改为如下形式。
{t(1)|(.u)(J(u)∧(.v)(SPJ(v)∧(v[1]='S1'→(.w )(SPJ(w )∧w [1]= 
v[1]∧w [2]=v[2]∧w [3]=u[1])))∧t[1]=u[1])} 
3.分别用关系代数、元组关系演算表达式表达对某公司数据库的查询操作。
(1)查询参与预算大于500万元的工程项目的员工所在部门编号。
答:关系代数表达式: 
πDept_No(σBudget>500(Employee Works Project)) 
或
πDept_No(σBudget>500(Project) Works Employee) 
元组关系演算表达式: 
{t(1)|(.u)(.v)(.w )(Employee(u)∧Works(v)∧Project(w )∧u[1]=v[1]∧ 
v[2]=w [1]∧w [3]>500∧t[1]=u[3])} 
(2)查询员工“王广”和“王丽”都参与的预算超出10万元的工程项目名称。

39 
答:关系代数表达式: 
πPro_Name(πPro_No,Pro_Name(σBudget>10∧Emp_Name='王广'(Employee Works Project))∩ 
πPro_No,Pro_Name(σBudget>10∧Emp_Name='王丽'(Employee Works Project))) 
或
πPro_Name(σBudget>10((πPro_No(σEmp_Name='王广'(Employee) Works)∩ 
πPro_No(σEmp_Name='王丽'(Employee) Works)) Project)) 
元组关系演算表达式: 
{t(1)|(.u)(.v)(.w)(.x)(.y)(Employee(u)∧Works(v)∧Project(w)∧Employee(x)∧ 
Works(y)∧u[1]=v[1]∧v[2]=w [1]∧y[2]=w [1]∧x[1]=y[1]∧ 
w [3]>10∧u[2]='王广'∧x[2]='王丽'∧t[1]=w [2])} 
(3)查询所在部门编号为D2的员工没有参与的工程项目编号及名称。
答:关系代数表达式: 
πPro_No,Pro_Name(Project)-πPro_No,Pro_Name(σDept_No='D2'(Employee Works Project)) 
或
πPro_No,Pro_Name((πPro_No(Project)-πPro_No(σDept_No='D2'(Employee) Works)) Project) 
元组关系演算表达式: 
{t(2)|(.u)(Project(u)∧(.v)(Works(v)∧(v[2]=u[1]→..(.w )(Employee(w )∧ 
w [3]='D2'∧v[1]=w [1])))∧t[1]=u[1]∧t[2]=u[2])} 
或
{t(2)|(.u)(.w )(Project(u)∧Employee(w )∧w [3]='D2'∧(..(.v)(Works(v)∧ 
v[2]=u[1]∧v[1]=w [1]))∧t[1]=u[1]∧t[2]=u[2])} 
(4)查询所有部门都参与的工程项目编号和名称。
答:关系代数表达式: 
πPro_No,Pro_Name,Dept_No(Employee Works Project)÷πDept_No(Department) 
元组关系演算表达式: 
{t(2)|(.u)(.w )(.v)(.x)(Project(u)∧Department(w )∧Employee(v)∧Works(x)∧ 
w [1]=v[3]∧v[1]=x[1]∧x[2]=u[1]∧t[1]=u[1]∧t[2]=u[2])} 
(5)查询所在部门编号为D2的所有员工的编号、姓名,及其参加的工程项目编号和承担
的工作。
答:关系代数表达式: 
πEmp_No,Emp_Name,Pro_No,Job((σDept_No='D2'(Employee)) Works) 
元组关系演算表达式: 
{t(4)│(.u)(Employee(u)∧u[3]='D2'∧t[1]=u[1]∧t[2]=u[2]∧ 
((.v)(Works(v)∧u[1]=v[1]∧t[3]=v[2]∧t[4]=v[3])∨ 
(.v)(Works(v)∧v[1]≠u[1]∧t[3]=NULL∧t[4]=NULL)))}