Fork me on GitHub

数据库系统概论练习题之一

数据库第一套卷

一、选择题

1. 关系代数的四个组合操作是:选择、投影、连接、除法

理解:

  • 选择是按照某条件,筛选出部分行,这些行具有所有列的属性;
  • 投影是选取部分属性,形成新的表格,并去除重复记录;
  • 连接是按照公共属性,将多表的属性列汇总在一张表里;
  • 除法是A÷B时,A{X,Y},B{Y,Z},将A的X上各值看作一个整体{a1,a2,a3…}进行分组,如果某组,例如a1对应的A.Y能够包含所有的B.Y组合的情况,那么a1就是结果

2. SQL的DML操作有:排序插入修改等,但索引属于DDL操作

  • DML即数据操作语言
  • DDL包括模式定义、表定义、视图和索引的定义

3. 关系数据模型的三个组成部分:数据结构、数据操作、完整性约束

  • 数据结构。所描述对象类型的集合,是对系统静态特性的描述。通常可分为层次结构、网状结构和关系结构,并以此为模型命名(层次模型、网状模型、关系模型)
  • 数据操作。主要有查询和更新两大操作。是对系统动态特性的描述。
  • 完整性约束。是用来限定符合数据模型的数据库状态以及状态的变化,以保证数据的正确、有效、相容。

4. 关系数据库的规范化理论指出,关系数据库中的关系应满足一定的要求,最起码的要求是要达到1NF(第一范式),即满足:每一个分量必须是不可分的数据项。

  • 推荐阅读:MySQL (4) 第一范式 第二范式 第三范式 BC范式
  • [理解]1NF。表是平表,表中不能嵌套表。
  • [扩展]2NF。首先属于1NF,然后每一个非主属性完全函数依赖于码。(去掉码的冗余,不依赖于码的某一部分的属性,而是依赖于码的全部属性)。同时得出结论:如果属于1NF且码只有一个单一字段时,它一定符合2NF。
  • Y对X完全函数依赖 :X的所有元素同时确定Y,缺一个都不行。
  • 3NF。首先属于2NF,然后每一个非主属性不传递依赖于码。任何非主属性不依赖于其他非主属性。
  • 传递依赖:在一个关系模式S-L中,Sno->Sdept,Sdept->Sloc,可得Sno-(传递)->Sloc,因此此S-L具有传递依赖,不属于3NF,改进:将S-L模式分解为S-D(Sno->Sdept)和D-L(Sdept->Sloc)两个模式。
  • 但3NF并不彻底,可能存在主属性对码的部分依赖和传递依赖。使用BCNF补漏。
  • BCNF。首先属于1NF,若每一个函数依赖X->Y,若Y不属于X时X必含有候选码,则此关系模式属于BCNF。(每个决定因素必须包含键码)
  • 如果R属于BCNF,则R一定属于3NF;反之不一定成立。如果R属于3NF,且R只有一个候选码,则R属于BCNF。
  • 多值依赖。参见《数据库系统概论》第4版(王珊 萨师煊)P179页
  • 4NF。即使达到了BCNF,但如果存在多值依赖,仍然有大量数据冗余,所以可以用投影分解的方式来消去非平凡且非函数依赖的多值依赖。
  • 连续依赖、5NF等此处略去不谈。

5. 子模式DDL用来描述:数据库的局部逻辑结构

  • 子模式就是外模式,输入局部逻辑

6. 设有关系R(S,D,M) F= {S->D,D->M}。则关系R最多满足:3NF

  • 明显存在传递依赖所以不可能是BCNF及以上,但D、M可能是主属性,所以可能可以满足3NF。若是非主属性,那就不符合3NF,最多是2NF。由以上分析知,关系R最多满足3NF

7. DBMS在运行过程中建立的日志文件,主要用于对数据库的:数据库恢复

