2021-2022-1期中¶
疑似缺了一道大题,但是无伤大雅
一、选择题(每题 4分、共60分)¶
-
下面关于 MongoDB 的说法错误的是 ( ) A. MongoDB是一个文档型数据库 B. MongoDB的基本单位是集合 C. MongoDB以 key 和 value 的形式存储 D. 如果将MongoDB中的一个文档比喻为关系型数据库中的一行,那么一个集合就相当于一张表。
-
将MongoDB的col集合根据id降序排列,并查看第5到第10条文档数据。正确的指令是( ) A.
db.numbers.find().sort({"id":1}).limit(6).skip(4)B.db.numbers.find().sort({"id":-1}).limit(6).skip(4)C.db.numbers.find().sort({"id":-1}).limit(5).skip(5)D.db.numbers.find().sort({"id":1}).limit(5).skip(5) -
下面字符串能与通配符表达式
SO_TTi%u%e进行匹配的是( ) A.SOFTTissue B.SOFFTTiue C.SOFFTTissue D.SOTTiue -
假设某文档数据库中有N个文档,被存放在硬盘的K个页中(K < N)。我们要对这N个文档添加一个新的属性,导致K个页无法再容纳这N个文档。假设属性添加完毕后,需要J个页容纳文档(N>J>K)。那么,相对高效的处理方式是( ) A. 在硬盘上分配J个新页,然后对文档逐个进行修改,完成一个文档的修改就将它写到硬盘上的新页中,最后将K个旧页回收; B. 在硬盘上分配J个新页,然后对文档逐个进行修改,修改后的文档先放入内存中的缓冲区,每当缓冲区满一页后将它写到硬盘上的新页中,最后将K个旧页回收; C. 对文档逐个进行修改,修改后的文档先全部放入内存中的缓冲区,修改完成后将缓冲区的文档写入到J个新页中,最后将K个旧页回收; D. 直接在K个旧页上进行修改,将溢出的文档放入内存中的缓冲区,修改完成后再将缓冲区的文档写入到J-K个新页中。
-
某关系表R的外键是指 ( ) A. 其它关系表的键,可以是R的任意属性; B. 该关系表R除主键之外的另一个键; C. 其它关系表的键,同时必须作为R的主属性(即R的键包含的属性); D. 其它关系表的键,同时必须作为R的非主属性(即不被R的键包含)。
-
日志机制可以维护事务处理ACID 中的哪几个属性? ( ) A. A和C B. C和D C. I和D D. A和D
-
下列创建索引的说法错误的是() A. 对于数据量大或取值个数很少的列,应该增加索引; B. 对于唯一、不为空、经常被查询的列,应该增加索引; C. 使用索引可以显著减少查询中分组和排序的时间; D. 当对表中的数据进行增加、删除和修改时,索引也要动态的维护,因此索引有额外的维护代价
-
下列不属于关系数据库的查询处理步骤是 ( ) A.查询解析 B.结果检查 C.查询优化 D.查询执行
-
在表R的哪一个属性组合上创建索引对以下查询是没有帮助的 ( )
Select C, A From R Where A>x AND B<y;
A. AC B. CA C. BC D. B
-
Redo 日志相对于undo 日志的优势是 ( ) A. I/O性能更好; B. 对内存的利用率更高; C. 需要写到硬盘上的日志更少; D. 没有明确优势。
-
以下关于原子性的说法,哪一项是错的?( ) A. 如果操作A对数据的修改对操作B可见,那么B对数据的修改一定对A不可见; B. 一定不存在这样的情况:操作A对数据的修改对操作B不可见,B对数据的修改对A也不可见; C. 一个操作和一次故障之间可能有两种关系:操作在故障前开始,操作在故障后完成; D. 一个操作和一次故障之间可能有两种关系:操作在故障前完成,操作在故障后开始。
-
为了保证原子性,以下哪一个加锁顺序是有问题的? ( ) A. Lock (A), Lock (B), Read (A), Read (B), Write(B), Unlock (A), Unlock (B) B. Lock (B), Lock(A), Read (A), Unlock (A), Read (B), Write (B), Unlock (B) C. Lock (A), Read (A), Read (B), Lock (B), Unlock(A), Write (B), Unlock (B) D. Lock (A), Read (A), Lock (B), Read (B), Unlock(A), Write(B), Unlock (B)
-
ER 图通常由若干实体类和联系类组成。假设我们已经将一个ER图设计完成了,在将它转换成关系模式的过程中,以下的哪个规则是不合理的? ( ) A. 为每一个实体类创建一个单独的关系(表); B. 未必需要为每一个联系类创建一个单独的关系(表); C. 为每一个多对多的联系类创建一个单独的关系(表); D. 为每一个一对多的联系类创建一个单独的关系(表)。
-
在使用数据库的事务处理功能时,以下哪个原则是不合理的? ( ) A. 尽量使用短小的事务; B. 尽量避免事务过程中的人机交互; C. 尽量避免事务过程中的多机通信; D. 尽量将更多的数据访问放到同一个事务中,让它们受到事务的保护。
-
假设学校的教务系统里有三张表:学生表(学号,姓名,生日,性别,学院),课程表(课程号,课程名称,学分,主讲老师),选课表(学号,课程号,学期,成绩)。其中,学生表记录了10万个学生的信息,课程表记录了2千门课的信息,选课表中有200万条选课记录。假设我们在学生表的“学号”、课程表的“课程号”、选课表的“学号”和“课程号”上分别创建了四个索引,其余的属性上都没有索引。以下三个关系代数表达式的目的都是查询“所有在张三老师的课上成绩超过90分的学生的学号和姓名”。
a. \(\prod_{学号,姓名} (学生表 \Join (\sigma_{成绩>90}(选课表) \Join \sigma_{主讲老师='张三'}(课程表)))\)
b. \(\prod_{学号,姓名} (学生表 \Join \prod_{学号} (\sigma_{成绩>90 \land 主讲老师='张三'}(选课表 \Join 课程表)))\)
c. \(\prod_{学号,姓名} (学生表 \Join (\sigma_{成绩>90} (选课表 \Join \sigma_{主讲老师='张三'}(课程表))))\)
以下对三者的查询计划性能评估,哪个最可能是正确的? A. a 的执行性能最好。 B. b 的执行性能最好。 C. c 的执行性能最好。 D. 三者的性能相当。
二、SQL查询¶
假设一个数据库由以下几个表格构成:
Create Table Movie /*影片表*/
(movieID INT Primary Key, /*影片代号*/
title VARCHAR(100), /*影片名称*/
releaseDate DATE, /*出品日期*/
revenue INT, /*票房收入*/
plot VARCHAR(1000)); /*影片介绍*/
Create Table Person /*人员表*/
(personID INT Primary Key, /*人员代号*/
name VARCHAR(100), /*姓名*/
birthday DATE, /*生日*/
bio VARCHAR(1000)); /*人员简介*/
Create Table Acting /*演员-影片关系*/
(actor INT, /*演员代号*/
movieID INT, /*影片代号*/
role CHAR(100), /*角色*/
FOREIGN KEY (actor) REFERENCES Person (personID),
FOREIGN KEY (movieID) REFERENCES Movie (movieID)
);
Create Table Directing /*导演-影片关系*/
(director INT, /*导演代号*/
movieID INT, /*影片代号*/
FOREIGN KEY (director) REFERENCES Person (personID),
FOREIGN KEY (movieID) REFERENCES Movie (movieID)
);
请写出以下任务的SQL查询语句(每个任务限使用一个SQL查询,每题5分): (1) 请找到在影片“阿甘正传”中扮演“阿甘”的演员当年的年龄 (2) 请找出所有在同一部影片中既做演员又做导演的人的名字 (3) 请找到所有与演员 Tom Hanks 合作过的导演,以及他们分别与 Tom Hanks 合作过多少部影片。