本文整理了《数据库系统概论》(第6版 王珊、杜小勇、陈红)第二章“关系模型”的课后习题及补充习题答案,包含完整题目与对应解答,方便学习者对照参考、巩固知识点。

一、基础课后习题

1. 试述关系模型的三个组成部分。

关系模型由关系数据结构、关系操作集合,以及关系完整性约束三部分组成。

2. 简述关系数据语言的特点和分类。

关系数据语言可以分为三类:关系代数、关系演算,以及结构化查询语言(简称SQL,具有关系代数和关系演算双重特点)。

3. 定义并理解下列术语,说明它们之间的联系与区别:

(1)域,笛卡儿积,关系,元组,属性
  • 域:域是一组具有相同数据类型的值的集合。
  • 笛卡儿积:给定一组域 D1,D2,⋯ ,DnD_{1}, D_{2}, \cdots, D_{n}D1,D2,,Dn,允许其中某些域是相同的,这组域的笛卡儿积为

D1×D2×⋯×Dn={(d1,d2,⋯ ,dn)∣di∈Di,i=1,2,⋯ ,n} D_{1} × D_{2} × \cdots × D_{n}=\left\{\left(d_{1}, d_{2}, \cdots, d_{n}\right) | d_{i} \in D_{i}, i=1,2, \cdots, n\right\} D1×D2××Dn={(d1,d2,,dn)diDi,i=1,2,,n}

  • 关系:在域 D1,D2,⋯ ,DnD_{1}, D_{2}, \cdots, D_{n}D1,D2,,Dn 上笛卡儿积 D1×D2×⋯×DnD_{1} ×D_{2} ×\cdots ×D_{n}D1×D2××Dn 的子集称为关系,表示为

R(D1,D2,⋯ ,Dn) R\left(D_{1}, D_{2}, \cdots, D_{n}\right) R(D1,D2,,Dn)

  • 元组:关系中的每个元素称为元组。
  • 属性:关系也是一张二维表,表的每行对应一个元组,表的每列对应一个域。由于域可以相同,为了加以区分,必须给每列起一个名字,称为属性。
(2)候选码,主码,全码,主属性,非主属性,外码
  • 候选码:若关系模式中的某一属性或属性组的值能唯一地标识一个元组,而它的真子集不能唯一地标识一个元组,则称该属性或属性组为候选码。
  • 主码:若一个关系有多个候选码,则选定其中一个为主码。
  • 全码:若关系模式的所有属性组合起来才能唯一标识一个元组,则称该属性组为全码。
  • 主属性:包含在任何一个候选码中的属性称为主属性。
  • 非主属性:不包含在任何候选码中的属性称为非主属性。
  • 外码:设 F 是基本关系 R 的一个或一组属性,但不是关系 R 的码,如果 F 与基本关系 S 的主码 Ks 相对应,则称 F 是基本关系 R 的外部码,简称外码。
(3)关系模式,关系,关系数据库
  • 关系模式:关系的描述称为关系模式,表达式为

R(U,D,DOM,F) R(U, D, DOM, F) R(U,D,DOM,F)

其中 R 为关系名,U 为组成该关系的属性集合,D 为 U 中属性所来自的域,DOM 为属性向域的映像集合,F 为属性间数据依赖关系的集合。

  • 关系:关系是关系模式在某一时刻的状态或内容。关系模式是静态的、稳定的,而关系是动态的、随时间不断变化的。
  • 关系数据库:关系数据库的型称为关系数据库模式,是对关系数据库的描述,它包括若干域的定义以及在这些域上定义的若干关系模式。关系数据库的值是这些关系模式在某一时刻对应的关系的集合,通常称为关系数据库。

4. 举例说明关系模式和关系的区别。

关系模式是型,关系是值,是关系模式的实例。例如,Student(Sno,Sname,Sage)是关系模式,下面的表是关系,即某一时刻关系模式的值:

Sno Sname Sage
S1S_{1}S1 张俊丽 181818
S2S_{2}S2 李红钰 191919
S3S_{3}S3 王敏英 191919