日志文件的具体作用:

  1. 事务故障恢复和系统故障恢复必须用日志文件;
  2. 在动态转储方式中必须建立日志文件,后备副本和日志文件结合起来才能有效地恢复数据库;
  3. 在静态转储方式中,也可以建立日志文件。当数据库毁坏后可重新装入后援副本把数据可恢复到转储结束时刻的正确状态,然后利用日志文件,把已完成的事务进行重做处理,对故障发生时尚未完成的事务进行撤销处理。
  • 转储:DBA将整个数据库复制到磁带或另一个磁盘上保存起来的过程。
  • 静态转储:在系统中无运行事务时进行转储,转储开始时数据库处于一致性状态。降低了数据库的可用性,转储必须等待用户事务结束,新的事务必须等待转储结束。
  • 动态转储:转储操作与用户事务并发进行,转储期间允许对数据库进行存取或修改,提高了可用性,但转储结束时后援副本的数据并不能保证正确有效,为此,必须把转储期间各事务对数据库的修改活动记录下来建立日志文件。
  • 海量转储:每次转储全部数据库。
  • 增量转储:每次只转储上一次转储后更新的数据。

8. 设R(U)是一个关系模式,X->Y是一个FD,如果对任何W属于X,W->Y都不成立,则称X->Y是:完全依赖

  • FD:Functional Dependency,函数依赖

9. 若事务T1已经给数据A加上了共享锁,则事务T2:只能对A加共享锁

  • 若事务T1对数据A加上了S锁,那么T1可以读A但不能修改A;其他事务只能对A加S锁不能加X锁,直到T1释放S锁。这就保证了其他事务可以读A,但在T释放A上的S锁之前不能对A做任何修改。

10. 公司中有多个部门和多名职员,每个职员只能属于一个部门,一个部门可以有多名职员,从职员到部门的联系类型是:一对多

  • 两个实体型之间的联系只有三种:一对一、一对多、多对多

11. 在下面的两个关系中,职工号和部门号分别为职工关系和部门关系的主码。在这两个关系的属性中,只有一个属性是外码,它是:职工关系的部门号

职工(职工号、职工名、部门号、职务、工资)
部门(部门号、部门名、部门人数、工资总额)


12. 将查询SC表的权限授予用户U,并允许这个用户有转授权,其SQL语句是:GRANT SELECT ON SC TO U WITH GRANT OPTION


13. 要保证数据库的逻辑独立性,需要修改的是:模式与外模式之间的映射

  • 分析详见问答题2

14. 在DBS中,DBMS和OS之间的关系是:DBMS调用OS

  • DBMS是位于用户与操作系统之间的一层数据管理软件,安装在OS之上的,必须调用OS才能将命令送入裸机执行;
  • DBMS的数据管理可以用OS的文件管理,也可以向OS申请空间自己管理;
  • 两者都是系统软件,不过OS更底层

15. 如果关系R中有4个属性和3个元组,关系S中有3个属性和5个元组,则R×S的属性个数和元组个数分别是:7和15

  • 笛卡尔积的列数为m+n,本题中为4+3=7;
  • 笛卡尔积的元组数为k1×k2,本题中为3×5=15

16. 一个m:n联系转换为一个关系模式。关系的码为:各实体码的组合

  • 实体之间的联系类型有:1:1,1:n,m:n三种
  • 没看懂,留个坑,回头补,参考《数据库系统概论》第4版(王珊 萨师煊)P225页

17. 恢复和并发控制的基本单位是:事务

  • 事务是恢复和并发控制的基本单位
  • 保证事务ACID特性是事务管理的重要任务。事务ACID特性遭到破坏的因素有:
    1. 多个事务并行运行时,不同事务的操作交叉执行;
    2. 事务在运行过程中被强行停止。
  • 为了降低以上两种情况的影响,DBMS设立了恢复机制和并发控制机制

18. 假设有如下事务:T1:在检查点之前提交;T2:在检查点之前开始执行,在检查点之后故障点之前提交;T3:在检查点之前开始执行,在故障点时还未完成;T4:在检查点之后开始执行,在故障点之前提交;T5:在检查点之后开始执行,在故障点时还未完成。在利用具有检查点的恢复技术进行恢复时,需要REDO的是:T2和T4

  • 参考本卷问答题第5题的解析

19. 下面的结论不正确的是:D

A. 若R.A->R.B,R.B->R.C 则R.A->R.C
B. 若R.A->R.B,R.A->R.C 则R.A->R.(B,C)
C. 若R.B->R.A,R.C->R.A 则R.(B,C)->R.A
D. 若R.(B,C)->R.A则R.B->R.A,R.C->R.A

easy 解略


20. 已知有关系模型R(sno,sname,age),其中sno表示学生的学号,类型Char(8),前4位表示入学年份。查询所有2003年入学的学生姓名(sname),SQL语句是:SELECT sname FROM R WHERE sno LIKE '2003%';

