青岛模板自助建站,旅游网站建设与规划,农村电商平台怎么做,1688网站上自己做模版数据库搞得人一头雾水#xff0c;题型太多太杂#xff0c;已经准备摆烂了。就刷刷往年试卷#xff0c;挂不挂听天由命。
2019年
Question 1 选择题
1. R ∩ S R∩S R∩S等于一下哪个选项#xff1f;
画个文氏图秒了 所以选A. R ∩ S R − ( R − S ) R∩SR-(R-S) R∩…数据库搞得人一头雾水题型太多太杂已经准备摆烂了。就刷刷往年试卷挂不挂听天由命。
2019年
Question 1 选择题
1. R ∩ S R∩S R∩S等于一下哪个选项
画个文氏图秒了 所以选A. R ∩ S R − ( R − S ) R∩SR-(R-S) R∩SR−(R−S)
2.哪个操作要求两个参与的关系具有相同数量的属性
A.外连接Outer join先看定义参见上一篇数据库的期末笔记 我们以左外连接为例子。假设有两个关系表表 A员工表和表 B部门表通过员工所属部门 ID 进行连接。表 A 有员工 ID、员工姓名、部门 ID 等字段表 B 有部门 ID、部门名称等字段。如果使用左外连接那么会返回表 A 中的所有员工记录即使某些员工在表 B 中没有对应的部门信息即部门 ID 在表 B 中不存在这些员工记录也会被返回只是对应的部门名称等右表字段会显示为 NULL。 B.自然连接Natural join直接举例子C.笛卡尔积Cartesian product最复杂的一个很常考我们这里先举个简单的例子D. 并集Union并集操作要求两个参与的关系具有相同数量的属性并且对应属性的数据类型也必须相同故选D。
3.投影PROJECTION操作对应下列哪一个语句
首先我们要知道投影是啥去查一下定义
A. HAVING子句通常用于在分组查询中对分组结果进行筛选与投影操作的功能不同。B. SELECT子句用于指定要从数据库中检索的列这与关系代数中的投影操作是类似的都是对列的选择。例如在关系代数中如果有一个关系R(A,B,C)进行投影操作π_{A,B}(R)就是选择R关系中的A和B列在 SQL 中SELECT A,B FROM R也是选择R表中的A和B列。C. FROM子句用于指定要查询的表或视图它主要是确定数据的来源而不是对列的选择与投影操作不对应。D. WHERE子句用于在查询中设置条件对行进行筛选而不是对列的选择与投影操作的功能不同。
4.关系 R ( A , B , C ) R(A,B,C) R(A,B,C)包含 10 10 10个元组关系 S ( A , D , E , F ) S(A,D,E,F) S(A,D,E,F)包含 15 15 15个元组。那么“ R R R自然全外连接 S S S”的操作结果不可能是____。
自然连接是啥我们第一题刚刚讲过观察那个例子我们发现自然连接的结果中最少是原本元组多的那个关系的元组数最多是原本的两个关系的元组数相加为什么呢还是看刚才那个例子假如三个课程分属不同系而两个学生不在这两个系中的任何系最后的结果自然每个系都要占一行也就是6行而如果每个学生所在的系都在课程表中有对应的话自然是行数最小的情况至少每个课程要占据一行吧。 回到这一题B选项的10个元组自然就是不可能的。
5.哪个指令用于删除一个表
在SQL中DROP TABLE是用于删除表的标准命令。DELETE通常用于删除表中的数据行而不是删除整个表REVOKE用于撤销用户的权限与删除表无关REMOVE不是SQL中用于删除表的正确语法。
6.哪条指令可以正确地找到所有姓氏不是“Zhang”的学生
首先前面肯定是SELECT name FROM student WHERE问题就是后面如何操作首先我们要知道如何筛选姓Zhang的姓Zhang意味着名字最前面是Zhang按照SQL的查询规则我们要输入Zhang%然后因为我们用了%表示后面接什么都算所以这是一个模糊匹配不能使用不等于这样一个语法必须使用like或者not like没有is not like这种语法然后我们要的是不姓“Zhang”的所以最后就选C.SELECT name FROM student WHERE name not like Zhang%。
7.下列哪个指令和NOT IN等价
首先上一题我们说了是不等于ALL就是遍历后面集合的所有元素必须全部不相等才算也就是和NOT IN等价选A。而SOME则是只要不等于集合中其中一个元素就算。
8.下列哪些说法是正确的
首先我们要知道NULL的比较规则参考这里 所以A和B肯定是错的C是对元组的比较就元组而言两个元组诗完全相等的所以选C。
9.程序员在哪个层级与数据交互
在概念总结的第一章就有提到 你就想奥你不是手搓数据库的话肯定不至于去物理层视图层又是给用户用的所以选B逻辑层。
10.如果从实体集A到实体集B的映射基数是多对一那么A中的一个实体与B中的多少实体相关联
这不是顾名思义除非你看不懂题目many to one不知道是多对一的意思答案选A至多一个。
11.一个或多个属性的最小集合足以唯一地区分每个实体被称为什么
先看定义 所以肯定选B候选码。
12.下列哪个是商业数据库系统中使用的一种非过程性语言
你不需要知道别的总不可能不知道SQL是一种非过程性语言吧选C。
13.关系模式是由什么组成
关系模式是对关系可以简单理解为数据库中的表结构的一种抽象描述它是一组属性attributes的集合所以选B。 说人话怎么理解呢关系模式就是那个表的首行就是写着每一列存什么元素的那一行存储的是一个填表格的规则。
14.在关系数据库系统中哪种属性被特征化了
先看定义 然后特征化又是啥呢专业地说就是可以理解为对某种事物这里指属性的典型特点、性质或表现形式进行明确的界定和描述使其具有独特的、可识别的标志或属性以便与其他事物区分开来。简单来说就是具有不可分割性。那么在选项中就只有简单属性满足这一条件选A。
15.E-R 图使用什么来表示关系集 看课本上的图6.3作为例子左右两个矩形框是实体集分别是老师和学生里面标好了这两个集内的属性中间那个advisor表示教师和学生之间具有advisor这一关系翻译成中文就是教导关系所以关系集是以菱形表示的选B。
16.观察表格内的关系哪个函数依赖是可能的
这种题我们就看左右关系是不是唯一地比如A选项是A -- (D,E)那么要求是A这一列为不同值时(D,E)的组合一定不同这一题就是选A。我们以B为反例看一看B选项D -- A但是我们看到表格中D这一列出现了两次d4而且每次出现对应那一行的A还不一样分别是a3和a4所以这一个依赖关系自然就不成立。
17.假设我们将模式 r(A,B,C) 分解为 r1(A,B) 和 r2(A,C)。哪个函数依赖能让这次分解是无损分解
按照惯例先看定义 那也就是说无损分解是指将一个关系模式分解为多个子模式后通过对这些子模式进行自然连接操作可以还原到原来的关系模式且不会产生多余的元组信息不会丢失。
A.或两边的情况是等价的我们就看B--A你想一下这何止是有损我们合并的时候先把没变动的r2抄下来然后我们已知的AC都无法定位任何一个B直接超级大展开数据给我损完了都B.和上面类似我必须有(B,C)才能确定唯一地A但是我在合并的中途上哪给你找(A,B)的组自然也是有损C.还是刚才那个流程我们把r2抄下来现在有A和C我们的A刚好都可以定位唯一的一个B那我们这个B可以尽可能不加行地塞到已有的行里面这是无损的选C
18.假设 R(X,Y,Z) 有三个单属性 X、Y 和 Z。如果 (X,Y,Z) 是候选码那么以下哪个陈述成立
先看定义 然后我们还知道候选码是足以区分每个实体的最小属性集合也就是说比(X,Y,Z)元素少的集合是必然不足以区分每个实体的再加上这个关系R一共就这么三个属性所以(X,Y,Z)是唯一的候选键自然能保证所有函数依赖的左部都包含任一也是唯一的候选键故 R ∈ B C N F R∈BCNF R∈BCNF选A。
19.以下哪一性质确保事务的所有影响要么都反映在数据库中要么都不反映
定义位于第13章直接秒了选A。
20.检查点的执行不进行哪一步操作
检查点Checkpoint的作用和执行过程检查点是数据库管理系统中用于恢复的一种机制。它的主要目的是减少系统故障恢复时需要处理的日志量提高恢复效率。在执行检查点时通常会进行以下操作 A选项将当前驻留在主存中的所有日志记录输出到稳定存储如磁盘等非易失性存储这样可以确保日志记录的持久性以便在故障恢复时使用这是检查点执行的一部分。B选项将所有已修改的缓冲块输出到磁盘这是为了确保数据的一致性和持久性也是检查点的重要操作之一。D选项将形如 checkpoint L 的日志记录输出到稳定存储用于标记检查点的位置方便后续恢复操作这是检查点执行过程中的一个关键步骤。C选项仅仅写入一个缓冲块这并不能完成检查点的整体功能和目的检查点需要对整个系统的状态进行记录和保存包括日志记录和已修改的数据块等而不是单个缓冲块的写入所以C选项不是检查点的执行方式。 所以选C。
Question 2 写关系代数表达式和SQL语句
首先题目说了我们有这么一个数据库
member(no, name, age)
book(isbn, title, author, publisher)
borrowed(mem_no, isbn, date)那就是说有这么个图书馆的数据库有三个表分别记录了用户信息id姓名年龄书籍信息isbn书名作者出版商和借书信息借书人的id书的isbn借书时间
1.写关系代数表达式查询’2019-12-25’借出的所有书的isbn
先看看这个关系代数表达式详细教程吧家人们写出来长这样 π i s b n ( σ d a t e ′ 2019 − 12 − 2 5 ′ ( b o r r o w e d ) ) \pi_{isbn}(\sigma_{date 2019-12-25}(borrowed)) πisbn(σdate′2019−12−25′(borrowed))简单解释一下先是我们选择题遇到过的投影操作也就是 π \pi π下标表示选择的是哪一列我们要看isbn所以肯定选择isbn那一列嘛。然后是要选择日期为’2019-12-25’的元组选择就是 σ \sigma σ下标表示要求date 2019-12-25也就是日期这一项得等于’2019-12-25’最后那个括号表示我们是在borrowed这个表里面去查询的。
2.写关系代数表达式和SQL语句查询所有借过’Database System’这本书的用户的名字
首先我们先理清楚思路因为书名人名和借书信息分属三个表所以我们肯定要先连接一下子然后我们直接查询书名为Database System的元组的人名就行了对吧但是现在还有一个问题同样是用户idborrowed表里面存的叫mem_idmember里面直接存的就叫id为了解决这个不同名的情况我们可以用笛卡尔积然后选择时加一个mem_idid的条件
关系代数表达式 π n a m e ( σ n o m e m n o ⋀ t i t l e ′ D a t a b a s e S y s t e m ′ ( m e m b e r × ( b o r r o w e d ⋈ b o o k ) ) \pi_{name}(σ_{nomem_no⋀ titleDatabase System}(member×(borrowed⋈book)) πname(σnomemno⋀title′DatabaseSystem′(member×(borrowed⋈book))
SQL语句
select name
from member, borrowed natural join book
where nomem_no and titledatabase system3.写关系代数表达式和SQL语句查询每个出版商出版作者为’Lu Xun’的书籍的数量
先选取所有鲁迅写的书作为一个集合然后根据isbn去给每个出版商计数不按书名是因为书名可能会重可能两家出版社出版了两种不同的《呐喊》这种情况
关系代数表达式 π p u b l i s h e r , c o u n t ( i s b n ) ( σ a u t h o r ′ L u X u n ′ ( b o o k ) ) \pi_{publisher, count(isbn)}(\sigma_{author Lu Xun}(book) ) πpublisher,count(isbn)(σauthor′LuXun′(book))
SQL语句
SELECT publisher, COUNT(isbn)
FROM book
WHERE author Lu Xun
GROUP BY publisher;4.写SQL语句查询所有借书数量比编号1001的用户多的用户的编号
select mem_no
from borrowed
group by mem_no
having count(isbn)(select count(isbn)
from borrowed
where mem_no1001)5.用SQL语句查询所有借过’SCAU Press’出版的书的用户的名字
select name
from member as m
where not exist ( (select isbn
from book
where publisherSCAU press)
except
(select isbn
from borrowed
where mem_nom.no) )Question 3 画E-R图以及写关系模式
1.为以下情况绘制 E-R 图一部小说由且仅由一位作者撰写。小说写完后由且仅由一家出版商出版。每部小说可以在许多不同的书店以不同的价格出售。一部小说具有诸如 ID、名称、字数、类型等属性。一位作者具有诸如 ID、姓名、国籍、生日等属性。一家出版商具有诸如 ID、名称、资产、电话号码等属性。一家书店具有诸如 ID、名称、位置、电话号码等属性。
上面选择题的时候我们已经简单聊过了E-R图当时说的内容基本足以画出这一题的E-R图了值得注意的几个点包括
每个书店会以不同的价格出售同一本书所以有价格这样一个标签连在出售关系上关系集有的时候要有箭头还有就是被连接的两个属性集的关联项要加下划线
2.将你的 E-R 图转换为关系模式。指定每个模式的主键和外键。你可以按照以下格式书写答案“R (a1, a2, a3, a4), 外键: a4”。
主要难处理的就是price那一片嘛其实就比较自由只要能把整个关系弄清楚就行答案上这一部分他就直接开了一个新的Sold表连到Bookstore和Novel上面还加了bookstore_ID之类的属性
Novel(ID, name, words, type, publisherID, writerID), foreign key: publisherID (reference publisher(ID)), writerID (reference writer(ID))
Writer(ID, name, nationality, birthday)
Publisher(ID, name, asset, phone)
Bookstore(ID, name, location, phone)
Sold(novel_ID, bookstore_ID, price), foreign key: novel_ID(reference novel(ID)), bookstore_ID(reference bookstore(ID))Question 4 关系模式的操作
考虑关系模式 R (A,B,C,D) 上的以下函数依赖集 F A → C C → A B → AC D → AC
1.计算 ( A D ) {(AD)}^{} (AD)
首先我们要知道 ( A D ) {(AD)}^{} (AD)是个什么东西如果你对离散数学还有印象这个东西叫闭包那我们怎么算呢 就是首先一个集合把A和D先放进去然后去上面那个依赖集里面找A都指向谁了指向了C那把C也放进来再看D指向AC了已经都在里面了就别管然后新加进来的也要再找这里C是指向A已经在里面了所以最后的答案就是 { A , C , D } \{A,C,D\} {A,C,D}
2.为上述函数依赖集F计算一个规范覆盖给出推导的每一步并加以解释
首先老问题规范覆盖是个什么东西其实就是对我们的依赖集进行一波简化。举个例子A--C,A--B,B--C这三个关系同时出现的前提下你会发现A--C这句话毫无意义再举个例子AB--C,A--C里面这个AB--C也同样是多余的这些多余的内容我们就可以直接删掉 这题答案就是这样的 答案把依赖写的方方正正的很好看但是实际考试的时候写个集合的大括号然后全部往里一丢也是可以的
3.列出R的候选键
候选键总不用解释了吧就是你这个ABCD最少要确定几个元素或组能够确定一个元组的所有内容 那怎么写呢我们就从小往大试先看ABCD只选一个能不能确定元组发现都不行就再试两个的发现BD能确定那就不要再往更大的找了答案就是BD
4.使用原始的函数依赖集给出仅进行一次BCNF分解的R的分解
对于函数依赖 A → CA 不是候选键这就意味着存在以非候选键作为决定因素的函数依赖不符合 BCNF 要求所以需要基于此进行分解。那就把AC分成一组另外一组现在是BD但是他们没有直接的关系我们再加一个A进去他们就满足BCNF了所以就可以将ABCD分解为AC和ABD。
5.基于规范覆盖给出R的3NF分解
BCNF我们选择题遇到了但是3NF还是第一次遇到所以先看定义 对于 F c { A C , C A , B A , D A } F_c\{ A C, C A, B A, D A\} Fc{AC,CA,BA,DA}我们这样考虑
对于 A → C A\rightarrow C A→C和 C → A C\rightarrow A C→A 这两个函数依赖表明 A A A和 C C C之间是相互决定的关系。所以将它们组合成一个关系模式 A C AC AC在这个关系模式中 A A A和 C C C都是主属性因为它们都能相互决定对方不存在非主属性对候选键在这里 A A A和 C C C都可以看作候选键的传递函数依赖满足3NF。 对于 B → A B\rightarrow A B→A 根据这个函数依赖创建关系模式 B A BA BA。在这个关系模式中 B B B是决定因素 A A A是被决定因素。 B B B可以看作主属性 A A A在这里是非主属性但不存在通过其他非主属性来间接决定 A A A的情况所以满足3NF。 对于 D → A D\rightarrow A D→A 同理由这个函数依赖得到关系模式 D A DA DA。 D D D是主属性 A A A是非主属性不存在传递函数依赖满足3NF。 添加 B D BD BD 回顾候选键相关知识为了确保不丢失候选键相关的信息虽然在题目描述中没有详细提及如何确定需要添加 B D BD BD但一般是为了完整地通过候选键来关联各个关系模式添加关系模式 B D BD BD。在这个关系模式中 B B B和 D D D可以看作主属性不存在非主属性对候选键的传递函数依赖满足3NF。而且通过 B D BD BD与其他关系模式如 B A BA BA和 D A DA DA的关联可以更好地保证数据的完整性和一致性。
Question 5 事务管理
有以下两个事务
T1: read(A)read(B)If A1 then B:B*2;write(B)T2: read(B)read(A)If B1 then A:A*2;write(A)设一致性要求为 A 1 或 B 1 A 1 或 B 1 A1或B1初始值为 A B 1 A B 1 AB1。
1.证明涉及这两个事务的每一个串行执行都能保持数据库的一致性并计算A和B的最终结果
按照惯例先查定义 那也就是说两个轮流进行吗简单盘一下不难知道如果T1先进行的话那最后A1,B2反之是A2,B1都是满足一致性要求的
2.向事务T1和T2添加加锁和解锁指令使它们遵循两阶段锁协议。这些事务的执行会导致死锁吗
上锁解锁其实就是用前用后加一行代码而已 T1加锁解锁就是这样
lock-S(A)
read(A)
lock-X(B)
read(B)
if A 1
then B : B*2
write(B)
unlock(A)
unlock(B)T2是这样的
lock-S(B)
read(B)
lock-X(A)
read(A)
if B 1
then A : A *2
write(A)
unlock(B)
unlock(A)都这么问了肯定是会出现死锁的万一两个一起运行T1把B锁了然后T2想读就等着T1给他解锁大概就像这样
3.展示T1和T2的一个并发执行产生一个不可串行化的调度
简单来说就是如果两个同时执行在一个特定的情况下 B在更新之后还没有写会数据库所以在T2里面B还是1就导致最后A和B都变成2了就破坏了一致性
4.解释术语串行调度和可串行化调度之间的区别
一个其中所有属于单个事务的指令都连续出现的调度被称为串行调度。可串行化调度是一种并发调度它具有一个较弱的限制即它应该与某个串行调度等价。 具体的看定义
2020年
Question 1 选择题
1.数据库系统是________。
选B.等同于DBMS和被管理的数据库。
2.在特定时刻存储在数据库中的信息集合被称为________。
第一章最前面就有的概念选A。
3.________是商业数据库系统中使用的非过程性语言。
上张试卷有原题选C。
4.关于表的键的数量以下哪项是正确的
上张卷子科普过了选B。
5.在以下术语中________是正确的。
整本书最前面四个定义就是他们了 所以选A。
6.在数据库系统中使用函数和过程有利于________。
选D全都有
模块化函数和过程可将复杂业务逻辑分解为独立模块便于管理、理解、维护与复用。性能能减少代码重复执行借助系统优化提升执行效率节省资源。安全性可限制访问权限内部进行数据验证与权限检查保障数据安全与完整。
7.关于视图以下哪项陈述不正确
视图虽然是虚拟关系但它并不是一个没有记录的空表选C。
8.________不是E-R模型中的三个基本概念之一。
上定义 四个选项只有模式俩字没在这个定义里出现过所以选D。
9.以下哪项陈述是错误的
A.在函数依赖理论中最严格的范式是BCNF巴斯 - 科德范式而不是4NF第四范式。4NF主要是处理多值依赖的问题BCNF则是在函数依赖的基础上对关系模式进行更严格的约束要求关系模式中每一个函数依赖的决定因素都包含候选键选A。B.3NF第三范式是在1NF第一范式的基础上进一步满足一定条件的范式所以满足3NF的关系一定满足1NF。C.如果一个关系满足4NF那么它必然满足3NF因为4NF是比3NF更高级的范式对关系模式的要求更严格满足更严格要求的关系自然也满足相对宽松的要求。D.BCNF比3NF更严格如前面所说BCNF要求函数依赖的决定因素都包含候选键而3NF允许存在主属性对候选键的传递依赖但不允许非主属性对候选键的传递依赖。
10._______不是事务的属性。
之前丢过的图再丢一遍很明显选B剩下三个明显都是好词儿嘛。
11.如果事务T已经获得了数据项A的共享锁那么 T 可以_____。
共享锁的特点就是只读不写选A。想读写的话你得用排他锁Exclusive Lock给了一个事务权限别的就都不能访问了这么设计是为了保证一致性。还记得上张试卷的Question 5吗lock-S(A)就是给数据项A加共享锁lock-X(B)就是给B加排他锁。
12.在从E-R模型映射到关系模型时一个关系可以被映射为______。
还记得上张试卷上让我们画的E-R图吗当时我们有的关系是通过关联的两个属性集里面的同名属性连接也就是标下划线反映在数据库上就是一列也有那个出售价格我们单开了一个表记录价格和书籍以及书店的ID这就是用一个表存。所以这一题选D两种存法都可以。
13.在数据库物理设计阶段必须给出______。
直接上定义选B。
14.在 SQL 中以下哪个谓词可以在 where 子句中用于测试 “amount” 是否为空值
上张试卷已经详细介绍过空值了选B。
15.SQL 语句 “Select count (*) From employee left outer join works” 在以下表上运行那么查询的输出是______
SELECT count(*) 是用于统计结果集中的行数。FROM employee left outer join works 表示对 employee 表和 works 表进行左外连接。左外连接会返回左表这里是 employee 表中的所有行以及右表works 表中与左表连接条件匹配的行如果右表中没有匹配的行则用 NULL 填充。
在给定的示例中employee 表有 4 行数据左外连接后结果集的行数仍然是 4 行即使 works 表中可能没有与 employee 表中某些行完全匹配的数据但左外连接会保证 employee 表的所有行都在结果集中。
所以查询的输出是 4答案选 C。
16.表EMP中插入了多少行
INSERT INTO EMP(ID, Age) VALUES (001,25);
INSERT INTO EMP(ID, Age) VALUES (‘002’,35);
INSERT INTO EMP(ID, Age) VALUES (‘003’,15);
INSERT INTO EMP VALUES (‘004’, 40);
COMMIT;注意看题目的要求age必须大于18小于60所以第三条就没法成功插入然后第四条没有指定字段名所以也会插入失败选C。
17.在以下关于函数依赖的规则中________是正确的。
A.仅根据 X ∩ Y ∅ 不能得出 X → Y 的函数依赖关系。B.已知 X → Y 那么 WX → WY根据增广律又因为 WY → Z 所以可以由传递律推出 WX → Z 选B。C.XY → Z 不能直接推出 X → Z 和 Y → Z 。D.X ⊆ Y 也不能得出 X → Y 的函数依赖关系。
18.设A、B、C和D为属性在以下关系代数表达式中________不是一个关系。 × \times ×是笛卡尔积的符号所以连接的必须是两个关系A选项拿这玩意儿连接属性肯定是语法错误选A就行。
19.关于触发器以下哪句话是错误的
选D书上没翻到滚去问老师了。
20.如果实体集A和B之间存在一对多关系那么______。
在实体集A和B之间存在一对多关系时意味着对于B中的一个实体在A中可以有多个与之相关联的实体而对于A中的一个实体在B中只有一个与之相关联的实体。 从函数依赖的角度来看由于B中的一个主键值能唯一确定A中的主键值因为B中的一个实体对应A中的多个实体所以可以根据B的主键找到A中与之相关的主键即存在从B的主键到A的主键的函数依赖也就是PK(B) → PK(A)。 而选项B中说从A的主键到B的主键的函数依赖是不正确的因为A中的一个主键值可能对应B中的多个主键值不满足函数依赖的唯一性要求。 所以答案是A。
Question 2 写关系代数表达式和SQL语句
给定数据库
Teacher(TId, TName, office, age)
Equipment(EId, Ename, serial_number, price)
Own(TId, EId, date)1.用关系代数表达式查询没有任何设备的老师的编号
非常人性化的是我们的Own表里面就存了老师的Id所以直接选取Teacher内的所有老师Id把出现在Own表内过的Id剪掉就可以了 π T I d ( T e a c h e r ) − π T I d ( O w n ) \pi_{TId}(Teacher)-\pi_{TId}(Own) πTId(Teacher)−πTId(Own)
2.用关系代数表达式和SQL语句查询拥有价格低于1000的设备的老师的的名字
设备的价格老师的名字和拥有情况分属三个表那又要全部先连接一下子然后再查询了
关系代数表达式 π T N a m e ( σ p r i c e 1000 ( T e a c h e r ⋈ E q u i p m e n t ⋈ O w n ) ) \pi_{TName}(\sigma_{price1000}(Teacher⋈Equipment⋈Own)) πTName(σprice1000(Teacher⋈Equipment⋈Own))
SQL语句
select TName
from Teacher natural join Own natural join Equipment
where price10003.用关系代数表达式和SQL语句查询拥有价格最高的设备的教师姓名
关系代数表达式 π n a m e ( T e a c h e r ⋈ O w n ⋈ ( E q u i p m e n t ⋈ p r i c e max ( p r i c e ) ( E q u i p m e n t ) ) ) \pi_{name}(Teacher\bowtie Own\bowtie(Equipment\bowtie_{price\max(price)}(Equipment))) πname(Teacher⋈Own⋈(Equipment⋈pricemax(price)(Equipment)))先看里面这个 E q u i p m e n t ⋈ p r i c e max ( p r i c e ) ( E q u i p m e n t ) Equipment\bowtie_{price\max(price)}(Equipment) Equipment⋈pricemax(price)(Equipment)这个操作得到的是一个集合只包括价格最贵设备的设备再拿这个表和Teacher以及Own自然连接后面的操作就很明了了。
SQL语句
select TName
from Teacher
where TId in (select TIdfrom Ownwhere EId in (select EIdfrom Equipmentwhere price (select max(price) from Equipment))
);4.用SQL语句查询每位教师的姓名以及所拥有设备的总价
主要的点就是通过这个Group by依据其中一个元素分组还有就是sum求和
select TName, sum_price
from teacher natural join (Select TId, sum(price) as sum_priceFrom Own natural join EquipmentGroup by TId
);5.用SQL语句对所有价格高于10000的设备进行10%的贬值
最基础的更新数据的命令
Update Equipment
Set priceprice*0.9
Where price10000;Question 3 画E-R图以及写关系模式
一家医院具有如编号、名称、位置、等级、容量等属性。一家医院有许多用于病人的病房一个病房可以用房间编号、建筑物、病床数量等属性来描述。一位医生可以用编号、姓名、年龄、专业和职称来描述。一位病人具有如编号、姓名、年龄、性别、地址等属性。上述对象必须满足一些约束条件每位医生可以失业或受雇于一家医院。如果一位医生受雇其薪水需要记录在数据库中。一位病人可以去多家医院。住院病人是住在某个病房并由住院医生住院医生是医生的一种职称管理的病人。一个病房只属于一家医院并且每家医院配备多个病房。
1.绘制E-R图表示上述模式
画了半天的图被我不小心删了还是丢标答吧
2.将E-R图转换为关系数据库模式并指出主键和外键
一如既往地我们要额外加一些连接用的键值属性
Hospital(ID, name, location, rank, capacity ) primary key: ID
Ward(roomID, building, HospitalID, BedNumber) primary key: roomID, building, HospitalID foreign key: HospitalID
Doctor(id, name, specialty, title, HospitalID, salary) primary key: ID foreign key: HospitalID
Inpatient(patientID, DoctorID, roomID, building, HospitalID, InDate, OutDate) primary key: patientID, DoctorID, roomID, building, HospitalID foreign key: patientID from patient(ID), DoctorID from doctor(id), roomID, building, HospitalID from ward3.给出一个例子说明外键的作用
以病房关系Ward中的HospitalID外键为例。假设在Ward表中有一条记录(101, A 楼, 1, 20)其中HospitalID为 1。这就表示这个病房属于Hospital表中ID为 1 的医院。如果在插入或更新这条记录时HospitalID的值在Hospital表中不存在那么数据库系统会根据外键约束拒绝这个操作从而保证了数据的一致性即病房一定是属于某个已存在的医院不会出现孤立的病房记录。
Question 4 关系模式的操作
一整道大题都和上一张试卷的完全一样跳过
Question 5 事务管理
假设使用即时数据库修改方法和检查点技术。下图描绘了并发事务、检查点时间和系统故障时间。
1.根据上图写下日志目录。
记录开始结束和检查点即可
T1,start
T2 start
T1 commit
T3 start
checkpoint
T4 start
T5 start
T4 commit2.说明哪些事务需要进行撤销undo操作哪些事务需要进行重做redo操作并解释原因。
事务 T3 和 T5 需要撤销因为这两个事务已开始但尚未提交。 事务 T2 和 T4 需要重做因为它们在检查点Tc之后且在系统故障Tf之前已提交但结果可能尚未写入数据库。
3.使用检查点技术的优点。
检查点技术的优点在于在系统恢复时不需要从最早的事务开始进行重做redo和撤销undo操作。所有在检查点之前已经提交的事务其对数据库的修改已经被保证是持久化的不需要再次进行处理。在进行恢复操作时可以从检查点之后开始处理那些未完成的事务如本题中的 T3 和 T5 需要撤销因为它们在系统故障时还未提交以及重新执行在检查点之后提交但可能结果尚未写入数据库的事务如本题中的 T2 和 T4 需要重做。这样可以大大缩短恢复过程所需的时间和资源消耗提高系统的可用性和恢复效率。
4.绘制事务的状态图。 2021年
Question 1 选择题
1.下列那句是错误的
选B一列怎么可能有多个名称呢
2.哪项可以拥有属性
实体集有描述其特征的属性关系集在某些情况下也可以有属性来描述关系的一些特性选C。
3.如果实体集 “经理manager” 和 “项目project” 之间的 “负责in_charge_of” 关系集的主键是 {project_id}那么 “in_charge_of” 的映射基数是什么
题目没说那就不知道除非明确说了一个经理只管一个项目或者一个项目只有一个经理选D。
4.当一个实体转换为关系模式时_____属性会被放置在一个新的关系模式中而不是该实体的关系模式中。
多值属性在转换时通常会单独处理放在新的关系模式中而复合属性、派生属性和简单属性一般直接放在实体对应的关系模式中所以选B。
5._____将具有相同特征的实体集组合成一个更高层次的实体集。
上定义 所以选B概化。
6.SQL语言使用______语句从表中删除一列。
在 SQL 中使用 Alter 语句的相关语法来删除表中的列Delete 用于删除行Drop 用于删除表或其他数据库对象Update 用于更新数据选A。
7.在 SQL 中______是与 “IN” 等价的运算符。
前面有解释选D。
8.______会从 Stud 表中删除在 SC 表中有课程的行
和上题差不多选C。
9.下列语句中错误的是
在关系数据库中一列中的值必须来自相同的域而不是不同的域所以选D。A 选项投影运算符∏在功能上与 SQL 中的 “Select” 子句有相似之处是正确的B 选项关系中列的顺序确实是可以改变的不影响关系的本质是正确的C 选项一个视图可以在定义另一个视图的表达式中使用是正确的。
10.____确保一旦一个事务已提交即使发生系统故障该事务的更新也不会丢失。
再丢这个图这次加个英文 所以选Duration持久性也就是D。
11.调度必须是_______以确保如果事务 Ti 看到事务 Tj 的影响而 Tj 随后中止那么 Ti 也会中止。
可恢复的调度才能保证在这种情况下 Ti 也会中止无级联调度主要是防止级联回滚可串行化调度强调与串行执行结果的等价性冲突可串行化调度是可串行化调度的一种更严格的形式选A。
12._____仅在事务结束时释放排它锁不要求共享锁仅在事务结束时释放。
先看课本 没说共享锁相关的事情啊再去查wikiwiki这么说 所以选C。
13.关于两段锁协议确保无死锁的说法哪个是正确的
上面课本上说了 所以选B。
14.当________时一个事务被认为已提交。
当事务的最后一条日志记录已输出到稳定存储时事务被认为已提交因为这样能保证即使系统出现故障提交的信息也不会丢失。所有更新记录在日志中、所有写操作完成都不能完全确定事务已成功提交所有更新回滚则是事务失败的情况三短一长选最长嘛答案选A。
15.如果应用程序不依赖于数据库的物理模式并且在物理模式更改时不需要重写那么它们被称为具有______
顾名思义不依赖域物理模式那就是具有物理独立性呗选C。
16.数据字典是______
数据字典是包含数据库元数据的特殊类型的表它不是用于存储用户数据或 DML 输出的虽然由 DBA 管理但不是简单的包含元数据且可更新它有特定的结构和用途选A。
17.授权语句‘grant select on department to Amit, Satoshi;’成功执行后_______。
语句授予了 Amit 和 Satoshi 对 department 表的查询权限所以他们可以读取表中的所有记录不能进行更新、删除或修改模式等操作所以选D。
18.插入语句 “insert into instructor (id, name, dept_name, salary) values (‘12123’,’Kate’,’ ’, 32767)” 会向表 takes 中插入_____。
根据触发器的定义当插入的 dept_name 为空时会将其设置为 null所以插入的值会变为‘12123’,’Kate’, null, 32767所以选B。
19.以下哪个语句是错误的
如果一个关系在 3NF 中不一定在 BCNF 中BCNF 是比 3NF 更严格的范式A 选项关系模式 R 满足所有属性域为原子则在 1NF 是正确的B 选项 3NF 和 BCNF 的关系都在 1NF 是正确的C 选项在 BCNF 中的关系一定在 3NF 是正确的所以选D。
20.在以下关于函数依赖的规则中______是正确的。
跟上面的推法一致选C。
Question 2 写关系代数表达式和SQL语句
已知下面这样一个数据库
Person(driver_id, name, address);
Car(license_plate, model, year);
Accident(report_no, year, location);
Owns(driver_id, license_plate);
Participated(report_no, license_plate, driver_id, damage_amount);1.写关系代数表达式和SQL语句查询所有拥有2010年或之后生产的汽车且居住在“New York”的客户的姓名。
关系代数表达式 π n a m e ( σ y e a r 2010 , a d d r e s s ′ N e w Y o r k ′ ( P e r s o n ⋈ O w n s ⋈ C a r ) ) \pi_name(\sigma_{year2010,addressNew York}(Person⋈Owns⋈Car)) πname(σyear2010,address′NewYork′(Person⋈Owns⋈Car))
SQL语句
SELECT name
WHERE year2010 and addressNew York
FROM Person natural join Own natural join Car;2.写关系代数表达式和SQL语句查询名为“Smith”的司机所拥有的汽车的车牌。
关系代数表达式 π l i c e n s e p l a t e ( σ n a m e ′ S m i t h ′ ( P e r s o n ⋈ O w n s ) ) \pi_{license_plate}(\sigma_{nameSmith}(Person⋈Owns)) πlicenseplate(σname′Smith′(Person⋈Owns))
SQL语句
SELECT license_plate
WHERE nameSmith
FROM Person natural join Owns;3.写关系代数表达式和SQL语句查询2021年从未发生过任何事故的这些人员的姓名和司机编号。
先取所有的司机再减去2021年出过事故的司机的信息。
关系代数表达式 π n a m e , d r i v e r i d ( P e r s o n ) − π n a m e , d r i v e r i d ( σ y e a r 2021 ( P e r s o n ⋈ P a r t i c i p a t e d ⋈ A c c i d e n t ) ) \pi_{name,driver_id}(Person)-\pi_{name,driver_id}(\sigma_{year2021}(Person⋈Participated⋈Accident)) πname,driverid(Person)−πname,driverid(σyear2021(Person⋈Participated⋈Accident))
SQL语句
SELECT name,driver_id
FROM Person
WHERE driver_id not in(SELECT driver_idWHERE year2021FROM Participated natural join Accident);4.用SQL语句找出2021年事故发生次数最多的地点
Select location
From accident
Where year2021
Group by location
Having count(report_no) all
(select count(report_no) from accident group by location);5.用SQL语句查询2021年至少发生两次事故的司机编号和人员姓名
Select driver_id, name
From Person as S
Where not unique(select report_no
from Accident as A natural join Participated as P
where P.driver_idS.driver_id and A.year2021);6.用SQL语句将2021年在“Wushan”发生的事故中车牌为“SCAU888”的汽车的损坏金额增加10%
Update Participated
Set damage_amountdamage_amount*1.1
Where license_plate”SCAU888” and report_no in
(select report_no from Accident where year2021 and location”Wushan”);7.用SQL语句查询拥有2015年之前生产的汽车且地址中包含“New”的司机的姓名和地址
主要关注模糊匹配用%代表任意字符串而且不能用要用like
SELECT name,address
WHERE year2015 and address like %New%
FROM Person natural join Owns natural join Car;8.用SQL语句将所有在“Beijing”发生的事故的损坏金额更新为原来的两倍但如果损坏金额超过5000元则只更新为5000元
主要关注条件判断的语法
UPDATE Participated
SET damage_amount CASE WHEN damage_amount * 2 5000 THEN damage_amount * 2ELSE 5000END
WHERE license_plate SCAU888 AND report_no IN (SELECT report_noFROM AccidentWHERE location Beijing AND year 2021
);Question 3 画E-R图以及写关系模式
一篇论文具有属性ID编号和标题title。一本期刊具有属性ID编号、名称name、影响因子factor和类别category。一位作者具有属性ID编号、名字first name、姓氏last name、头衔title和电子邮件email。一项资助具有属性ID编号、标题title、机构agency和年份year。一篇论文可以由多位作者撰写一篇论文必须至少有一位作者。一篇论文只能在一本期刊上发表。如果一篇论文被发表那么像年份year、卷volume、期issue、页码page等出版信息必须记录在数据库中。一位作者可以得到多项资助而一项资助必须恰好支持一位作者。
1.绘制E-R图来说明上述数据库要求 之前好像忘记丢了丢一个图例在这里
2.将你的E-R图转换为关系数据库模式并指出主键和外键。
Journal (id, name, factor, category) primary key:id
Paper (id, title) primary key:id
Publish (J_id, P_id, volume, issue, page) primary key:J_idforeign key: J_id reference Journal:id, P_id reference paper:id
Author (id, first_name, last_name, title, email) primary key:id
Funding (id, title, agency, year, sup_author_id) primary key:id foreign key: sup_author_id reference author:id,
write(P_id, Au_id) primary key:P_id, Au_id, foreign key: P_id reference paper:id, Au_id reference author:idQuestion 4 关系模式的操作
设 R A B C D E F R ABCDEF RABCDEF 是一个关系函数依赖集 F { A B → C D , D → C , D E F → A B , D E → B , A C → D C } F \{AB \to CD, D \to C, DEF \to AB, DE \to B, AC \to DC\} F{AB→CD,D→C,DEF→AB,DE→B,AC→DC} 在 R R R 上成立。
1.列出关系R的所有候选键
候选键就是要找尽可能少的字母使得这些字母根据上面给定的函数依赖能推出剩下的所有字母 这一题的所有候选键就是DEF, ABEF, ACEF
2.函数依赖 A C → B AC \to B AC→B 在 R R R 上是否成立解释原因。
就看嘛AC能推出D其他的字母都没法通过上面的函数依赖推出来所以这个B也不成立 说的更正式一点的话就说 { A C } \{AC\}^{} {AC}计算出来为 { A C D } \{ACD\} {ACD} B B B不在这个集合内所以不成立。
3.给出仅进行一次BCNF分解的 R R R的分解。
AB→CD是导致违反BCNF的一个函数依赖因为它不是平凡函数依赖而且AB并非候选键。因此关系R可分解为{R1ABCDR2ABEF}这两个关系。
4.给出关系R的第三范式3NF分解并列出计算其正则覆盖的主要步骤
F {AB→CDD→CDEF→ABDE→BAC→DC} 在AB→CD中C是冗余的因此F等价于{AB→DD→CDEF→ABDE→BAC→DC}。 在DEF→AB中鉴于DE→BB是冗余的所以F等价于{AB→DD→CDEF→ADE→BAC→DC}。 在AC→DC中由于D→CC是冗余的于是F等价于{AB→DD→CDEF→ADE→BAC→D}。 那么一个正则覆盖可以是F_C {AB→DD→CDEF→ADE→BAC→D}。 然后关系R的第三范式分解可以是 {ABDACDBDEADEF}
Question 5 事务管理
Part 1
考虑如下具有三个事务 T 0 T_0 T0、 T 1 T_1 T1、 T 2 T_2 T2的调度这些事务在数据库中对四个数据项A、B、C、D进行操作初始值分别为A 1000B 2000C 600D 200。
事务操作 T 0 T_0 T0Read(A); Read(B); Read(C) T 1 T_1 T1Read(B); Read(C); C : C − 100 C : C - 100 C:C−100; D : D 100 D : D 100 D:D100 T 2 T_2 T2 A : A − 50 A : A - 50 A:A−50; B : B − 500 B : B - 500 B:B−500; Write(C) T 3 T_3 T3 B : B 50 B : B 50 B:B50; C : C 500 C : C 500 C:C500; Write(A); Write(B); Write(B); Write(C)
1.解释串行调度和可串行化调度之间的区别
2019年最后一题
2.给出一种并发执行产生可串行化调度的场景且事务提交顺序不同于串行化顺序 Part 2
现在假设在上述调度执行过程中系统在执行完事务 T 1 T_1 T1的操作后崩溃了并且在崩溃前刚刚完成了一个检查点checkpoint操作同时假设在崩溃前日志log包含了以下记录
事务操作 T 0 T_0 T0start T 0 T_0 T0Read(A) T 0 T_0 T0Read(B) T 0 T_0 T0Read(C ) T 1 T_1 T1start T 1 T_1 T1Read(B) T 1 T_1 T1Read(C) T 1 T_1 T1 C : C − 100 C : C - 100 C:C−100 T 1 T_1 T1 D : D 100 D : D 100 D:D100 T 2 T_2 T2start T 2 T_2 T2 A : A − 50 A : A - 50 A:A−50 T 2 T_2 T2 B : B − 500 B : B - 500 B:B−500
3.解释检查点技术checkpoint technology
将当前驻留在主内存中的所有日志记录输出到稳定存储中。将所有已修改的缓冲区块输出到磁盘。将形如的日志记录输出到稳定存储中其中L是检查点时处于活动状态的事务列表。
4.描述在重做阶段Redo Pass中撤销列表Undo List的变化
在重做阶段撤销列表最初包含事务T1和T2当找到T2的提交日志记录时将T2从撤销列表中移除而当找到T3的开始日志记录时将T3添加到撤销列表中。当找到事务T1的中止日志记录时将T1从撤销列表中移除最终撤销列表中仅剩下T3。
5.展示在恢复过程中应该添加的日志记录。
T3, D,300
T3, abort6.列出完成恢复后B、C和D的最终值。
B 2050C 600D 300 。