2024-2025-1期末¶
一、单选题(共45分,每题3分)¶
- MongoDB 的组织体系中,哪一个不是必须的?( )
A. 数据库(database)
B. 模式(schema)
C. 文档集(collection)
D. 文档(document)
- 使用 python 操作 MongoDB数据库时,如果想要查询“年龄在21和25之间的用户名字”的记录(不包括21和25岁,只显示名字),可以使用以下哪个查询条件?( )
A. find({'age': {'$gte':21, '$gte':25}})
B. find({'age': {'$gt': 21, '$lt':25}})
C. find({'age': {'$gte':21, '$lte':25}}, {'_id' : 0, 'name':1})
D. find({'age': {'$gt':21, '$lt':25}}, {'_id' : 0, 'name': 1})
- 如下SQL语句中,哪些可能返回null值?( )
(1) Select count(*) From t1;
(2) Select max (col1) From t1;
(3) Select concat('max=', max(col1)) From t1;
A. (1)可能,(2)和(3)不可能
B. (2)可能,(1)和(3)不可能
C. (3)可能,(1)和(2)不可能
D. (1)不可能,(2)和(3)可能
- 假设数据库表定义如下,哪个SQL语句查询能最大程度地利用索引?( )
create table T (
k int unsigned not null auto_increment,
a date,
b varchar(24),
c int, d varchar (24),
primary key (k), unique key a_index (a DESC, b DESC));
A. select b from WHERE b like '%aaa';
B. select a, b from T WHERE a='2015-10-25' ORDER BY b ASC, c ASC;
C. select a, b, c from T WHERE a='2015-10-25' ORDER BY b ASC;
D. select a, b, c from T WHERE a='2015-10-25' ORDER BY b DESC;
- 在PostgreSQL中,更新 trans 表中 id=1 的数据,将 data 字段值设为2,应使用的命令是?( )
A. UPDATE trans SET data=2 WHERE id=1;
B. MODIFY trans SET data=2 WHERE id=1;
C. CHANGE trans SET data=2 WHERE id=1;
D. ALTER trans SET data=2 WHERE id=1;
- 以下关于“关系”或“关系代数”的说法,哪一个有误?( )
A. 一个关系是一个集合
B. 在一个关系上进行“选择”操作后,其结果仍然是一个关系
C. “投影”操作是将关系中的部分属性和其对应的列删除掉
D. 不是任意两个关系上都可以执行“并”或“交”的集合操作
- 关系数据库和文档数据库各自的优缺点不包括( )。
A. 关系代数的表达能力比文档 CRUD 操作更强
B. 对于对象的存储,文档数据库通常使用起来更方便
C. 关系数据比文档数据中的冗余更少
D. 对于两类实体a和b以及它们之间的一对多联系,关系模型不得不将a和b存放在两个不同的关系中,而文档模型则可以将a和b存放在同一类文档中
- 以下查询中的X取哪个值是不合法的?( )
Select X
From Product, Order
Where Product.ID = Order.productID
And Order.quantity > 100
Group By Product.ID;
A. Product.ID
B. Order.quantity
C. Max(Order.quantity)
D. Count(Product.ID)
- 哪个属性上的索引不可能对以下查询起到加速作用?( )
Select Distinct R2.B
From R1 Join R2 On R1.C = R2.C
Where R1.A > 100
A. R1.A
B. R2.B
C. R1.C
D. R2.C
-
假设有一个简单的连接查询
Select * From R1 Join R2 On R1.A = R2.B。在以下哪种情况下,索引连接算法比哈希连接算法可以更高效?( )A. R1和R2 都比较大,R1.A和R2.B上都创建有索引
B. R1和R2 都比较大,R1.A或R2.B上只创建有一个索引
C. R1很大,R2很小,R2.B上创建有一个索引
D. R1很大,R2很小,R1.A上创建有一个索引
-
某数据库系统通过 undo 日志实现事务处理的原子性和持久性,并通过两阶段锁实现隔离性。当某个数据X被事务T更新之前,一项日志记录
会被记录到硬盘上,a记录了X被更新前的取值。假设系统发生了故障,记录在硬盘上的最后一段日志为以下的哪一段是可能的?( ) A.
, , , , B.
, , , , C.
, , , , D.
, , , , -
在ER图中有两个实体类A和B,实体类之间有一个联系。已知A和B的数据分别存放在 Ra和Rb 两个关系表中,那么A和B的联系应该存放在哪里?( )
A. 必须使用第三张关系表Rc存放两者的联系
B. 当A和B之间为1:n的联系时,可以将联系存放在 Ra 中
C. 当A和B之间为1:n的联系时,可以将联系存放在 Rb中
D. 当A和B之间为n:m的联系时,可以将联系存放在 Ra 中
-
假设学校的教务系统里有三张表:学生表(学号,姓名,生日,性别,学院)、课程表(课程号,课程名称,学分,主讲老师)、选课表(学号,课程号,学期,成绩)。带下划线的属性上都有创建单值索引。\(\sigma\) 代表选择操作, \(\prod\) 代表投影操作, \(⋈\) 代表自然连接操作。现要查找“张三”在哪些课程上得了满分(假设满分是极少出现的情况),请问以下哪个关系代数表达式的执行效率最高?( )
A. \(\prod_{课程名称}(\sigma_{姓名='张三'}(学生表) \Join \sigma_{成绩=100}(选课表) \Join 课程表 )\)
B.\(\prod_{课程名称}(\sigma_{成绩=100}(\sigma_{姓名='张三'}(学生表) \Join 选课表) \Join 课程表 )\)
C.\(\prod_{课程名称}(\sigma_{姓名='张三'}(学生表 \Join \sigma_{成绩=100}(选课表)) \Join 课程表 )\)
D.\(\prod_{课程名称}(\sigma_{姓名='张三' \cap 成绩=100}(学生表 \Join 选课表 \Join 课程表 ))\)
-
以下选项中,哪些是有利于事务处理的执行效率的?( )
①缩减事务的长度; ②将数据更新操作推迟到事务最后执行; ③降低事务处理的隔离级别; ④用一块单独的硬盘记录日志顺序写
A. 1, 2, 3
B. 1, 3, 4
C. 2, 3, 4
D. 以上都是
-
以下关于数据库设计中的冗余的说法,哪个是不合理的?( )
A. 冗余可以有助于提升数据库的访问效率
B. 冗余有可能降低数据库的访问效率
C. 冗余对于数据库的更新操作是不利的
D. 数据库设计应该尽量避免冗余
二、SQL查询(15分,每题5分)¶
假设一个数据库由以下几个表格构成
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查询):
- 请查找:Tom Hanks 的哪部电影的票房收入最高(给出电影的名称);
- 请查找:哪些导演在2024年执导了三部或三部以上的电影(给出导演的名字);
- 请查找:哪些导演执导的所有电影票房收入都超过了1亿(给出导演的名字)。
三、数据库设计(30分)¶
有一款拼车应用。该应用的用户可以提交自己的行程并发起拼车服务,即在出发前半小时以上提供自己行程信息,包括起点地址、终点地址、出发时间以及车上的空闲座位数。任意用户都可以提交拼车请求,提供自己希望出发的时间段、起点地址、终点地址和乘车人数。应用会调用一个算法(无需考虑此算法是如何访问数据库的)帮他找到所有满足以下条件的行程:(1)行程的出发时间在请求的时间段内;(2)行程的出发地址在请求的出发地址的5公里距离之内;(3)行程会路过请求的终点;(4)行程当前的空闲座位数不少于请求的乘车人数。即使没有行程满足用户的需求,用户的请求也会被暂存下来,以便他随时查看是否有新的行程满足他的需求。
一旦有满足用户请求的行程,用户可以选择一个合适的行程并发起拼车申请,一旦申请发出,该行程相应的空闲座位即被占据,暂时无法再租借给其他人。该行程的发起人接到申请后可以在一小时内接受或拒绝申请。一小时内无反应,申请就被自动接受。(注意:在坐得下的前提下,一辆车可以被多个人拼。)一旦申请被接受就无法再反悔,系统会调用支付宝自动进行扣款转账(扣款转账功能由支付宝提供,不在本设计的考虑范围内)。之后,行程的发起人应按照约定前往约定地址接送拼车申请人。行程结束后,申请人可以根据实际情况对发起人进行评价和打分。如果发起人没有履行约定,拼车申请人可以提出投诉,并由工作人员进行核实和仲裁。
要求:请完成该拼车应用的数据库设计,画出ER图(10分),分别给出文档数据库的结构设计(7分)和关系数据库的结构设计(7分)(结构设计须给出创建索引的位置),最后在关系数据库设计的基础上设计“发起拼车申请”的事务处理流程(6分)(给出事务开始和事务结束的位置以及事务对数据库的访问序列)。必要时,请用文字简要说明你的想法。
四、数据处理算法设计(10分)¶
对于表R和表S之间的等值连接操作 \(R \Join S\) ,假设连接条件为 R.a=S.b (a和b分别为R和S的属性),并且a和b上都建有索引。请简述:以下三种连接算法中的每一种算法,分别在R、S、a、b满足什么条件时,其执行效率最高?(假设I/O是性能瓶颈。通常情况下,执行效率和I/O代价成反比)
(1) 嵌套循环;
(2) 散列连接;
(3) 索引连接。