5. 试述关系模型的完整性约束。在参照完整性中,什么情况下外码属性的值可以为空值?

关系模型中有三类完整性约束:实体完整性、参照完整性和用户定义的完整性。实体完整性和参照完整性是关系模型必须满足的完整性约束,用户定义的完整性是指针对某一具体应用场景,关系数据库需要满足的约束条件,反映某一具体应用所涉及的数据必须满足的语义要求。

在参照完整性中,如果外码属性不是其所在关系的主属性,则外码属性的值可以取空值。

6. 设有一个SPJ数据库,包括4个关系模式S、P、J及SPJ:

S(SNO, SNAME, STATUS, CITY);P(PNO, PNAME, COLOR, WEIGHT);J(JNO, JNAME, CITY);SPJ(SNO, PNO, JNO, QTY)。
供应商表S由供应商代码(SNO)、供应商姓名(SNAME)、供应商状态(STATUS)和供应商所在城市(CITY)组成。
零件表P由零件代码(PNO)、零件名(PNAME)、颜色(COLOR)和重量(WEIGHT)组成。
工程项目表J由工程项目代码(JNO)、工程项目名(JNAME)和工程项目所在城市(CITY)组成。
供应情况表SPJ由供应商代码(SNO)、零件代码(PNO)、工程项目代码(JNO)和供应数量(QTY)组成,表示某供应商供应某种零件给某工程项目的数量为QTY。
试用关系代数、元组关系演算语言ALPHA和域关系演算语言QBE完成如下查询:

(1)求供应工程项目J1零件的供应商代码SNO。
  • 关系代数:

πSNO(σJNO=′J1′(SPJ)) \pi_{SNO}\left(\sigma_{JNO='J1'}(SPJ)\right) πSNO(σJNO=J1(SPJ))

  • ALPHA语言:
    GET W(SPJ.SNO): SPJ.JNO=‘J1’
(2)求供应工程项目J1零件P1的供应商代码SNO。
  • 关系代数:

πSNO(σJNO=′J1′∧PNO=′P1′(SPJ)) \pi_{SNO}\left(\sigma_{JNO='J1' \land PNO='P1'}(SPJ)\right) πSNO(σJNO=J1PNO=P1(SPJ))

  • ALPHA语言:
    GET W(SPJ.SNO): SPJ.JNO=‘J1’ ∧ SPJ.PNO=‘P1’
(3)求供应工程项目J1红色零件的供应商代码SNO。
  • 关系代数:

πSNO(σJNO=′J1′(SPJ)⋈σCOLOR=′红′(P)) \pi_{SNO}\left(\sigma_{JNO='J1'}(SPJ) \bowtie \sigma_{COLOR='红'}(P)\right) π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))) \begin{gathered} \pi_{JNO}(J)-\pi_{JNO}\left(\pi_{SNO}\left(\sigma_{CITY='天津'}(S)\right) \bowtie \pi_{SNO, PNO, JNO}(SPJ)\right. \\ \left.\bowtie \pi_{PNO}\left(\sigma_{COLOR='红'}(P)\right)\right) \end{gathered} π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)) \pi_{JNO, PNO}(SPJ) ÷ \pi_{PNO}\left(\sigma_{SNO='S1'}(SPJ)\right) π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. 试述等值连接与自然连接的区别和联系。

自然连接是一种特殊的等值连接,它要求两个关系中进行比较的分量(即连接属性)必须是同名的属性列,并且要在结果中把重复的属性列去掉。

8. 关系代数的基本运算有哪些?如何用这些基本运算来表示其他运算?

在8种关系代数运算中,并、差、笛卡儿积、投影和选择5种运算为基本运算,其他3种运算(交、连接和除)均可以用这5种基本运算来表达:

  • 交运算:

R∩S=R−(R−S) R \cap S=R-(R-S) RS=R(RS)

  • 连接运算:

