2025数据库系统工程师模拟题

2025数据库系统工程师模拟题

【说明】

某电视台拟开发一套信息管理系统,以方便对全台的员工、栏目、广告和演播厅等进行管理。

【需求分析】

(1)系统需要维护全台员工的详细信息、栏目信息、广告信息和演播厅信息。员工的信息主要包括工号、姓名、性别、出生日期、电话和住址等,栏目信息主要包括:栏目名称、播出时间和时常等。广告信息主要包括:广告编号、价格等。演播厅信息包括:房间号、房间面积等。

(2)电视台根据调度单来协调各档栏目、演播厅和场务。一个销售档栏目只会占用一个演播厅,但会使用多名场务来进行演出协调。演播厅和场务可以被多个栏目循环使用。

(3)电视台根据栏目来插播广告。每档栏目可以插播多条广告,每条广告也可以在多档栏目中插播。

(4)一档栏目可以有多名主持人,但一名主持人只能主持一档栏目。

(5)一名编辑人员可以编辑多条广告,一条广告只能由一名编辑人员编辑。

【概念模型设计】

根据需求阶段收集的信息,设计的实体联系图(不完整)如图所示。

电视台ER(不完整)

【逻辑结构设计】

根据概念模型设计阶段完成的实体联系图,得出如下关系模式(不完整)

演播厅(房间号,房间面积)
栏目(栏目名称,播出时间,时长)
广告(广告编号,销售价格,(a))
员工(工号,姓名,性别,出生日期,电话,住址)
主持人(主持人工号,(b))
插播单((c),播出时间)
调度单((d))

问题1:补充图中的联系和联系的类型。

电视台ER(完整)

问题2:将逻辑设计阶段生成的关系模式中的空白处补充完整,并指明空白处的关系模式的主键。

答:(a):编辑人员工号。(b):栏目名称。(c):栏目名称,广告编号。(d):栏目名称,房间号,场务工号。广告关系模式中,广告编号为主键。主持人关系模式中,主持人工号为主键。插播单关系模式中,属性广告编号和栏目名称是主键。调度单关系模式中,属性栏目名称、房间号和场务工号是主键。

问题3:先需要记录广告商信息,增加广告商实体。一个广告商可以提供多条广告,一个广告只能由一个广告商提供。请根据该要求,对图进行修改,画出修改后的实体间联系和联系的类型。

广告商ER


【说明】

某图书馆的管理系统部分需求和设计结果描述如下:图书馆的主要业务包括以下几项:

(1)对所有图书进行编目,每一书目包括ISBN号、书名、出版社、作者、排名,其中一部书可以有多名作者,每名作者有唯一的一个排名。

(2)对每本图书进行编号,包括书名、ISBN号、书名、出版社、破损情况、存放位置和定价,其中每一本书有唯一的编号,相同ISBN号的书或因不同印刷批次而定价不同。

(3)读者向图书馆申请借阅资格,办理借书证,以后凭借书证从图书馆借阅图书。办理借书证时需登记身份证号、姓名、性别、出生年月日,并交纳指定金额的押金。如果所借图书定价较高时,读者还需补交押金,还书后可退所补交的押金。

(4)读者借阅图书前,可以通过ISBN号、书名或作者等单一条件或多条件组合进行查询。根据查询结果,当有图书在库时,读者可直接借阅;当所查书目的所有图书已被他人借走时,读者可进行预约,待他人还书后,由馆员进行电话通知。

(5)读者借书时,由系统生成本次借书的唯一流水号,并登记借书证号、书号、借书日期,其中同时借多本书使用同一流水号,每种书目都有一个允许一次借阅的借书时长,一般为90天,不同书目有不同的借书时长,并且可以进行调整,但调整前所借出的书,仍按原借书时长进行处理。

(6)读者还书时,要登记还书日期,如果超出借书时长,需缴纳相应的罚款;如果所还图书由借书者在持有期间造成破损,也要进行登记并进行相应的罚款处罚。

