跳转至

2023-2024-2期末(拔尖班)

要求:请将解题过程和答案书写在题目之后的空白处

一、数据库设计(本题35分)

一个拍卖网站。用户可以将自己的物品在网站上进行竞价拍卖。拍卖前,用户需要填写物品的名称、型号、生产厂家、生产日期以及其他信息,从而对拍卖品进行完整的描述,并且设置起拍价和竞拍截止日期。一旦拍卖开始,其他用户就可以在截止日期之前对拍卖品进行报价。每次报价都需要高于拍卖品当前的最高报价,否则报价无效。每个用户可以多次报价同一个拍卖品,拍卖品的主人可以随时跟踪报价情况,如果发现有信誉不良的用户进行了报价,可以主动否决该用户的报价。否决后,次高报价晋升为最高报价,被否决的用户将无权再对该拍卖品进行报价。竞拍截止日期到达后,拍卖停止,最高出价的用户获得拍卖品的购买权。一周内,购买用户需要按照出价通过支付宝将钱付给拍卖品主人,否则将留下不良记录(系统会自动在支付宝查询转账信息)。付款完成后的一周内,如果主人没有将拍卖品寄出给购买用户,也会留下不良记录(假设系统可以自动查询快递信息,并且可以直接通过支付宝将钱扣回给购买用户)。

请完成该拍卖网站的数据库设计:

  1. 使用ER 图给出概念设计(15分)(必要时,请用文字简要说明你的想法);
  2. 分别给出文档数据库和关系数据库的模式结构设计(14分)(结构设计须给出创建索引的位置);
  3. 最后在关系数据库的结构设计之上给出竞拍过程的事务设计(6分)(给出事务开始和事务结束的位置以及事务对数据库的访问序列)。

二、SQL(本题30分)

假设一个关系数据库由以下几个表格构成

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查询):

  1. 请找到2020年以来合作次数最多的导演和演员(10分)。
  2. 请找到曾经在同一部电影中既做导演又做演员的人(10分)。
  3. 请找到满足以下条件的导演:他(或她)导演的所有电影都取得了1亿以上的票房(10分)。

三、数据存储(本题10分)

数据管理系统对存储空间进行分页管理的时候,页的大小通常是一个设计要点。有的数据管理系统选择使用比较小的页,如4KB或8KB。而另一些系统会使用比较大的页,比如4MB甚至128MB。请问:小页面对什么情况有利?大页又对什么情况有利?我们确定页的大小时应该考虑哪些因素?

四、查询处理(本题15分)

假设学校的教务系统里有三张表:学生表(学号,姓名,生日,性别,学院)、课程表(课程号,课程名称,学分,主讲老师)、选课表(学号,课程号,学期,成绩)。关于表的大小,学生表有数万行,课程表有数百行,选课表有近百万行。带下划线的属性上都有创建单值索引。

现要查找在课程“数学A”上没有及格的计算机学院的学生(只需要其学号和名字)。

请给出你认为性能最好的查询执行计划,并说明理由。

五、事务处理(本题10分)

假设有一个文档数据库系统,提供最简单的对单个文档的增、删、改、查功能(CRUD)。对每个文档集,该系统都维护了一个元数据,用于记录在这个文档集发生的增、删、改次数。每次调用增、删、改操作时,系统首先要将这个元数据增加1,再完成余下的工作(假设这个逻辑顺序无法改变)。假设该系统使用简单的两阶段锁(2PL)实现并发控制,确保每个操作的原子性,也就是说,每次调用增、删、改操作都需要先对这个元数据加排他锁,而在操作完成之后才释放锁。结果,该元数据成为了该系统的一个阻塞点,导致系统性能低下。

请给出并发控制的改进方法,缓解该元数据引起的阻塞。