R⨂AθBS=σAθB(R×S) R \bigotimes_{A \theta B} S=\sigma_{A \theta B}(R × S) RAθBS=σAθB(R×S)

  • 除运算:

R(X,Y)÷S(Y,Z)=πX(R)−πX(πX(R)×πY(S)−R) R(X, Y) ÷ S(Y, Z)=\pi_{X}(R)-\pi_{X}\left(\pi_{X}(R) × \pi_{Y}(S)-R\right) R(X,Y)÷S(Y,Z)=πX(R)πX(πX(R)×πY(S)R)

其中,X、Y、Z为属性组,R中的Y和S中的Y可以有不同的属性名,但必须出自相同的域集。

二、补充习题

1. 选择题

题目

(1)关于关系模型,下列叙述不正确的是()。
A.一个关系至少要有一个候选码
B.列的次序可以任意交换
C.行的次序可以任意交换
D.一个列的值可以来自不同的域

(2)下列说法正确的是()。
A.候选码都可以唯一地标识一个元组
B.候选码中只能包含一个属性
C.主属性可以取空值
D.关系的外码不可以取空值

(3)关系操作中,操作的对象和结果都是()。
A.记录
B.集合
C.元组
D.列

(4)假设存在一张职工表,包含"性别"属性,要求该属性的值只能取"男"或"女",这属于()。
A.实体完整性
B.参照完整性
C.用户定义的完整性
D.关系不变性

(5)有两个关系 R(A,B,C)R(A, B, C)R(A,B,C)S(B,C,D)S(B, C, D)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)关系模式是对关系的描述,关系是关系模式在某一时刻的状态或内容。()

答案
题号 1 2 3 4
答案

3. 填空题

题目

(1)在关系模型中,关系操作包括查询、和______等。
(2)关系模型的三类完整性约束是指

(3)关系模型包括8种查询操作,其中______、、______和笛卡儿积是5种基本操作,其他操作可以用基本操作定义和导出。
(4)职工(职工号,姓名,年龄,部门号)和部门(部门号,部门名称)存在引用关系,其中______是参照关系,______是外码。

答案

(1)插入、删除、修改(任选其二即可)
(2)实体完整性、参照完整性、用户定义的完整性
(3)选择、投影、差、并
(4)职工、部门号

4. 问答题

题目

(1)说明什么是关系完备性。关系演算在语言表达能力上是完备的吗?
(2)如果某数据库只有一个关系,是否就不存在参照完整性了?

答案

(1)关系完备性是指一种查询语言能够表示关系代数可以表示的所有查询。关系演算具有完备的表达能力。
(2)如果数据库只有一个关系,仍然可能存在参照完整性。例如在课程(课程号,课程名,学分,先修课)中,“课程号”是主码,“先修课”属性是外码,它参照了本关系主码“课程号”,该例子说明单独一个关系可以既是参照关系又是被参照关系,刻画了关系内部互相参照的完整性约束。

5. 综合题

题目

(1)假设有一个数据库包含以下关系模式:
Teacher (Tno, Tname, Tage, Tsex) /主码斜体/
Department (Dno, Dname, DTno)
Work (Tno, Dno, Year, Salary)
教师表Teacher由教师代码(Tno)、教师姓名(Tname)、教师年龄(Tage)、教师性别(Tsex)组成。
系表Department由系代码(Dno)、系名(Dname)、系主任代码(DTno)组成。
工作表由教师代码(Tno)、系代码(Dno)、入职年份(Year)、工资(Salary)组成。
试用关系代数表示每个查询:
a.列出工资超过5000元的教师的不同年龄。
b.查找不在计算机系工作的教师代码。
c.系主任T1管辖范围内的所有教师姓名。
d.假设对于关系r,ρx(r)\rho_{x}(r)ρx(r) 表示别名为 x 的一个相同的关系,系里的每个教师都有工资,列出比D1系的所有教师工资都高的教师代码。

(2)考虑(1)描述的数据库,每个关系包含的元组如下:
Teacher