easy 解略



二 、判断题

1. SQL中的触发器机制是一种安全性控制机制

  • 错。触发器定义之后,任何用户对表的增删改操作均由服务器自动激活相应的触发器,在DBMS核心层进行集中的完整性控制。

2. 关系模式的各级范式之间满足的关系式1NF ∈ 2NF ∈ 3NF ∈ BCNF

  • 错。5NF ∈ 4NF ∈ BCNF ∈ 3NF ∈ 2NF ∈ 1NF

3. 关系代数、元组关系演算和域演算三种语言在表达能力上是完全等价的

  • 对。参考《数据库系统概论》第4版(王珊 萨师煊)P48页,原话。

4. 在关系模式R中,函数依赖X->Y的语义在R的某一关系中,若两个元组的X值相等,则Y也相等

  • 对。参见函数依赖的定义。参考《数据库系统概论》第4版(王珊 萨师煊)P172页

5. 数据库设计时应遵循规范化原则,并且规范化程度与数据库性能成正比

  • 错。规范化理论为数据库设计提供了理论的指南和工具,但仅仅是指南和工具。并不是规范化程度越高,模式就越好,而必须结合应用环境和现实世界的具体情况合理的选择数据库模式。

6. 对于一个处理少量元组的用户事务,以元组为封锁粒度比较合适

  • 对。
  • 选择封锁粒度时应该同时考虑封锁开销和并发度两个因素。
  • 需要处理大量元组的事务可以以关系为封锁粒度;
  • 需要处理多个关系的大量元组的事务可以以数据库为封锁粒度;
  • 处理少量元组的用户事务,以元组为封锁粒度比较合适

7. 用SQL语言进行数据操作需要了解存取路径

  • 错。物理独立性,无需了解存取路径

8. 数据库中只存放视图的定义而不存放视图对应的数据

  • 对。视图跟基本表不同,它是虚表

9. 无论在什么情况下,X->Y都是非平凡函数依赖,而Y->X都是平凡的函数依赖

  • 错。简直胡扯

10. 要保证数据库的逻辑独立性,需要修改的是模式与内模之间的映射

  • 错。应该是外模式与模式的映射


三、问答题

1. DBMS的功能有哪些?有哪些部分组成?

功能

  1. 数据定义功能;
  2. 数据组织、存储和管理,包括安全性保护、完整性检查、并发控制、数据库恢复等功能;
  3. 数据操纵功能;
  4. 数据库的事务管理和运行管理;
  5. 数据库的建立和维护功能;
  6. 其他功能—— DBMS与其他软件系统的通信功能,数据转换功能等;

组成部分

  • 数据库系统由数据库、数据库管理系统(及其开发工具)、应用系统、数据库管理员组成

2. 简述数据库的三层模式和两级独立性,两级独立性是如何实现的?

三层模式

  • 三层模式是指数据库系统是由外模式、模式、内模式三级构成。
  • 内模式——即存储模式,是数据在数据库内部的表示方式。例如,存储方式是堆存储,或某属性的升序存储,或属性值聚簇存储?索引按照B+树,还是Hash索引?数据是否压缩存储,是否加密等。一个数据库只有一个内模式。
  • 模式——即逻辑模式,是三级模式的中间层,是数据库数据在逻辑级上的视图。定义模式时,不仅要定义数据的逻辑结构,例如数据记录由哪些数据项构成、数据项名字、类型、取值范围等,而且要定义与数据有关的安全性、完整性要求。一个数据库只有一个模式。
  • 外模式——即子模式,是数据库用户能够看见并使用的数据视图,如果不同用户在应用需求、看待数据的方式、对数据保密的要求等方面存在差异,其外模式描述就是不同的。即使对同一数据,在外模式中的结构、类型、长度、保密级别都可以不同。但一个应用程序只能使用一个外模式。

两级独立性

  • 物理独立性逻辑独立性
  • 物理独立性指的是应用程序与数据存放在相互独立的磁盘地址,应用程序或数据的地址发生变化时都不影响对方,内模式与模式映像保证了其物理独立特性。
  • 逻辑独立性指的数据与程序逻辑结构上的独立特性,数据或应用程序的逻辑结构发生变化性都不影响对方,外模式与模式映像保证了其逻辑独立性。