初步设计的该图书馆管理系统,其关系模式如下所示

书目(ISBN号,书名,出版社,作者,排名,借书时长)
图书(书号,ISBN号,书名,出版社,破损情况,存放位置,定价)
读者(借书证号,身份证号,姓名,性别,出生年月日,联系电话,押金)
预约(预约流水号,ISBN号,借书证号,预约日期)
借还(流水号,借书证号,书号,借书日期,还书日期,罚款金额,罚款原因)

问题1:对关系"借还",请回答以下问题:

(1)列举出所有候选键;

答:候选键:(流水号,书号)#这是因为题干内说明了借多本书使用同一流水号,说明流水号不能唯一确定借阅记录,所以还需要借阅书号的参与。

(2)根据需求描述,借还关系能够实现对超出借书时长的情况进行正确判定?用60字以内文字简要叙述理由。如果不能,请给出修改后的关系模式(只修改相关关系模式属性时,仍使用原关系名,如需分解关系模式,请在原关系名后加1,2...等进行区别)

答:不能。因为原始的“借还”关系中缺少借出时“借书时长”这一历史快照信息**,如果“借书时长”在借出后发生了调整,就无法正确判断是否超期。修改后的关系模式

借还(流水号,借书证号,书号,借书日期,还书日期,罚款金额,罚款原因,借书时长)

问题2:对于关系"图书"请回答以下问题

(1)写出该关系的函数依赖集

书号 → ISBN号,破损情况,存放位置,定价  
ISBN号 → 书名,出版社

(2)判定该关系是否属于BCNF,用60字以内文件简要叙述理由。如果不是,请进行修改,使其满足BCNF,如果需要修改其他关系模式,请一并修改,给出修改后的关系模式(只修改先相关关系模式属性时,仍使用原关系名,如需分解关系模式,请在原关系名后加1,2...进行区别)

答:该关系不属于BCNF,存在非主属性对码的传递依赖,修改后的关系模式如下

图书1(书号,ISBN号,破损情况,存放位置,定价)
图书2(ISBN号,书名,出版社)

问题3:对关系"书目",请回答以下问题:

(1)是否属于第四范式,用60字以内文字叙述理由。

答:不属于。因为:一个ISBN号可能对应多个作者,存在多值依赖(ISBN号 →→ 作者),违反4NF。

(2)如果不是,将其分解为第四范式,分解后的关系名依次为:书目1,书目2...。如果在解决问题1、问题2时,对该关系的属性进行了修改,请沿用修改后的属性。

答:修改后的关系模式如下

书目1(ISBN号,书名,出版社,借书时长)
主键:ISBN号。描述书目的基本信息,满足 BCNF 和 4NF

书目2(ISBN号,作者,排名)
主键:(ISBN号,作者)或(ISBN号,排名)。表示每本书对应的作者列表及其排名,解决多值依赖问题,满足 4NF

【说明】

某大型集团公司的数据库的部分关系模式如下:

员工表:EMP(Eno,Ename,Age,Sex,Title),各属性分别表示员工工号、姓名、年龄、性别和职称级别,其中性别取值为男、女
公司表:COMPANY(Cno,Cname,City),各属性分别表示公司编号、名称和所在城市
工作表:WORKS(Eno,Cno,Salary),各属性分别表示职工工号、工作的公司编号和工资

有关关系模式的属性及相关说明如下:

(1)允许一个员工在多家公司工作,使用身份证号作为工号值。

(2)工资不能低于1500元。

问题1:请将下面创建工作关系的SQL语句的空缺部分补充完整,要求指定关系的主码、外码,以及工资不能低于1500元的约束。

CREATE TABLE WORKS(
Eno CHAR(10) (a)
Cno CHAR(4) (b)
Salary int (c)
PRIMARY KEY (d)
)
CREATE TABLE WORKS(
Eno CHAR(10) REFERENCES EMP(Eno)
Cno CHAR(4) REFERENCES COMPANY(Cno)
Salary int CHECK(Salart >= 1500)
PRIMARY KEY (Eno,Cno)
)