Tno $ Tname $ $ Tage $ Tsex
T1T1T1 张丽 424242 女女
T2T2T2 李波 45
T3T3T3 王艳 333333
T4T4T4 赵明 292929

Department

Dno Dname DTno
D1D1D1 计算机系 T1T1T1
D2D2D2 数学系 T2T2T2
D3D3D3 电子系 NULL

Work

Tno Dno Year Salary
T1T1T1 D1D1D1 1995 6000
T2T2T2 D2D2D2 1992 6500
T3T3T3 D1D1D1 2005 4500

假设符号⟕、⟖分别表示左外连接、右外连接,使用关系代数完成以下查询并给出结果:
a.列出所有教师的姓名以及所在的系名。
b.列出所有系的名称以及包含的教师姓名。

(3)有两个关系 S(A,B,C,D)S(A, B, C, D)S(A,B,C,D)T(C,D,E,F)T(C, D, E, F)T(C,D,E,F),分别包括 N1N_{1}N1N2N_{2}N2 个元组,N2>N1>0N_{2}>N_{1}>0N2>N1>0,对于下列每个关系代数表达式,计算在使表达式有意义的情况下可以得到的最大、最小的元组数目以及列的数目。

σA=10(S),πA,B(S),S⋈T,πC,D(S)×T \sigma_{A=10}(S), \pi_{A, B}(S), S \bowtie T, \pi_{C, D}(S) × T σA=10(S),πA,B(S),ST,πC,D(S)×T

答案

(1)
a. πTage(σSalary>5000(Work⋈Teacher))\pi_{Tage}\left(\sigma_{Salary>5000}(Work \bowtie Teacher)\right)πTage(σSalary>5000(WorkTeacher))
b. πTno(Teacher)−πTno(Work⋈πDno(σDname=′计算机系′(Department)))\pi_{Tno } (Teacher) -\pi_{Tno }\left( Work \bowtie \pi_{Dno }\left(\sigma_{Dname ='计算机系' }( Department )\right) \right)πTno(Teacher)πTno(WorkπDno(σDname=计算机(Department)))
c. πTname(σDTno=′T1′(Department)⋈Work⋈Teacher)\pi_{Tname}\left(\sigma_{DTno='T1'}(Department) \bowtie Work \bowtie Teacher\right)πTname(σDTno=T1(Department)WorkTeacher)
d. πTno(Work)−πWork.Tno(Work⋈ρWork2(Work)⋈σDno=′D1′(Work2))\pi_{Tno } (Work) -\pi_{Work.Tno }\left( Work \bowtie \rho_{Work2}(Work) \bowtie \sigma_{Dno='D1'}(Work2) \right)πTno(Work)πWork.Tno(WorkρWork2(Work)σDno=D1(Work2))(连接条件:Work.Salary ≤ Work2.Salary)

(2)
a. 关系代数
πTname,Dname(Teacher⟕(Work⋈Department))\pi_{Tname, Dname}(Teacher ⟕ (Work \bowtie Department))πTname,Dname(Teacher(WorkDepartment))
结果:

$ Tname $ Dname
张丽 计算机系
李波 数学系
王艳 计算机系
赵明 NULL

b. 关系代数:
πTname,Dname((Teacher⋈Work)⟖Department)\pi_{Tname, Dname}((Teacher \bowtie Work) ⟖ Department)πTname,Dname((TeacherWork)Department)
结果:

$ Tname $ Dname
张丽 计算机系
李波 数学系
王艳 计算机系
NULL 电子系

(3)

表达式 最大元组数目 最小元组数目 列的数目
σA=10(S)\sigma_{A=10}(S)σA=10(S) N1N_{1}N1 000 444
πA,B(S)\pi_{A, B}(S)πA,B(S) N1N_{1}N1 111 222
S⋈TS \bowtie TST N1×N2N_{1} ×N_{2}N1×N2 000 666
πC,D(S)×T\pi_{C, D}(S) ×TπC,D(S)×T N1×N2N_{1} ×N_{2}N1×N2 N2N_{2}N2 666
Logo

DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。

更多推荐