本文提供了《数据库系统概论》(第6版,王珊、杜小勇、陈红主编)第二章“关系模型”课后习题及部分补充题目的详细解答,涵盖原题内容与解析,便于学习者理解概念、掌握要点并进行复习巩固。
一、基础课后题目解析
1. 阐述关系模型包含的三个基本组成部分。
关系模型主要由以下三方面构成:关系数据结构、关系操作集合以及关系完整性约束。这三者共同定义了数据组织方式、可执行的操作类型和必须满足的数据规则。
2. 简要说明关系数据语言的特征及其分类。
关系数据语言可分为三大类:关系代数、关系演算和结构化查询语言(SQL)。其中,SQL融合了关系代数与关系演算的特点,既支持基于集合的操作,也允许以逻辑表达式描述查询需求,是目前最广泛使用的数据库语言。
3. 解释下列术语的含义,并分析它们之间的联系与区别:
(1)域、笛卡儿积、关系、元组、属性
- 域:指具有相同数据类型的值的集合,例如整数集、字符串集等。
- 笛卡儿积:对于给定的一组域 D, D, ..., D(允许重复),其笛卡儿积为所有可能的 n 元有序组 (d, d, ..., d) 的集合,其中每个 d 属于对应的 D。
- 关系:在域 D × D × ... × D 上的一个有限子集,表示为 R(D, D, ..., D),通常以二维表格形式呈现。
- 元组:关系中的每一行数据称为一个元组,对应于笛卡儿积中的一个元素。
- 属性:关系表中的每一列称为一个属性,用于标识特定域的信息;由于多个列可能来自同一域,因此需通过名称加以区分。
这些概念依次递进:域构成笛卡儿积的基础,笛卡儿积中选取的部分形成关系,关系中的每行是元组,每列则对应属性。
(2)候选码、主码、全码、主属性、非主属性、外码
- 候选码:能够唯一标识关系中任一元组的最小属性集,且其真子集不具备唯一性。
- 主码:当存在多个候选码时,从中选定一个作为主码,用于实际标识元组。
- 全码:若整个属性组联合起来才能唯一确定一个元组,则该组合称为全码。
- 主属性:所有出现在任意候选码中的属性统称为主属性。
- 非主属性:未包含在任何候选码中的属性即为非主属性。
- 外码:设 F 是关系 R 的一个属性或属性组,不是 R 的候选码,但与另一关系 S 的主码 Ks 相匹配,则称 F 为 R 的外码。
这些术语围绕数据标识机制展开,从唯一性识别到跨表关联均有涉及。
(3)关系模式、关系、关系数据库
- 关系模式:是对关系结构的静态描述,格式为 R(U, D, DOM, F),其中 U 表示属性集合,D 为各属性所属域,DOM 描述属性到域的映射,F 表示属性间的函数依赖关系。
- 关系:是关系模式在某一时刻的具体取值,表现为一张二维表,随时间变化而动态更新。
- 关系数据库:由一组关系模式及其对应的关系实例组成。其“型”称为关系数据库模式,描述整体结构;其“值”则是当前所有关系的状态集合。
[此处为图片1]
4. 举例说明关系模式与关系的区别。
关系模式是结构定义,属于“型”的范畴;而关系是具体数据,属于“值”的实例。例如,“Student(Sno, Sname, Sage)”是一个关系模式,表示学生信息的结构框架;而如下表格展示的是某一时刻的实际数据,即该模式的一个关系实例:
| Sno | Sname | Sage |
|---|---|---|
| S | 张俊丽 | 18 |
| S | 李红钰 | 19 |
| S | 王敏英 | 19 |
[此处为图片2]
5. 叙述关系模型的完整性约束种类,并回答参照完整性中外码为何有时可以为空。
关系模型包含三类完整性约束:
- 实体完整性:要求主码不能为空,确保每个元组可被唯一识别。
- 参照完整性:规定外码必须引用有效的主码值或为空。
- 用户定义的完整性:根据具体应用设定额外约束,如年龄不得小于0。
其中,在参照完整性下,外码属性的值允许为空的前提是:该外码并非其所在关系的主属性。空值表示尚未建立或不存在的引用关系。
6. 给出SPJ数据库的四个关系模式及其含义:
SPJ数据库包括以下四个基本关系模式:
- S(SNO, SNAME, STATUS, CITY):供应商信息表,记录供应商编号、名称、状态等级及所在城市。
- P(PNO, PNAME, COLOR, WEIGHT):零件信息表,包含零件编号、名称、颜色和重量。
- J(JNO, JNAME, CITY):工程项目表,登记项目编号、名称及所在城市。
- SPJ(SNO, PNO, JNO, QTY):供应情况表,描述某个供应商向某工程提供某种零件的数量。
这些模式共同构建了一个典型的多表关联应用场景,适用于练习连接查询与完整性约束设计。
[此处为图片3]
数据库中的相关表结构如下:
- 零件表P:包含零件代码(PNO)、零件名(PNAME)、颜色(COLOR)和重量(WEIGHT)。
- 工程项目表J:由工程项目代码(JNO)、工程项目名(JNAME)以及所在城市(CITY)构成。
- 供应情况表SPJ:包括供应商代码(SNO)、零件代码(PNO)、工程项目代码(JNO)及供应数量(QTY),用于描述某供应商向特定工程提供某种零件的数量信息。
查询任务及其表达形式
(1)找出为工程项目J1供应零件的供应商代码SNO。
关系代数表达式:
πSNO(σJNO='J1'(SPJ))
ALPHA语言表示:
GET W(SPJ.SNO): SPJ.JNO='J1'
(2)查找为工程项目J1供应零件P1的供应商代码SNO。
关系代数表达式:
πSNO(σJNO='J1' ∧ PNO='P1'(SPJ))
ALPHA语言表示:
GET W(SPJ.SNO): SPJ.JNO='J1' ∧ SPJ.PNO='P1'
(3)检索为工程项目J1提供红色零件的供应商代码SNO。
关系代数表达式:
πSNO(σJNO='J1'(SPJ) σCOLOR='红'(P))
ALPHA语言表示:
RANGE P PX
GET W(SPJ.SNO): SPJ.JNO='J1' ∧ PX(PX.COLOR='红' ∧ PX.PNO=SPJ.PNO)
(4)查询未使用天津供应商所生产的红色零件的工程项目代码JNO。
关系代数表达式:
πJNO(J) πJNO((πSNO(σCITY='天津'(S)) πSNO,PNO,JNO(SPJ)) πPNO(σCOLOR='红'(P)))
ALPHA语言表示:
RANGE SPJ SPJX
P PX
S SX
GET W(J.JNO): SPJX(SPJX.JNO=J.JNO ∧ SX(SX.SNO=SPJX.SNO ∧ SX.CITY='天津'
∧ PX(PX.PNO=SPJX.PNO ∧ PX.COLOR='红')))
(5)求至少使用了与供应商S1所提供的所有零件相同种类的工程项目代码JNO。
关系代数表达式:
πJNO,PNO(SPJ) ÷ πPNO(σSNO='S1'(SPJ))
ALPHA语言表示:
RANGE SPJ SPJX
SPJ SPJY
P PX
GET W(J.JNO): PX(SPJX(SPJX.PNO=PX.PNO ∧ SPJX.SNO='S1') → SPJY(SPJY.JNO=J.JNO ∧ SPJY.PNO=PX.PNO))
等值连接与自然连接的关系分析
自然连接是等值连接的一种特殊形式。两者都基于属性间相等条件进行连接操作,但存在关键区别:
- 在等值连接中,参与比较的属性可以具有不同的名称,结果中保留所有列,包括重复列。
- 而自然连接要求参与连接的属性必须同名,在连接后会自动去除重复的属性列,仅保留一份。
因此,自然连接可视为一种更严格的、去重后的等值连接。
[此处为图片7]关系代数的基本运算及其扩展能力
在八种常见的关系代数运算中,以下五种被视为基本运算:
- 并(∪)
- 差()
- 笛卡儿积(×)
- 选择(σ)
- 投影(π)
其余三种运算——交、连接和除——均可通过上述基本运算推导得出:
交运算:
R ∩ S = R (R S)
连接运算(θ-连接):
R AθB S = σAθB(R × S)
由此可见,这些复合运算是建立在基本操作之上的逻辑组合,体现了关系代数系统的完备性与表达力。
[此处为图片8](R × S)除运算表达式:
关系代数中的除法运算可表示为:
R(X, Y) ÷ S(Y, Z) = πX(R) πX(πX(R) × πY(S) R)
其中,X、Y、Z代表属性集合。虽然R中的Y与S中的Y可以具有不同的属性名称,但它们必须来源于相同的域。
二、补充习题
1. 选择题
题目:
- 关于关系模型,下列叙述不正确的是( )。
A. 一个关系至少要有一个候选码
B. 列的次序可以任意交换
C. 行的次序可以任意交换
D. 一个列的值可以来自不同的域 - 下列说法正确的是( )。
A. 候选码都可以唯一地标识一个元组
B. 候选码中只能包含一个属性
C. 主属性可以取空值
D. 关系的外码不可以取空值 - 关系操作中,操作的对象和结果都是( )。
A. 记录
B. 集合
C. 元组
D. 列 - 假设存在一张职工表,包含“性别”属性,要求该属性的值只能取“男”或“女”,这属于( )。
A. 实体完整性
B. 参照完整性
C. 用户定义的完整性
D. 关系不变性 - 有两个关系 R(A,B,C) 和 S(B,C,D),将 R 和 S 进行自然连接,得到的结果包含的列数为( )。
A. 6
B. 4
C. 5
D. 2
答案:
| 题号 | 1 | 2 | 3 | 4 | 5 |
|---|---|---|---|---|---|
| 答案 | D | A | B | C | B |
2. 判断题
题目:
- 关系模型的一个特点是实体以及实体之间的联系都可以使用相同的结构类型来表示。( )
- 关系模型中,非主属性不可能出现在任何候选码中。( )
- 在左外连接中,保留的是左边关系中所有的元组。( )
- 关系模式是对关系的描述,关系是关系模式在某一时刻的状态或内容。( )
答案:
| 题号 | 1 | 2 | 3 | 4 |
|---|---|---|---|---|
| 答案 | √ | √ | √ | √ |
3. 填空题
题目:
- 在关系模型中,关系操作包括查询、______ 和 ______ 等。
- 关系模型的三类完整性约束是指 ______、______ 和 ______。
- 关系模型包括8种查询操作,其中 ______、______、______、______ 和笛卡儿积是5种基本操作,其他操作可以用基本操作定义和导出。
- 职工(职工号,姓名,年龄,部门号)和部门(部门号,部门名称)存在引用关系,其中 ______ 是参照关系,______ 是外码。
答案:
- 插入、删除、修改(任选其二即可)
- 实体完整性、参照完整性、用户定义的完整性
- 选择、投影、差、并
- 职工、部门号
4. 问答题
题目:
- 说明什么是关系完备性。关系演算在语言表达能力上是完备的吗?
- 如果某数据库只有一个关系,是否就不存在参照完整性了?
答案:
- 关系完备性指的是某种查询语言能够表达所有可通过关系代数实现的查询能力。具备这种能力的语言被认为是关系完备的。关系演算在表达能力上是完备的,即它能表达所有关系代数所能表示的查询。
- 即使数据库只包含一个关系,参照完整性依然可能存在。例如,在课程表(课程号,课程名,学分,先修课)中,“课程号”为主码,“先修课”作为外码引用同一关系中的“课程号”。此时该关系既是被引用者也是引用者,体现了内部参照的完整性约束。
5. 综合题
题目:
- 假设有一个数据库包含以下关系模式:
Teacher (Tno, Tname, Tage, Tsex)
Department (Dno, Dname, DTno)
Work (Tno, Dno, Year, Salary)
各表含义如下:
- 教师表 Teacher:教师代码(Tno)、姓名(Tname)、年龄(Tage)、性别(Tsex)
- 系表 Department:系代码(Dno)、系名(Dname)、系主任代码(DTno)
- 工作表 Work:教师代码(Tno)、系代码(Dno)、入职年份(Year)、工资(Salary)
请用关系代数表达以下查询:
- a. 列出工资超过5000元的教师的不同年龄。
- b. 查找不在计算机系工作的教师代码。
- c. 系主任T1管辖范围内的所有教师姓名。
- d. 设 ρx(r) 表示关系 r 的别名为 x。已知每个教师都有工资记录,列出比D1系所有教师工资都高的教师代码。
续前题:
- 基于上述数据库结构,各关系实例数据如下:
Teacher 表:
| Tno | Tname | Tage | Tsex |
|---|---|---|---|
| T1 | 张丽 | 42 | 女 |
| T2 | 李波 | 45 | 男 |
| T3 | 王艳 | 33 | 女 |
| T4 | 赵明 | 29 | 男 |
Department 表:
| Dno | Dname | DTno |
|---|---|---|
| D1 | 计算机系 | T1 |
| D2 | 数学系 | T2 |
| D3 | 电子系 | NULL |
Work 表:
| Tno | Dno | Year | Salary |
|---|---|---|---|
| T1 | D1 | 1995 | 6000 |
| T2 | D2 | 1992 | 6500 |
| T3 | D1 | 2005 | 4500 |
设符号 表示左外连接, 表示右外连接,请使用关系代数完成以下查询,并给出具体结果:
- a. 列出所有教师的姓名以及所在的系名。
(3)设有两个关系:
S(A, B, C, D) 与 T(C, D, E, F),其中 S 包含 N 个元组,T 包含 N 个元组,且满足 N > N > 0。在保证表达式有意义的前提下,对以下各关系代数表达式分别计算其可能达到的最大元组数、最小元组数以及结果中的列数。
| 表达式 | 最大元组数目 | 最小元组数目 | 列的数目 |
|---|---|---|---|
| σA=10(S) | N | 0 | 4 |
| πA,B(S) | N | 1 | 2 |
| S T | N × N | 0 | 6 |
| πC,D(S) × T | N × N | N | 6 |
(1)
a. 查询工资高于5000的教师年龄,使用的关系代数表达式为:
πTage(σSalary>5000(Work Teacher))
b. 找出未在“计算机系”工作的所有教师编号,表达式如下:
πTno(Teacher) πTno(Work πDno(σDname='计算机系'(Department)))
c. 查找所属部门编号为'T1'的教师姓名,对应的关系代数为:
πTname(σDTno='T1'(Department) Work Teacher)
d. 求出在除'D1'部门之外还有任职记录的教师编号,表达式为:
πTno(Work) πWork.Tno(Work ρWork2(Work) σDno='D1'(Work2))
注:连接条件为 Work.Salary ≤ Work2.Salary。
(2)
a. 使用关系代数表达式 πTname, Dname(Teacher (Work Department)) 进行查询,其结果如下表所示:
| Tname | Dname |
| 张丽 | 计算机系 |
| 李波 | 数学系 |
| 王艳 | 计算机系 |
| 赵明 | NULL |
b. 若采用表达式 πTname, Dname((Teacher Work) Department),则查询结果为:
| Tname | Dname |
| 张丽 | 计算机系 |
| 李波 | 数学系 |
| 王艳 | 计算机系 |
| NULL | 电子系 |


雷达卡


京公网安备 11010802022788号







