2022年上半年数据库系统工程师《案例分析》真题及详解【完整版】
案例分析题(请阅读案例背景,按试题要求进行解答)
试题一(15分)
阅读下列说明,回答问题1至问题3,将解答填入答题纸的对应栏内。
【说明】
某市为了规范疫苗接种工作,提升效率,并为抗击疫情提供疫苗接种数据支撑,需要开发一个信息系统。请根据下述需求描述完成该系统的数据库设计。
【需求描述】
(1)记录疫苗供应商的信息,包括供应商名称、地址和一个电话。
(2)记录接种医院的信息,包括医院名称、地址和一个电话。
(3)记录被接种者个人信息,包括姓名、身份证号和一个电话。
(4)记录接种者的疫苗接种信息,包括接种医院信息、被接种者信息、疫苗供应商名称和接种日期。为了提高免疫力,接种者可能需要进行多次疫苗接种(每天最多接种一次),但每次都可以在全市任意一家医院进行疫苗接种。
【概念模型设计】
根据需求阶段收集的信息,设计的实体联系图(不完整)如图1-1所示。
图1-1
【逻辑结构设计】
根据概念模型设计阶段完成的实体联系图,得出如下关系模式(不完整):
供应商(供应商名称,地址,电话)
供货(供应商名称,(a),供货内容)
被接种者(姓名,身份证号,电话)
接种(被接种者身份证号,(b),医院名称,供应商名称)
【问题1】(4分)
根据问题描述,补充图1-1的实体联系图(不增加新的实体)。
【问题2】(4分)
补充逻辑结构设计结果中的(a)、(b)两处空缺,并标注主键和外键完整性约束。
【问题3】(7分)
若医院还兼有核酸检测的业务,检测者可能需要进行多次核酸检测(每天最多检测1次),但每次都可以在全市任意一家医院进行检测。
请在图1-1中增加“被检测者”实体和相应的属性、医院和被检测者之间的“检测”联系和必要的属性,并给出新增加的关系模式。
“被检测者”实体包括姓名、身份证号、住址和一个电话。“检测”联系需要包括检测日期和检测结果等。
【参考答案】
【问题1】(4分)
根据问题描述,补充图1-1的实体联系图(不增加新的实体)。
【答案】
【问题2】(4分)
补充逻辑结构设计结果中的(a)、(b)两处空缺,并标注主键和外键完整性约束。
【答案】(a)医院名称;(b)接种日期。
医院,主键:医院名称。
供货,主键:供应商名称,医院名称;外键:供应商名称,医院名称。
被接种者,主键:被接种者身份证号。
接种,主键:被接种者身份证号,接种日期;外键:被接种者身份证号、医院名称、供应商名称。
【问题3】(7分)
若医院还兼有核酸检测的业务,检测者可能需要进行多次核酸检测(每天最多检测1次),但每次都可以在全市任意一家医院进行检测。
请在图1-1中增加“被检测者”实体和相应的属性、医院和被检测者之间的“检测”联系和必要的属性,并给出新增加的关系模式。
“被检测者”实体包括姓名、身份证号、住址和一个电话。“检测”联系需要包括检测日期和检测结果等。
【答案】
被检测者(姓名,身份证号,住址,电话),主键:身份证号。
检测(被检测者身份证号,医院名称,检测日期,检测结果),主键:被检测者身份证号、检测日期;
外键:被检测者身份证号、医院名称。
试题二(15分)
阅读下列说明,回答问题1至问题3,将解答填入答题纸的对应栏内。
【说明】
某卡丁车场地为方便车手线上查询自己的圈速成绩,设计了相应的关系模型。模型中有三个表:冲线记录表(序列号,日期,冲线时刻,圈速,车号,组别,手机号,车手姓名);
数据库应用案例车手表(车手姓名,手机号,年龄,性别)。
其中序列号唯一确定一条冲线记录,车型和组别可由车号确定,车手手机号唯一,车手姓名可重复。
【问题1】(3分)
冲线记录表中是否含有数据冗余?如果存在冗余,请列出冗余属性。
【问题2】(6分)
请分别给出冲线记录表、赛车表和车手表的主码和外码。
【问题3】(6分)
题干描述的冲线记录表是否满足3NF?如果不满足,请给出导致不满足3NF的函数依赖关系,并用50字以内的文字简要说明解决方案。
【参考答案】
【问题1】(3分)
冲线记录表中是否含有数据冗余?如果存在冗余,请列出冗余属性。
【答案】冲线记录表中含有数据冗余。包含的冗余属性包括:组别,车手姓名。
【问题2】(6分)
请分别给出冲线记录表、赛车表和车手表的主码和外码。
【答案】冲线记录表,主码:序列号,外码:车号、手机号。
赛车表,主码:车号,外码:无。
车手表表,主码:手机号,外码:无。
【问题3】(6分)
题干描述的冲线记录表是否满足3NF?如果不满足,请给出导致不满足3NF的函数依赖关系,并用50字以内的文字简要说明解决方案。
【答案】冲线记录表不满足3NF。
导致不满足3NF的函数依赖关系有:序列号→车号,车号→组别,因此存在非主属性组别传递依赖于主属性序列号。序列号→手机号,手机号→车手姓名,因此存在非主属性车手姓名传递依赖于主属性序列号。
解决方案:消除冲线记录表中的传递依赖,也就是删除冲线记录表中的组别、车手姓名这两个字段。
试题三(15分)
阅读下列说明,回答问题1至问题4,将解答填入答题纸的对应栏内。
【说明】
某工程项目管理系统的部分数据库关系模式如下:
项目:PROJECT(Ino,Jname,City,Date),各属性分别表示项目代码、项目名称、项目所在城市和项目开始日期;
零件:PART(Pno,Pname,Color,Sno,Stock),各属性分别表示零件代码、零件名称、零件颜、零件所在仓库代码及库存量;
供应情况:PJ(Pno,Jno,Qty),各属性分别表示零件代码、项目代码、使用量;
仓库:STORE(Sno,Sname,Address),各属性分别表示仓库代码、仓库名称、仓库地址。
有关上述关系模式的说明如下:
(1)下划线标出的属性是表的主键。
(2)零件表的属性Sno参照了仓库表的主码。一种零件只存放在一个仓库,库存量最低为0。
(3)供应情况表的属性Pno和Jno分别参照了零件表和项目表的主码。
根据以上描述,回答下列问题,将SQL语句的空缺部分补充完整。
请将下面创建零件表PART的SQL语句补充完整,要求定义实体完整性约束、参照完整性约束,以及其
他完整性约束。
CREATE (a) PART (
Pno CHAR (10) (b)
Pname CHAR (20),
Color CHAR (4),
Sno CHAR (4) REFERENCES (c) (Sno)
Stock INT (d));
【问题2】(3分)
创建视图PARTUSED,给出在项目中已使用零件的代码和使用量。此视图的创建语句如下,请补全。
CREATE VIEW PARTUSED AS SELECT Pno, (e) AS Usage FROM PJ (f) BY (g);
【问题3】(4分)
在视图PARTUSED的基础上,查询所有零件的信息要求输出每种零件的零件代码、零件名、零件颜和零件总量(使用量与库存量之和),查询结果按照零件总量降序排列。此功能由下面的SQL语句实现,请补全。
SELECT Pno,Pname, Color, (h) AS Total
FROM PART, PART_USED
WHERE PART.Pno=PART_USED.Pno
(i)
SELECT Pno,Pname,Color,Stock AS Total
FROM PART
WHERE Pno (j)
(SELECT DISTINCT Pno FROM PJ)
ORDER BY Total (k)
【问题4】(4分)
由于某种原因,要拆除代码为'A006'的仓库,该仓库中的零件转入'A002'仓库存放。据此更新数据库的功能由下面的SQL语句实现,请补全。
UPDATE (l) SET (m) WHERE Sno='A006';
(n) FROM (o) WHERE Sno='A006'
【参考答案】
【问题1】(4分)
请将下面创建零件表PART的SQL语句补充完整,要求定义实体完整性约束、参照完整性约束,以及其他完整性约束。
CREATE (a) PART (
Pno CHAR (10) (b)
Pname CHAR (20),
Color CHAR (4),
Sno CHAR (4) REFERENCES (c) (Sno)
Stock INT (d));
【答案】(a)table
(b)primary key
(c)store
(d)check(stock>=0)