SCAU期末笔记 - 数据库系统概念往年试卷解析
数据库搞得人一头雾水,题型太多太杂,已经准备摆烂了。就刷刷往年试卷,挂不挂听天由命。
2019年
Question 1 选择题
1. R ∩ S R∩S R∩S等于一下哪个选项?
画个文氏图秒了
所以选A. R ∩ S = R − ( R − S ) R∩S=R-(R-S) R∩S=R−(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
的元组的人名就行了对吧,但是现在还有一个问题,同样是用户id,borrowed表里面存的叫mem_id,member里面直接存的就叫id,为了解决这个不同名的情况,我们可以用笛卡尔积,然后选择时加一个mem_id=id的条件
关系代数表达式
π 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}(σ_{no=mem_no⋀ title='Database System'}(member×(borrowed⋈book)) πname(σno=memno⋀title=′DatabaseSystem′(member×(borrowed⋈book))
SQL语句
select name
from member, borrowed natural join book
where no=mem_no and title='database system'
3.写关系代数表达式和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_no='1001')
5.用SQL语句查询所有借过’SCAU Press’出版的书的用户的名字
select name
from member as m
where not exist ( (select isbn
from book
where publisher='SCAU press')
except
(select isbn
from borrowed
where mem_no=m.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 → C,A 不是候选键,这就意味着存在以非候选键作为决定因素的函数依赖,不符合 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 A=1 then B:=B*2;write(B)
T2: read(B)read(A)If B=1 then A:=A*2;write(A)
设一致性要求为 A = 1 或 B = 1 A = 1 或 B = 1 A=1或B=1,初始值为 A = B = 1 A = B = 1 A=B=1。
1.证明涉及这两个事务的每一个串行执行都能保持数据库的一致性,并计算A和B的最终结果
按照惯例,先查定义
那也就是说两个轮流进行吗,简单盘一下不难知道如果T1先进行的话那最后A=1,B=2
,反之是A=2,B=1
,都是满足一致性要求的
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_{price<1000}(Teacher⋈Equipment⋈Own)) πTName(σprice<1000(Teacher⋈Equipment⋈Own))
SQL语句
select TName
from Teacher natural join Own natural join Equipment
where price<1000
3.用关系代数表达式和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⋈price=max(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⋈price=max(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 price=price*0.9
Where price>10000;
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 ward
3.给出一个例子说明外键的作用
以病房关系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 commit>
2.说明哪些事务需要进行撤销(undo)操作,哪些事务需要进行重做(redo)操作,并解释原因。
事务 T3 和 T5 需要撤销,因为这两个事务已开始但尚未提交。
事务 T2 和 T4 需要重做,因为它们在检查点(Tc)之后且在系统故障(Tf)之前已提交,但结果可能尚未写入数据库。
3.使用检查点技术的优点。
检查点技术的优点在于,在系统恢复时,不需要从最早的事务开始进行重做(redo)和撤销(undo)操作。所有在检查点之前已经提交的事务,其对数据库的修改已经被保证是持久化的,不需要再次进行处理。在进行恢复操作时,可以从检查点之后开始处理那些未完成的事务(如本题中的 T3 和 T5 需要撤销,因为它们在系统故障时还未提交)以及重新执行在检查点之后提交但可能结果尚未写入数据库的事务(如本题中的 T2 和 T4 需要重做)。这样可以大大缩短恢复过程所需的时间和资源消耗,提高系统的可用性和恢复效率。
4.绘制事务的状态图。
相关文章:
SCAU期末笔记 - 数据库系统概念往年试卷解析
数据库搞得人一头雾水,题型太多太杂,已经准备摆烂了。就刷刷往年试卷,挂不挂听天由命。 2019年 Question 1 选择题 1. R ∩ S R∩S R∩S等于一下哪个选项? 画个文氏图秒了 所以选A. R ∩ S R − ( R − S ) R∩SR-(R-S) R∩…...
黑马跟学.苍穹外卖.Day01
黑马跟学.苍穹外卖.Day01 苍穹外卖-day01课程内容1. 软件开发整体介绍1.1 软件开发流程1.2 角色分工1.3 软件环境 2. 苍穹外卖项目介绍2.1 项目介绍2.2 产品原型2.3 技术选型 3. 开发环境搭建3.1 前端环境搭建3.2 后端环境搭建3.2.1 熟悉项目结构3.2.2 Git版本控制3.2.3 数据库…...
获取系统启动时间
获取系统启动时间 uptime命令 gbgb:~$ uptime09:29:41 up 2:21, 4 users, load average: 0.00, 0.00, 0.00 gbgb:~$ 这里的up 13 min表示系统已经运行了2个小时13分钟。 date 命令 /proc/uptime gbgb:~$ date -d "$(awk -F. {print $1} /proc/uptime) second ago&…...
Istio 补充 Kubernetes 的不足
1 Istio 补充 Kubernetes 的不足 Kubernetes 强大但无法解决复杂分布式系统中的非功能性需求,如流量路由、协议转换、请求重试和负载均衡。Istio作为Service Mesh,通过独立的代理进程处理这些需求,避免直接修改业务代码。 2. 独立的代理进程…...
以图像识别为例,关于卷积神经网络(CNN)的直观解释
大家读完觉得有意义记得关注和点赞!!! 作者以图像识别为例,用图文而非数学公式的方式解释了卷积神经网络的工作原理, 适合初学者和外行扫盲。 目录 1 卷积神经网络(CNN) 1.1 应用场景 1.2 起…...
使用PyTorch实现基于稀疏编码的生成对抗网络(GAN)在CIFAR-10数据集上的应用
使用PyTorch实现基于稀疏编码的生成对抗网络(GAN)在CIFAR-10数据集上的应用 目录 使用PyTorch实现基于稀疏编码的生成对抗网络(GAN)在CIFAR-10数据集上的应用1. 引言2. 数据集介绍3. 模型网络结构3.1 网络结构3.2 编码器3.3 生成器3.4 判别器4. 模型优化器与损失函数4.1 优…...
Java重要面试名词整理(十八):Sentinel
文章目录 服务雪崩及其解决方案技术选型: Sentinel or Hystrix 流量治理组件Sentinel**基于SentinelResource注解埋点实现资源保护** Sentinel控制台**限流阈值类型****流控模式****直接****关联** **流控效果**系统规则——系统自适应保护 限流算法**计数器法****滑动时间窗口…...
【微信小程序获取用户手机号
微信小程序获取用户手机号有2种,一种是前端自己解密,一种是获取后发给后端,后端去解密 重点:要在微信公众平台设置里面绑定微信开放平台账号,不然反解不出来用户手机号上代码: <button style"font-size: 16px;" open-type"getPhoneNumber" getphonenumb…...
Profinet转EtherNet/IP网关连接AB PLC的应用案例
某大型制造企业的生产车间同时采用了西门子 S7 - 1500 PLC 作为核心控制系统的一部分,负责主要生产流程的控制与数据处理;而在特定生产环节,由于历史设备遗留或工艺配套需求,存在使用 AB PLC 的情况。这就导致了在整个自动化生产系…...
Maven的依赖管理
1. 依赖管理 依赖管理,可以将有关依赖项的所有信息放在共同的POM中,并对子POM中的工件进行更简单的引用。举个例子: 父POM <project>......<dependencyManagement><dependencies><dependency><groupId>gro…...
验证码识别插件 - captcha-killer
验证码识别插件 - captcha-killer 简介 captcha-killer 是一款用于 Burpsuite 的验证码识别插件。它的主要功能是调用各种验证码识别接口,以便在进行渗透测试时能够自动识别和绕过验证码。这个插件本身并不直接进行验证码的识别,而是通过调用外部的 OC…...
面试题解,Java中的“对象”剖析
一、说一说JVM中对象的内存布局?new一个对象到底占多大内存? 话不多说,看下图,对象的内存布局图 一个对象的内存布局主要由三部分组成:对象头(Object Header)、实例数据(Instance D…...
对计网大题的一些指正(中间介绍一下CDM的原理和应用)
目录 前言: (1)五层原理体系结构每层功能: 下面是文档的答案: 我在之前的博客里面有介绍过五层原理体系结构, 按理来说,第五层应该是应用层才对,而会话层的功能应该被放到应用层…...
122. 买卖股票的最佳时机 II
https://leetcode.cn/problems/best-time-to-buy-and-sell-stock-ii/description/?envTypestudy-plan-v2&envIdtop-interview-150问题分析: 和买卖股票的最佳时机I这题相比,区别就是可以买多只股票虽然同时只能持有一支,但是我们还是可以…...
qt中如何判断字符串是否为数字,整数,浮点数?
在 Qt 中,可以使用多种方法来判断字符串是否为数字、整数或浮点数。Qt 提供了一些方便的字符串和数值处理函数,可以帮助你实现这些判断。以下是几种常见的方法: 1. 使用 QRegularExpression Qt 提供了 QRegularExpression 类,可…...
《GICv3_Software_Overview_Official_Release_B》学习笔记
1.不同版本的 GIC 架构及其主要功能如下图所示: 2.GICv2m(Generic Interrupt Controller Virtualization Model)是针对ARM架构的GIC(通用中断控制器)的一种扩展, GICv2m扩展为虚拟化环境中的中断管理提供了…...
告别Kibana:Elasticsearch 桌面客户端的新变革
告别Kibana:Elasticsearch 桌面客户端的新变革 在大数据处理与分析领域,Elasticsearch 及其相关技术的应用日益广泛。长期以来,Kibana 在数据可视化与查询管理方面占据重要地位,但随着技术的不断发展,用户对于更高效、…...
【蓝桥杯研究生组】第14届Java试题答案整理
试题链接:链接 A题 满足条件的答案有:35813116 public class TianShu {public static void main(String[] args) {int ans 0;// 2000.1.1 - 2000000.1.1// 年份是月份的倍数,也是日的倍数for (int year2000; year<2000000; year) {for …...
链式调用方式重写父类set方法导致fastjson解析的对象属性未赋值
反序列化后发现属性为null 昨天使用fastjson的JSON.parseArray(json, class)反序列化的时候,发现返回的list列表中的对象某个属性为null,但是json字符串里面这个属性是有值的,经过排查发现是因为子类重写了父类的set方法,且返回值…...
[AUTOSAR 基础入门] - AUTOSAR配置工具
返回总目录 前文我们提到了要借助 EasySAR 平台来助力大家更好地融合 AUTOSAR 的理论与实践,让大家能够切实将所学知识转化为实际操作能力。建议大家感兴趣的去注册一下看看。跳转链接:EasySAR EasySAR是昂辉科技基于 AUTOSAR 方法论设计的一款面向汽车…...
鸿蒙开发:实现键值数据库存储
前言 鸿蒙当中数据持久化存储,为我们提供了多种的实现方式,比如用户首选项方式,关系型数据库方式,键值型数据库方式,文件存储方式等等,对于数据量比较的小的,我们直接选择轻量级的用户首选项方式…...
ip属地的信息准确吗?ip归属地不准确怎么办
在数字化时代,IP属地信息成为了我们日常生活中不可或缺的一部分。在各大社交媒体平台上,IP属地信息都扮演着重要的角色。然而,随着技术的不断进步和网络的复杂性增加,IP属地信息的准确性问题也日益凸显。那么,IP属地信…...
CSS——1.优缺点
<!DOCTYPE html> <html><head><meta charset"UTF-8"><title></title><link rel"stylesheet" type"text/css" href"1-02.css"/></head><body><!--css:层叠样式表…...
Android设备使用AOA协议进行主机与配件模式通信
1.使用TYPC-C数据线连接两台华为手机: TYPE-C线,先连接下图右边的ACCESSORY 再连接左边的HOST 此时左边的HOST(白色) 会给右边的ACCESSORY(黑色) 充电 接着打开左连接的HostChart会自动调起授权,然后会启动右边的AccessoryChart USB HOS…...
MySQL中深度分页问题的优化
MySQL中深度分页问题的优化 在MySQL中,使用LIMIT子句进行分页查询时,可能会遇到一个常见的性能问题:当LIMIT子句中的偏移量X很大时,查询速度会显著下降。例如,LIMIT 0,10可能只需要20毫秒,而LIMIT 1000000,…...
5. C语言 常量与宏定义
本章目录: 前言一、什么是常量?1. 整型常量2. 浮点型常量3. 字符常量4. 字符串常量 二、如何定义常量?1. 使用 #define 宏定义2. 使用 const 关键字 三、#define 和 const 的区别四、使用建议1. 使用场景区分2. 避免宏定义的潜在问题 五、特殊用法与小技…...
【mybatis-plus问题集锦系列】mybatis使用xml配置文件实现数据的基础增删改查
简单的数据查询,我们可以在mapper接口里面去实现,但是如果是复杂的查询,我们就可以使用xml配置文件去做, 官网链接xml配置文件 实现效果 实现代码 根据mapper接口的包结构,在resources包里面新建同名同结构的xml文件…...
spring防止重复点击,两种注解实现(AOP)
第一种:EasyLock 简介 为了简化可复用注解,自己实现的注解,代码简单随拿随用 使用方式 1.创建一个注解 Target(ElementType.METHOD) Retention(RetentionPolicy.RUNTIME) Documented public interface EasyLock {long waitTime() default …...
Spring Boot 3 实现 MySQL 主从数据库之间的数据同步
✅ Spring Boot 3 实现 MySQL 主从数据库之间的数据同步 在实际项目中,为了提高 系统的读性能 和 数据的可用性,通常会使用 主从数据库架构。Spring Boot 提供了对 多数据源 的良好支持,可以轻松配置 主从数据库 的数据同步,实现 读写分离。 🎯 方案介绍 我们将通过 Sp…...
WPS-JS宏快速上手
WPS JS宏注意事项 代码后面可以不写分号“ ; ”; 缩进对程序的运行影响不大,但为了易读(防止自己以后看不懂),还是乖乖写好; 代码是逐行运行的,意味着下面一行代码错了,前面的代码…...
力扣hot100——堆
215. 数组中的第K个最大元素 快速排序 class Solution { public:int findKthLargest(vector<int>& a, int k) {auto qsort [&](this auto&& qsort, int l, int r) -> void {if (l r) return;int i l - 1, j r 1;int x a[(l r) / 2];/*如果把…...
【小制作】米家模拟手指点击
代码功能解释 这段代码是一个基于Arduino平台的控制程序,主要功能包括: 初始化:设置引脚模式、初始化编码器、舵机和EEPROM。按键检测:处理按钮的单击、双击和长按事件,并根据事件执行相应操作。编码器更新ÿ…...
ubuntu1604 apt镜像源切换
1、如何查看当前源 cat /etc/apt/sources.list less /etc/apt/sources.list 2、apt源修改为阿里镜像,这里ubuntu是1604: deb http://mirrors.aliyun.com/ubuntu/ xenial main restricted universe multiverse deb http://mirrors.aliyun.com/ubuntu/…...
leetcode刷题笔记
题目思路1.两数之和哈希表2.两数相加链表操作3. 无重复字符的最长子串滑动窗口,特别注意数组越界情况!4. 寻找两个正序数组的中位数5.最长回文子串从中间向两边扩展,注意整个字符串都是回文串的边界情况10.正则表达式匹配动态规划,…...
修复 ITunes 在 Windows 或 Mac 上不断崩溃的问题 [100% 有效]
对于 iDevice 用户来说,只能通过 iTunes 在 iDevice 和计算机之间传输文件的困境一直是一个紧迫的问题。所有 iPhone 用户可能都知道,iTunes 并不是一款高效的应用程序,有时性能会很差,例如在 iDevices 和计算机之间传输文件时不断…...
Mac M2基于MySQL 8.4.3搭建(伪)主从集群
前置准备工作 安装MySQL 8.4.3 参考博主之前的文档,在本地Mac安装好MySQL:Mac M2 Pro安装MySQL 8.4.3安装目录:/usr/local/mysql,安装好的MySQL都处于运行状态,需要先停止MySQL服务最快的方式:系统设置 …...
Visual Point Cloud Forecasting enables Scalable Autonomous Driving——点云论文阅读(12)
此内容是论文总结,重点看思路!! 文章概述 这篇文章介绍了一个名为 ViDAR 的视觉点云预测框架,它通过预测历史视觉输入生成未来点云,作为自动驾驶的预训练任务。ViDAR 集成了语义、三维几何和时间动态信息,有效提升了感知、预测和规划等自动驾驶核心任务的性能。实验表明…...
handpose x plus 数据解析 >> DataBall
DataBall 助力快速掌握数据集的信息和使用方式,会员享有 百种数据集,持续增加中。 需要更多数据资源和技术解决方案,知识星球: “DataBall - X 数据球(free)” ---------------------------- 样品数据: 通过加入知识…...
LINUX线程操作
文章目录 线程的定义LINUX中的线程模型一对一模型多对一模型多对多模型 线程实现原理线程的状态新建状态(New)就绪状态(Runnable)运行状态(Running)阻塞状态(Blocked)死亡状态&#…...
每日一学——日志管理工具(ELK Stack)
5.1 ELK Stack 5.1.1 Elasticsearch索引机制 嘿,小伙伴们!今天我们要聊聊ELK Stack——一套由Elasticsearch、Logstash和Kibana组成的强大日志管理工具集。通过这套工具,我们可以轻松地收集、存储、搜索和可视化日志数据。首先,…...
设计模式 结构型 适配器模式(Adapter Pattern)与 常见技术框架应用 解析
适配器模式(Adapter Pattern)是一种结构型设计模式,它允许将一个类的接口转换成客户端所期望的另一个接口,从而使原本因接口不兼容而无法一起工作的类能够协同工作。这种设计模式在软件开发中非常有用,尤其是在需要集成…...
【Leetcode】732. 我的日程安排表 III
文章目录 题目思路代码复杂度分析时间复杂度空间复杂度 结果总结 题目 题目链接🔗 当 k k k 个日程存在一些非空交集时(即, k k k 个日程包含了一些相同时间),就会产生 k k k 次预订。 给你一些日程安排 [startTime, endTime…...
Flutter Android修改应用名称、应用图片、应用启动画面
修改应用名称 打开Android Studio,打开对应项目的android文件。 选择app下面的manifests->AndroidManifest.xml文件,将android:label"bluetoothdemo2"中的bluetoothdemo2改成自己想要的名称。重新启动或者重新打包,应用的名称…...
RocketMQ消费者如何消费消息以及ack
1.前言 此文章是在儒猿课程中的学习笔记,感兴趣的想看原来的课程可以去咨询儒猿课堂 这篇文章紧挨着上一篇博客来进行编写,有些不清楚的可以看下上一篇博客: https://blog.csdn.net/u013127325/article/details/144934073 2.broker是如何…...
华为消费级QLC SSD来了
近日,有关消息显示,华为的消费级SSD产品线,eKitStor Xtreme 200E系列,在韩国一家在线零售商处首次公开销售,引起了业界的广泛关注。 尽管华为已经涉足服务器级别的SSD制造多年,但直到今年6月才正式推出面向…...
Conda 安装 Jupyter Notebook
文章目录 1. 安装 Conda下载与安装步骤: 2. 创建虚拟环境3. 安装 Jupyter Notebook4. 启动 Jupyter Notebook5. 安装扩展功能(可选)6. 更新与维护7. 总结 Jupyter Notebook 是一款非常流行的交互式开发工具,尤其适合数据科学、机器…...
高等数学学习笔记 ☞ 极限的运算法则与存在准则
1. 极限的运算法则 (1)有限个无穷小的和是无穷小。 (2)有限个无穷小的乘积是无穷小。 备注: ①:无限个无穷小的和不一定是无穷小,反例如下…...
【开源】创建自动签到系统—QD框架
1. 介绍 QD是一个 基于 HAR 编辑器和 Tornado 服务端的 HTTP 定时任务自动执行 Web 框架。 主要通过抓包获取到HAR来制作任务模板,从而实现异步响应和发起HTTP请求 2. 需要环境 2.1 硬件需求 CPU:至少1核 内存:推荐 ≥ 1G 硬盘:推…...
k8s集群,CRI-Docker部署条件及方法
CRI-Docker部署条件及方法 文章目录 CRI-Docker部署条件及方法CRI-Docker使用条件安装 cri-docker 的步骤: CRI-Docker使用条件 在 Kubernetes 1.20 及以上版本,kubeadm 默认使用 containerd 作为容器运行时(Container Runtime Interface, C…...
STLG_01_09_程序设计C语言 - 指针
C语言中的指针是一个非常重要的概念,它允许程序直接访问和操作内存地址。理解指针对于掌握C语言编程至关重要。 1. 指针的基本概念 指针:指针是一个变量,它存储的是另一个变量的内存地址。指针变量:指针变量专门用来存储内存地址…...