两级独立性的实现

  • 两级独立性是通过二级映像功能来实现的。
    • 外模式/模式映像
    • 模式/内模式映像
  • 外模式/模式映像,一个模式可以有多个外模式,对应有多个此映像。当模式改变时(例如增加新的关系、属性或改变属性的数据类型等),由DBA对各个映像作相应改变,可以使外模式保持不变,从而应用程序不必修改,保证数据与程序的逻辑独立性。
  • 模式/内模式映像,此映像是唯一的,它定义了数据全局逻辑结构与存储结构之间的对应关系,当数据库的存储结构改变了,由DBA对此映像作相应改变,可以使模式保持不变,从而应用程序也不必改变,保证了数据与程序的物理独立性。

3. 事务有哪些重要性质?并对每个性质作简单描述

事务的性质

  • 事务具有原子性、一致性、隔离性、持续性,即ACID
  • 原子性。事务中包含的诸操作要么都做,要么都不做。
  • 一致性。与原子性密切相关,一个单独执行的事务应保证其执行结果的一致性。事务执行的结果是从一个一致性状态变到另一个一致性状态。如果数据库系统运行中发生故障,有些事务尚未完成就被迫中断,此时数据库处于不正确即不一致的状态。
  • 隔离性。一个事务的执行不能被其他并发的事务干扰,即一个事务内部的操作及使用的数据对其他并发事务是隔离的。
  • 持续性。即永久性,一个事务一旦提交,它对数据库中数据的改变就应该是永久的,即使随后系统出现故障也不会受到影响。

4. 设有关系R和S,计算R与S自然连接

R A B S B C
a b b c
c b e a
d e b d

答案:

A B C
a b c
a b d
c b c
c b d
d e a

5. 考虑事务T1、T2、T3的以下日志记录,假设系统刚好在最后一条日志记录之后就崩溃了,请指出在恢复过程中的重做事务集和撤销事务集?

<T1,start>
<T1,B,10,20>
<T2,start>
<T1,commit>
<T2,C,0,20>
<T3,start>
<T3,B,10,20>
<checkpoint{T2,T3,T4}>(检查点时刻)
<T3,C,10,20>
<T4,start>
<T3,commit>
<T4,D,10,0>
<T4,commit>

分析:系统崩溃发生的是系统故障,此时缓存丢失。

  1. 数据库为了提高性能,数据页在内存修改后并不是每次都会刷到磁盘上。checkpoint之前的数据页保证一定落盘了,这样之前的日志就没有用了,允许被覆盖
  2. 正向扫描日志文件,找到既有begin又有commit的 事务标记计入redo队列;找到仅有begin而无commit的事务计入undo队列;
  3. 反向扫描日志文件,对undo队列标记的事务执行逆操作,将日志记录更新前的值写入DB;
  4. 正向扫描日志文件,将日志记录更新后的值写入DB中
  5. T1在checkpoint之前完成commit,无需理会;
  6. T2在checkpoint时未commit,系统故障前仍未commit,所以在undo队列;
  7. T3在checkpoint时未commit,系统故障前commit,所以在redo队列;
  8. T4在checkpoint时未start,系统故障前start并commit,所以在redo队列;

答案:REDO队列中有T3和T4,UNDO队列中有T2.


6. 试简要叙述数据库设计的全过程包括哪些阶段?

  1. 需求分析阶段。准确了解和分析用户需求,包括数据与处理。
  2. 概念结构设计阶段。对用户需求进行综合、归纳与抽象。
  3. 逻辑结构设计阶段。将概念结构转换为某个DBMS所支持的数据模型,并优化。
  4. 物理设计阶段。为逻辑数据模型选取一个最适合应用环境的物理结构,包括存储结构和存取方法。
  5. 数据库实施阶段。运用SQL等语言,建立数据库,编制与调试应用程序,组织数据入库,并进行试运行。
  6. 数据库运行和维护阶段。正式运行时不断的评价、调整和修改。

7. 什么是日志文件,为什么登记日志时必须先写日志后写数据库?

日志文件

  • 用来记录事务对数据库的更新操作的文件,主要有两种格式:
    1. 以记录为单位的日志文件
    2. 以数据块为单位的日志文件
  • 登记日志必须遵守两条原则:
    1. 登记的次序严格按并发事务执行的时间次序
    2. 必须先写日志文件,后写数据库