问题2:请将下面SQL语句的空缺部分补充完整。

(1)创建女员工信息的视图FemaleEMP。属性有Eno、Ename、Cno、Cname和Salary,请将下面SQL语句的空缺部分补充完整。

CREATE (e) AS
    SELECT EMP.Eno,Ename,COMPANY.Cno,Cname,Salary FROM EMP,COMPANY,WORKS
    WHERE (f);
CREATE VIEW FemaleEMP(Eno,Ename,Cno,Cname,Salary)
    AS
    SELECT EMP.Eno,Ename,COMPANY.Cno,Cname,Salary FROM EMP,COMPANY,WORKS
    WHERE WORKS.Eno=EMP.Eno AND WORKS.Cno=COMPANY.Cno AND Sex='女';

(2)员工的工资由职称级别的修改自动调整,需要用触发器来实现员工工资的自动维护,函数float Salary_value(char(10) Eno)依据员工号计算员工新工资。请将下面的SQL语句的空缺部分补充完整。

CREATE (g) Salary_TRG AFTER (h) ON EMP
REFERENCING new row AS nrow
FOR EACH ROW
BEGIN
UPDATE WORKS
SET (i);
WHERE (j);
END
CREATE TRIGGER Salary_TRG AFTER UPDATE ON EMP
REFERENCING new row AS nrow
FOR EACH ROW
BEGIN
UPDATE WORKS
SET Salary=Salary_value(nrow.Eno);
WHERE WORKS.Eno=nrow.Eno;
END

问题3:请将下面SQL语句的空缺部分补充完整。

(1)查询员工最多的公司编号和公司名称。

SELECT COMPANY.Cno,Cname FROM COMPANY,WORKS
WHERE COMPANY.Cno=WORKS.Cno
GROUP BY (k)
HAVING (l) (SELECT COUNT(*) FROM WORKS GROUP BY Cno);
SELECT COMPANY.Cno,Cname FROM COMPANY,WORKS
WHERE COMPANY.Cno=WORKS.Cno
GROUP BY COMPANY.Cno,Cname
HAVING COUNT(*) >= ALL (SELECT COUNT(*) FROM WORKS GROUP BY Cno);

(2)查询所以不在"中国银行北京分行"工作的员工工号和姓名。

SELECT Eno,Ename
FROM EMP
WHERE Eno(m)(
    SELECT Eno
    FROM ()
    WHERE ()
    AND Cname='中国银行北京分行'
)
SELECT Eno,Ename
FROM EMP
WHERE Eno NOT IN(
    SELECT WORKS.Eno
    FROM WORKS,COMPANY
    WHERE WORKS.Cno=COMPANY.Cno
    AND Cname='中国银行北京分行'
)

【说明】

某高速路不停车收费系统(ETC)的业务描述如下:

(1)车辆驶入高速入口站点时,将驶入信息(ETC卡号,入口编号,驶入时间)写入登记表。

(2)车辆驶出高速路口站点(收费口)时,将驶出信息(ETC卡号,出口编号,驶出时间)写入登记表。根据入口编号、出口编号及相关收费标准,清算应缴费用,并从绑定的信用卡中扣除费用。一张ETC卡号只能绑定一张信用卡,针对企业用户,一张信用卡号可以绑定多个ETC卡。使用表绑定(ETC卡号,信用卡号)来描述绑定关系,从信用卡(信用卡号,余额)表中扣除费用。

针对上述业务描述,完整下列问题:

问题1:在不修改登记表的表结构和保留该表历史信息的前提下,当车辆驶入时,如何保证当前ETC卡已经清算过,而在驶出时又如何保证该卡已驶入而未驶出?请用100字以内文字简述处理方案。

答:在车辆驶入时判定登记表上对应ETC卡的所有记录,出口编号和驶出时间均不为空,表示该卡已经清算过。在车辆驶出时判定该卡存在记录有驶入信息而出口编号和驶出时间为空。

