试题一(15分)
某新能源汽车公司为了提升效率,需开发一个汽车零件采购系统。请完成系统的数据库设计。
概念结构设计
需求描述
(1)记录供应商信息,包括供应商的名称、地址和一个电话。
(2)记录零件信息,包括零件的编码、名称和价格。
(3)纪录车型信息,包括车型的编号、名称和规格。
(4)记录零件采购信息,某个车型的某种零件可以从多家供应商采购,某种零件也可以被多个车型采用,某家供应商也可以供应多种零件,还包括采购数量和采购日期。
逻辑结构设计
根据概念结构设计阶段完成的实体联系图,得出如下关系模式(不完整):
- 供应商(名称,地址,电话)
- 零件(编码,名称,价格)
- 车型(编号,名称,规格)
- 采购(车型编号,供应商名称,( a ),( b ),采购日期)
问题1(5分)
根据描述补充上图中的实体联系图(不增加新的实体)。
问题2(3分)
补充逻辑结构设计结果中的(a),(b)两处空缺,并标注主键和外键完整性约束。
问题3(7分)
该汽车公司现新增如下需求:记录车型在全国门店的销售情况,门店信息包括:门店编号、地址和电话,销售包括:销售数量和销售日期等,对原有设计进行以下修改以实现该需求。
(1)在图中体现门店信息及其车型销售情况、并标明新增的实体和联系及其重要属性。
(2)给出新增加的关系模式并标注主键和外键完整性约束。
试题二(15分)
汽车厂商对配件进行统一管理,设计了相应的数据库,其中一个表记录了维修配件的使用信息。其表结构如下:
- 维修配件使用表(车牌号,维修时间,配件编码,配件名称,配件供应商,配件仓库编码,仓库地址,维修配件数量)。
其中,车牌号和配件编码满足唯一性。假设同一辆车在同一次维修情况下可能需要多种维修配件,一种配件只能存放于一个配件仓库,一种配件只能由一个配件供应商提供。维修时间精确到秒。
问题1 (7分)
题中给出的维修配件使用表存在数据冗余,请给出具体的冗余属性,并说明因此会出现哪些异常?
问题2 (8分)
维修配件使用表是否满足BCNF? 如果不满足,请对其进行模式分解,使分解后的关系模式满足 BCNF,并标记出主键、外键。
试题三(15分)
某教务管理系统的部分数据库关系模式如下:
- 学生: STUDENT(Sno,Sname,Ssex,Sage, Sdept),各属性分别表示学号、姓名、性别、年龄、所在系名;
- 课程: COURSE(Cno,Cname,Cpno,Ccredit),各属性分别表示课程号、课程名、先修课的课程号、学分;
- 选课: SC(Sno,Cno,Grade),各属性分别表示学号、课程号、成绩。
有关关系模式的说明如下:
(1)下划线标出的属性是表的主键
(2)课程名取值唯一。
根据以上描述,回答下列问题,将SQL语句的空缺部分补充完整。
问题1(3分)
请将下面创建课程表COURSE 的 SQL语句补充完整,要求定义实体完整性约束、参照完整性约束,以及其他完整性约束。
CREATE TABLE COURSE(
Cno CHAR(4) PRIMARY KEY,
Cname CHAR(30) ( a ),
Cpno CHAR(4) references ( b ), ( c )
Ccredit INT
);
问题2(4分)
有一门课程号为“C036”的新开课,要求所有学生选修。该课的基本信息已经录入课程表COURSE 中,现需在选课表SC中插入该课的选课记录。实现此功能的SQL语句如下,请补全。
( d ) INTO SC(Sno, ( e ))
VALUES SELECT Sno,( f ) FROM ( g )
问题3 (4分)
查询每一门课程的间接先修课(先修课的先修课),要求输出课程号和间接先修课的课程号。即使某门课程没有先修课,也需要输出,不过其间接先修课为空。此功能由下面的SQL语句实现,请补全。
SELECT K1.Cno,( h )
FROM COURSE K1 ( i ) OUTER JOIN COURSE K2 ( j ) (( k ) );
问题4 (4分)
查询选课表中已选修了全部课程的学生,要求输出学号和姓名。此功能由下面的SQL 语句实现,请补全。
SELECT Sno,Sname FROM STUDENT WHERE NOT EXISTS
TO
(SELECT * FROM ( l )
WHERE ( m )
(SELECT* FROM ( n )
WHERE ( o ) );
试题四(共15分)
某企业内部信息系统部分简化后的关系模式如下:
- 员工表:EMPLOYEES(Eid,Ename,Address,Phone,Jid),属性含义分别为:员工编码、员工姓名、家庭住址、联系电话、岗位级别编码。
- 岗位级别表:JOB_LEVELS (Jid,Jname,Jbase_salary),属性含义分别为:岗位级别编码、岗位名称、岗位基本工资。
- 员工工资表:SALARY(Eid,attendance_wage,merit_pay,overtime_wage,salary,tax,year,month),属性含义分别为:员工编码、考勤工资、绩效工资、加班工资、最终工资、税、年份、月份。
该企业在每月25日计算员工的工资。首先是根据考勤系统以及绩效系统中的数据,计算出员工的考勤、绩效和加班工资,存入到员工工资表;其次结合员工的岗位基本工资,计算出最终工资,完成对员工工资表记录的更新。最后依据员工工资表完成工资的发放。
问题1(6分)
下面是月底25日计算某员工最终工资的存储过程程序,请补全空缺处的代码。
CREATE PROCEDURE SalaryCalculation( ( a ) empld char(8), IN iYear number(4),
IN iMonth number(2))
DECLARE
attendance number(14, 2);
merit number(14, 2);
overtime number(14, 2);
base number(14, 2);
all salary number(14, 2);
BEGIN
SELECT attendance_wage, merit_pay, overtime_wage INTO ( b )
FROM SALARY WHERE Eid=empld FOR UPDATE;
SELECT Jbase_salary INTO :base
FROM EMPLOYEES T1, ( c )
WHERE T1.Jid=T2.Jid AND T1.Eid= empld;
all_salary := attendance + merit + overtime + base;
UPDATE SALARY SET salary = :all_salary
WHERE ( d ) AND year = iYear AND month = iMonth;
( e )
EXCEPTION WHEN OTHERS THEN ( f )
END
问题2(5分)
为了防止对员工工资表的非法修改(包括内部犯罪),系统特意规定了员工工资表修改的业务规则:对员工工资表的修改只能在每月25日的上班时间进行。下面是员工工资表修改业务规则对应的程序,请补全空缺处的代码。
CREATE TRIGGER CheckBusinessRule ( g )
INSERT OR DELETE OR ( h ) on SALARY FOR EACH ( i )
BEGIN
IF (TO_CHAR(sysdate, 'DD')<>( j ) OR (to_number(TO_CHAR(sysdate,'HH24')) ( k ) BETWEEN 8 AND 18) THEN
Raise_Error; //抛出异常
END IF:
END:
问题3 (4分)
人事部门具有每月对员工进行额外奖罚的权限,该奖罚也反应到员工的最终工资上。假设当某月计算一位员工的最终工资时,同一时间人事部门对该员工执行了奖励2000元的事务操作,对应事务的部分调度序列如表4-1所示。
(1)请说明该事务调度存在哪种并发问题?
(2)采用2PL是否可以解决该并发问题?是否会产生死锁?
试题五(15分)
某装备的组装过程需要经过多道程序,由于工作空间狭小,同时只能有一人在操作间工作,所以在每道工序之间需要先完成使用配件的出库后,操作人员携带配件到操作间进行安装工作,安装过程中需要扫描配件编码以自动记录该配件的安装情况。
假使存在三个事务用于处理某一类配件的某次安装实施,事务T1负责出库登记,T2负责安装登记,T3负责将未使用的配件重新入库。所有三个事务执行完成后,T1出库的数量应等于T2安装的数量与T3重新入库的数量之和。数据项I记录配件的库存数量,数据项J记录成功安装的数量。某次组装过程出库了12个配件,安装了6个。假设数据库系统采用检查点机制对故障进行恢复,部分日志文件如表5-1所示。日志记录内容中:<Ti, START>表示事务Ti开始执行,<Ti, COMMIT>表示事务Ti提交,<Ti, D, V1, V2>表示事务Ti将数据项D的值由V1修改为V2。例如:<T1, D, 22, 3>表示事务T1将数据项的数值从22修改为3。<Ti,D, V>表示将事务Ti回滚数据项D的值回滚到V。<Ti,abort>表示事务Ti回滚结束。CRASH表示系统磁盘出错。请回答以下问题。
问题1(5分)
请用100字以内的文字简要说明数据库系统常见故障类型,并说明表5-1中的日志记录表明数据库出现哪种类型的故障。
问题2(4分)
请给出系统恢复时需要重做 (Redo) 的事务列表和需要撤销 (Undo) 的事务列表
问题3(6分)
根据题干中所描述的业务逻辑,请填写表5-1日志记录中的空白(a);请给出 Undo恢复的补偿日志记录,填写空白(b)和(c)。
2023年上半年数据库系统工程师下午真题及答案解析
试题一(15分) 单击此链接查看真题解析视频2023软考-数据库系统工程师-下午历年真题解析视频课程(第二期)-学习视频教程-腾讯课堂
问题1(5分)
问题2(3分)
(a)零件的编码 (b)采购数量
主键为组合主键(车型编号,供应商名称,零件编码,采购日期);
外键:车型编号,供应商名称,零件编码。
问题3(7分)
(1)
(2)
门店(门店编号,地址,电话) 主键:门店编号
销售(门店编号,车型编号,销售数量,销售日期) 组合主键:(门店编号,车型编号, 销售日期),外键:门店编号、车型编号
试题二(15分)
问题1 (7分)
配件编码→(配件名称,配件供应商,配件仓库编码)
配件仓库编码→仓库地址
所以,配件名称,配件供应商,配件仓库编码,仓库地址是冗余属性。
会出现插入异常、更新异常,删除异常。
问题2 (8分)
不满足BCNF。
- 维修配件使用表(车牌号,维修时间,配件编码,维修配件数量) 主键:车牌号+维修时间+配件编码,外键:配件编码。
- 配件信息表(配件编码,配件名称,配件供应商,配件仓库编码) 主键:配件编码,外键:配件仓库编码。
- 仓库信息表(配件仓库编码,仓库地址) 主键:配件仓库编码
试题三(15分)
问题1(3分)
(a) unique (b) COURSE (c) Cno
问题2(4分)
(d) INSERT (e) Cno (f) 'C036' (g) STUDENT
问题3 (4分)
(h) K2.Cpno (i) LEFT (j) ON (k) K1.Cpno=K2.Cno
问题4 (4分)
(l) COURSE (m) NOT EXISTS (n) SC
(o) SC.Sno=STUDENT.Sno AND SC.Cno=COURSE.Cno
试题四(共15分)
问题1(6分)
(a) IN (b) :attendance, :merit, :overtime (c) JOB_LEVELS T2 (d) eid=empId
(e) COMMIT (f) ROLLBACK
问题2(5分)
(g) BEFORE (h) UPDATE (i) row (j) ‘25' (k) NOT
问题3 (4分)
(1)人事部门奖惩事务的更新最新工资可能会被计算最终工资事务的计算最终工资写入覆盖,即存在丢失更新。
(2)可以,可能会产生死锁。
试题五(15分)
问题1(5分)
(1)事务内部故障;(2)系统故障;(3)介质故障。
系统磁盘出错属于介质故障。
解析:
问题2(4分)
需要重做 (Redo) T2事务,需要撤销 (Undo) T3事务。
问题3(6分)
(a)14 (b)<T3,I,8> (c)<T3,abort>