为什么先写日志后写数据库?

  • 把对数据的修改写到数据库中和把表示这个修改的日志记录写到日志文件中是两个不同的操作,有可能在两个操作之间出现故障。
  • 如果先写了数据库修改,而因为故障没在运行记录中登记这个修改,那么以后将无法恢复这个修改了。
  • 如果先写日志但因为故障没有修改数据库,按日志文件恢复时只不过多执行一次不必要的UNDO操作,并不会影响数据库的正确性。
  • 所以为了安全,首先把日志记录写到日志文件中,然后写数据库的修改。

8.设教学数据库中有三个基本表,请用SQL语句表达下列查询。

学生表S(S#,SNAME,AGE,SEX)
选课表SC(S#,C#,GRADE)
课程表C(C#,CNAME,TEACHER)

(1)查询数据库课程成绩在90分以上的学生姓名

1
2
3
4
5
6
7
8
9
SELECT SNAME 
FROM S
WHERE S# IN
(SELECT S#
FROM SC
WHERE GRADE > 90 AND C# =
(SELECT C#
FROM C
WHERE CNAME = "数据库"));

(2)查询年龄大于23的女学生的学号和姓名

1
2
3
SELECT S#,SNAME
FROM S
WHERE SEX = "女” AND AGE > 23;

(3)查询”李梅”学生所学课程的课程名与任课老师名

1
2
3
4
5
6
7
8
9
SELECT CNAME,TEACHER
FROM C
WHERE C# IN
(SELECT C#
FROM SC
WHERE S# =
(SELECT S#
FROM S
WHERE SNAME = "李梅"));


四、综合题

1. 设关系模式R(ABCD),R上的FD集F={A->B,B->C,A->D,D->C},ρ={AB,AC,BD}是R的一个分解。

(1)相对于F,ρ是无损分解吗?

  1. 步骤一,最初
A B C D
AB a1 a2 b13 b14
AC a1 b22 a3 b24
BD b31 a2 b33 a4
  1. 步骤二 ,开始一次扫描,A->B后
A B C D
AB a1 a2 b13 b14
AC a1 a2 a3 b24
BD b31 a2 b33 a4
  1. 步骤三,B->C后
A B C D
AB a1 a2 a3 b14
AC a1 a2 a3 b24
BD b31 a2 a3 a4
  1. 步骤四,A->D后
A B C D
AB a1 a2 a3 b14
AC a1 a2 a3 b14
BD b31 a2 a3 b14
  1. 步骤五,D->C后无变化,一次扫描结束,但扫描前后表发生了变化
  2. 步骤六 ,开始二次扫描,A->B后,B->C后,A->D后,D->C后,结束二次扫描,扫描前后并无变化,也未得到某行成为(a1,a2,…,an)的结果
  3. 以上说明有损

(2)求F在ρ的每个子模式上的投影?ρ是否保持FD?

  • F在AB上的投影为{A->B}

  • F在AC上的投影为{A->C}

  • F在BD上的投影为空

  • ρ不能保持FD


2.现有如下关系模式:其中,Teacher(Tno,Tame,Tel,department,Bno,Bname,BorrowDate,Rdate,Backup)。Tno——教师编号,Tame——教师姓名,Tel——电话,department——所在部门,Bno——借阅图书编号,Bname——书名,BorrowDate——借书日期,Rdate——还书日期,Backup——备注。该关系模式的属性之间具有通常的语义,例如:教师编号函数决定教师姓名,即教师编号是惟一的,图书编号是惟一的,等等。请回答下述问题:

(1)教师编号是候选码吗?说明判断理由

  • 不是,教师编号无法唯一标识此元组,因为事实允许同一名教师借阅多本图书

(2)写出该关系模式的主码

  • 主码是(教师编号Tno、借阅图书编号Bno、借书日期)

(3)该关系模式中是否存在部分函数依赖?如果存在,请写出其中两个

  • 主码和教师姓名是部分函数依赖;
  • 主码和书名是部分函数依赖;
  • 主码和所在部门是部分函数依赖
  • etc

(4)该关系模式最高满足第几范式?并说明理由。

  • 存在非主属性对主码的部分依赖,所以不能是2NF或更高,故此关系模式最高为1NF
-------------The End-------------