问题2:在车辆驶出收费口时,从绑定信用卡余额中扣取费用的伪指令如下:读取信用卡余额到变量X,记为x=R(A);扣除费用伪指令x=x-a;写信用卡余额伪指令记为W(A,x)。

(1)当两个绑定到同一信用卡号的车辆同时经过收费口时,可能的指令执行序列为:x1=R(A),x1=x1-a1,x2=R(A),x2=x2-a2,W(A,x1),W(A,x2)。此时会出现什么问题?(100字以内)

答:出现丢失修改的问题,x1的费用扣除写入后的值被x2覆盖,造成对x1并未扣费。

(2)为了解决上述问题,引入独占锁指令XLock(A)对数据A进行加锁,解锁指定UnLock(A)对数据A进行解锁。不从上述执行序列,使其满足2PL协议。

答:加锁后的序列如下

XLock(A)
x1=R(A)
x1=x1-a1
W(A,x1)
UnLock(A)
XLock(A)
x2=R(A)
x2=x2-a2
W(A,x2)
UnLock(A)

问题3:下面是用E-SQL实现的费用扣除业务程序的一部份,请补全空缺处的代码。

CREATE PROCEDURE 扣除(IN ETC卡号 VARCHAR(20), IN 费用 FLOAT)
BEGIN
UPDATE 信用卡 SET 余额=余额-费用
FROM 信用卡,绑定
WHERE 信用卡.信用卡号=绑定.信用卡号 AND (a);
if error then ROLLBACK;
else (b);
END
CREATE PROCEDURE 扣除(IN ETC卡号 VARCHAR(20), IN 费用 FLOAT)
BEGIN
UPDATE 信用卡 SET 余额=余额-费用
FROM 信用卡,绑定
WHERE 信用卡.信用卡号=绑定.信用卡号 AND ETC卡号=:ETC卡号;
if error then ROLLBACK;
else COMMIT;
END

【说明】

如果一个数据库系统采用数据库景象备份机制进行数据库备份。请根据上述描述,回答以下问题。

问题1:如果当前主数据库系统遭遇了不可修复的硬盘故障,整个数据库系统如何工作?

答:由于是镜像数据库系统,因此当主数据库(A服务器)崩溃后,镜像数据库(B服务器)会自动转化为主数据角色接管整个系统服务。系统管理员对A服务器系统进行硬件维修,恢复后设置A服务器为镜像数据库系统,此时利用镜像数据库原理,该系统数据库会与B服务器里面的主数据库同步。如果依然需要使用A服务器作为主数据库,管理员可以设置抢占。

问题2:如果日志文件如下表所示,第一列表示日志记录编号,第二列表示日志记录内容。<\Ti,START>表示事务Ti开始执行,<\Ti,COMMIT>表示事务Ti提交,<\Ti,D,V1,V2>表示事务Ti将数据项D的值由V1修改为V2。

编号 内容
LSN1 <T1,START>
LSN2 <T1,A,0,10>
LSN3 <T2,START>
LSN4 <T2,B,0,9>
LSN5 <T1,C,0,11>
LSN6 <T1,COMMIT>
LSN7 <T2,C,11,3>
LSN8 <T3,START>
LSN9 <T3,A,10,8>
LSN10 <T2,ROLLBACK>
LSN11 <T3,B,9,7>
LSN12 <T4,START>
LSN13 <T3,COMMIT>
LSN14 CRASH

系统发生事务故障时,故障恢复有撤销事务(Undo)和重做事务(Redo)两个操作。请给出系统恢复时需要redo的事务列表和undo的事务列表。

答:redo事务列表:T1、T3。undo事务列表:T2、T4。

问题3:假设系统开始执行前A=0,B=0,C=0,请问系统出现操作系统故障后,恢复后A,B,C各自的数值是多少?

答:A=8;B=7;C=11。