一、[材料型]问答题
试题一(共15分)
阅读下列说明,回答问题1至间题3,将解答填入答题纸的对应栏内。
【说明】
某新能源汽车公司为了提升效率,需要开发一个汽车零件采购系统。请根据下述需求描述完成该系统的数据库设计。
【需求描述】
(1) 记录供应商的信息,包括供应商的名称、地址和一个电话。
(2) 记录零件的信息,包括零件的编码、名称和价格。
(3)记录车型信息,包括车型的编号、名称和规格。
(4)记录零件采购信息。某个车型的某种零件可以从多家供应商采购,某种零件也可以被多个车型采用,某家供应商也可以供应多种零件:还包括采购数量和采购日期。
【概念结构设计】
根据需求阶段收集的信息,设计的实体联系图(不完整)如图1-1所示。

【逻辑结构设计】
根据概念结构设计阶段完成的实体联系图,得出如下关系模式(不完整):
供应商(名称,地址,电话)
零件(编码,名称,价格)
车型(编号,名称,规格)
采购(车型编号,供应商名称,(a),(b),采购日期)
1、【问题1】(5分)
根据问题描述,补充图1-1的实体联系图(不增加新的实体)。
参考答案:A
解析:
根据问题描述和逻辑结构设计,可以知道实体联系图中应该包括“供应商”、“零件”、“车型”和“采购”四个实体。在实体联系图中,供应商和零件之间是多对多的关系,因为一家供应商可以供应多种零件,一种零件也可以由多家供应商提供;车型和零件之间也是多对多的关系,因为一种零件可以被多个车型采用;而采购实体则关联了供应商、车型和采购信息,表示某个车型的某种零件可以从多家供应商采购,同时采购时需要记录采购数量和采购日期。因此,补充的实体联系图应在原有的基础上增加“采购”实体,并用联系线连接“供应商”、“零件”、“车型”和“采购”等实体,同时标明它们之间的关系,如供应商与采购之间的供应关系,车型与采购之间的采购关系等。由于题目要求不增加新的实体,因此只需在原有的基础上完善实体联系图即可。参考解析中提供的图片展示了完善后的实体联系图。
2、【问题2】(3分)
补充逻辑结构设计结果中的(a)、(b)两处空缺,并标注主键和外键完整性约束。
参考答案:A
解析:
本题考查的是将ER图转换为关系模式的方法。在逻辑结构设计阶段,根据实体联系图中的关系,将实体转换为关系模式。对于“采购”这一实体,它与“车型”、“供应商”和“零件”都有关联,因此需要根据关联规则补充关系模式的属性。根据规则(3),对于m:n联系,需要在关系模式中包括两端实体键的组合作为键,同时包括联系类型的属性。在这里,“采购”关系模式需要包括“车型编号”、“供应商名称”和“零件编码”作为外键,以及自身的属性如“采购数量”和“采购日期”。因此,(a)处应填写“零件编码”,(b)处应填写“采购数量”,并且关系模式的主键为(车型编号,供应商名称,零件编码,采购日期)。
3、【问题3】(7分)
该汽车公司现新增如下需求:记录车型在全国门店的销售情况。门店信息包括门店的编号、地址和电话:销售包括销售数量和销售日期等。
对原有设计进行以下修改以实现该需求:
(1)在图1-1中体现门店信息及其车型销售情况,并标明新增的实体和联系,及其必要属性。
(2)给出新增加的关系模式,并标注主键和外键元整性约束。
参考答案:A
解析:
本题主要考察的是根据需求变化对原有数据库设计的修改能力。根据新增需求,需要记录车型在全国门店的销售情况,包括门店信息(编号、地址、电话)和销售情况(销售数量、销售日期等)。
在概念结构设计阶段,需要在原有实体联系图上添加“门店”实体,以及“门店”和“车型”之间的“销售”联系。在逻辑结构设计阶段,根据实体联系图转化为关系模式,需要新增“门店”关系模式,并修改“采购”关系模式以包含与新增实体相关的属性。同时,根据关系模式的完整性约束,确定主键和外键。在本题中,“门店”关系模式的主键为“编号”,而“销售”关系模式的主键为组合键(门店编号、车型编号、销售日期),并包含外键(门店编号、车型编号)。
试题二(共15分)
阅读下列说明,回答问题1至问题2,将解答填入答题纸的对应栏内。
【说明】
一汽车厂商对配件进行统一管理,设计了相应的数据库,其中一个表记录了维修配件的使用信息。其表结构如下:
维修配件使用表(车牌号,维修时间,配件编码,配件名称,配件供应商,配件仓库编码,仓库地址,维修配件数量)
其中,车牌号和配件编码满足唯一性。假设同一辆车在同一次维修情况下可能需要多种维修配件;一种配件只能存放于一个配件仓库,一种配件只能由一个配件供应商提供。维修时间精确到秒。
4、【问题1】(7分)
题中给出的维修配件使用表存在数据冗余,请给出具体的冗余属性,并说明因此会出现哪些异常?
参考答案:A
解析:
在给定的维修配件使用表中,“配件名称”、“配件供应商”、"仓库地址"等属性存在数据冗余。这是因为同一辆车在同一次维修情况下可能需要多种维修配件,但每种配件的名称、供应商和仓库地址都是固定的,没有必要在每条记录中都存储这些信息。这种数据冗余可能导致插入异常、删除异常和更新异常。例如,当添加新的维修记录时,如果某种配件的供应商或仓库地址发生变化,需要在所有相关的维修记录中更新这些信息,这增加了数据维护的复杂性。因此,“配件名称”、“配件供应商”、"仓库地址"是冗余属性。
5、【问题2】(8分)
维修配件使用表是否满足BCNF?如果不满足,请对其进行模式分解,使分解后的关系模式满足 BCNF,并标记出主键和外键。
参考答案:A
解析:
根据题目描述的维修配件使用表,其表结构存在非主属性对码的部分依赖和传递依赖,因此不满足BCNF范式。为了满足BCNF范式,我们需要消除这种依赖,将表进行分解。分解后的关系中,"维修配件使用表"记录维修配件的使用信息,"配件"表记录配件的详细信息,"仓库"表记录仓库的信息。同时,"车牌号"和"配件编码"组合可以唯一标识一条维修配件使用记录,因此设为主键;而"配件编码"与"仓库编码"能够关联相应的配件与仓库信息,因此设为外键。
试题三(共15分)
阅读下列说明,回答问题1至问题4,将解答填入答题纸的对应栏内。
【说明】
某教务管理系统的部分数据库关系模式如下:
学生:STUDENT(Sno, Sname, Ssex, Sage, Sdept),各属性分别表示学号、姓名、性别、年龄、所在系名;
课程:COURSE(Cno, Cname, Cpno , Ceredit),各属性分别表示课程号、课程名、先修课的课程号、学分;
选课:SC(Sno,Cno, Grade),各属性分别表示学号、课程号、成绩。
有关关系模式的说明如下:
(1) 下划线标出的属性是表的主键。
(2) 课程名取值唯一。
根据以上描述,回答下列问题,将SQL语句的空缺部分补充完整。
6、【问题1】(3分)
请将下面创建课程表COURSE 的 SQL语句补充完整,要求定义实体完整性约束、参照完整性约束,以及其他完整性约束。
CREATE TABLE COURSE(
Cno CHAR(4) PRIMARY KEY,
Cname CHAR(30) (a) ,
Cpno CHAR(4) REFERENCES (b) , (c)
Ccredit INT);
参考答案:A
解析:
问题1要求创建课程表COURSE,并定义实体完整性约束、参照完整性约束,以及其他完整性约束。
- 实体完整性约束要求表的主键属性不能被NULL值,这里Cno已被定义为主键,满足了实体完整性约束。
- 参照完整性约束用于确保一张表的数据匹配另一张表中的一行数据。在这里,Cpno是课程表的属性,需要参照课程表中的Cno。因此,需要定义FOREIGN KEY来建立参照完整性约束。
- 其他完整性约束通常包括属性的取值范围、是否允许空值等。由于题目没有特别指出其他完整性约束的具体内容,所以此处假设没有其他特定的完整性约束需要补充。
根据以上分析,将SQL语句补充完整如下:
CREATE TABLE COURSE(
Cno CHAR(4) PRIMARY KEY,
Cname CHAR(30) UNIQUE,
Cpno CHAR(4) REFERENCES COURSE(Cno) FOREIGN KEY,
Ccredit INT);
7、【问题2】(4分)
有一门课程号为“C036”的新开课,要求所有学生选修。该课的基本信息已经录入课程表COURSE 中,现需在选课表SC中插入该课的选课记录。实现此功能的SQL语句如下,请补全。
(d) INTO SC(Sno,_(e) )
SELECT Sno,_(f)
FROM (g) ;
参考答案:A
解析:
本题要求插入一门课程号为"C036"的新课程的选课记录到选课表SC中。实现此功能的SQL语句需要使用INSERT INTO语句,将选课表SC的Sno和Cno字段插入数据。通过子查询获得学生表STUDENT中的学号Sno,并将课程号Cno固定为’C036’。同时,由于成绩Grade是字符串类型,需要用单引号将’C036’包裹起来,并命名为Grade,以便插入到选课表SC的Grade字段中。因此,正确的SQL语句为:insert INTO SC(Sno, cno) SELECT Sno,‘C036’ as Grade FROM student。
8、【问题3】(4分)
查询每一门课程的间接先修课(先修课的先修课),要求输出课程号和间接先修课的课程号。即使某门课程没有先修课,也需要输出,不过其间接先修课为空。此功能由下面的SQL语句实现,请补全。
SELECT K1.Cno, (h)
FROM COURSE K1 (i) OUTER JOIN COURSE K2
(j) ( (k) );
参考答案:A
解析:
本题要求查询每一门课程的间接先修课(先修课的先修课),并要求输出课程号和间接先修课的课程号。即使某门课程没有先修课,也需要输出,不过其间接先修课为空。根据题目描述和SQL查询语句的结构,我们可以进行以下分析:
首先,我们需要从COURSE表中选择两个副本K1和K2进行连接操作。由于我们需要查询间接先修课,所以需要使用自连接的方式,将K1的cpno(即先修课的课程号)与K2的cno(课程号)进行匹配。这样,K2中的课程就是K1中课程的间接先修课。
其次,为了满足题目中的要求,即使某门课程没有先修课也需要输出,我们应该使用左外连接(LEFT OUTER JOIN)。这样,即使K1中的课程没有匹配的K2中的课程(即没有间接先修课),也会将其输出,只不过对应的间接先修课课程号为空。
根据以上分析,我们可以补全SQL语句为:
SELECT K1.Cno, K2.Cpno AS 间接先修课的课程号
FROM COURSE K1
LEFT OUTER JOIN COURSE K2
ON K1.cpno=K2.cno;
其中,"K1.Cno"表示课程号,"K2.Cpno"表示间接先修课的课程号。这样,我们就能够输出每一门课程的间接先修课课程号,满足题目要求。
9、【问题4】(4分)
查询选修了课程表中已有全部课程的学生,要求输出学号和姓名。此功能由下面的SQL 语句实现,请补全。
SELECT Sno, Sname FROM STUDENT
WHERE NOT EXISTS
(SELECT * FROM (1)
WHERE (m)
(SELECT * FROM (n)
WHERE (o) ));
参考答案:A
解析:
该题目要求查询选修了课程表中全部课程的学生,这可以通过两个子查询来实现。外层查询遍历所有学生,内层查询检查每个学生是否选修了所有课程。具体实现方式是,首先给COURSE表设置一个别名c,然后在第一个子查询中,对于每个学生,检查是否存在一门课程他没有选修。如果不存在这样的课程,即该学生选修了所有课程,则在第二个子查询中返回true,否则返回false。由于题目要求输出学号和姓名,所以在SELECT语句中选择Sno和Sname两个字段。最后,通过WHERE NOT EXISTS子句筛选出满足条件的记录。
试题四(共15分)
阅读下列说明,回答问题1至问题3,将解答填入答题纸的对应栏内。
【说明】
某企业内部信息系统部分简化后的关系模式如下:
员工表: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日计算员工的工资。首先是根据考勤系统以及绩效系统中的数据,计算出员工的考勤、绩效和加班工资,存入到员工工资表;其次结合员工的岗位基本工资,计算出最终工资,完成对员工工资表记录的更新。最后依据员工工资表完成工资的发放。
10、【问题1】(6分)
下面是月底25日计算某员工最终工资的存储过程程序,请补全空缺处的代码。
CREATE PROCEDURE SalaryCalculation( (a) empId 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, (e)
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;
EXCEPTION WHEN OTHERS THEN (f) ;
END;
参考答案:A
解析:
这道题目是关于数据库存储过程编写的。存储过程用于计算员工的最终工资并更新到数据库表中。下面是每个空缺处的解析:
- a:IN - 存储过程的参数应该是传入值,所以使用IN关键字。
- b::attendance,:merit,:overtime - 这里是将查询结果赋值给本地变量,因此使用冒号加变量名的方式。
- c:JOB_LEVELS T2 - 在查询岗位基本工资时,需要连接员工表(EMPLOYEES)和岗位级别表(JOB_LEVELS),这里T2代表岗位级别表的别名。
- d:eid=empid - 这是更新工资记录的条件之一,需要根据员工编码(eid)来找到特定的记录。
- e:commit - 在成功更新工资记录后,需要提交事务以确保数据被保存到数据库中。
- f:rollback - 如果在计算工资过程中出现异常,需要回滚事务,以保证数据的完整性。
整个存储过程的功能是计算员工的考勤工资、绩效工资、加班工资和岗位基本工资,然后计算最终工资并更新到数据库表中。同时,通过异常处理来确保数据的完整性。
11、【问题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;
参考答案:A
解析:
本题是关于数据库触发器业务规则的设置。根据题目要求,对员工工资表的修改只能在每月25日的上班时间进行。因此,我们需要创建一个触发器来检查这个业务规则。
对于问题g,我们需要填写触发器的触发时间,根据题意,应该是在对SALARY表进行INSERT、DELETE或UPDATE操作之前进行检查,所以选择before。
对于问题h,题目要求的是对员工工资表的修改,即UPDATE操作进行限制,所以这里填写update。
问题i是要求填写触发器的类型,由于是对每一行数据的操作进行检查,所以选择row级触发器。
问题j是设置触发条件中的日期部分,由于要求是在每月的25日,所以应该填写字符串形式的’25’。
问题k是设置工作时间范围的反向条件,即如果当前时间不在早上8点到下午6点之间,则抛出异常。因此,这里应该填写not。
综上,根据题目的要求和数据库触发器的知识,填写了相应的代码空缺部分。
12、【问题3】(4分)
人事部门具有每月对员工进行额外奖罚的权限,该奖罚也反应到员工的最终工资上。假设当某月计算一位员工的最终工资时,同一时间人事部门对该员工执行了奖励2000元的事务操作,对应事务的部分调度序列如表4-1所示。

(1) 请说明该事务调度存在哪种并发问题?
(3) 采用2PL是否可以解决该并发问题?是否会产生死锁?
参考答案:A
解析:
第一个问题中,由于计算员工最终工资的人事部门奖惩事务和计算工资的事务同时进行,存在数据不一致性的问题。在计算员工最终工资时,人事部门对该员工进行了奖励事务操作,更新了员工的工资信息。然而,在计算最终工资的过程中,可能会覆盖人事部门进行的奖励事务操作的更新结果,导致数据不一致性,即丢失修改的问题。
第二个问题中,采用两段封锁协议(2PL)可以解决并发问题。但是,使用2PL控制时,如果事务的执行顺序不当或者资源分配不合理,可能会导致死锁的发生。在两段封锁协议中,事务必须分两个阶段对数据项加锁和解锁。在扩展阶段,事务可以请求任何类型的锁,但不能释放任何锁。而在收缩阶段,事务可以释放任何类型的锁,但不能再请求任何锁。如果事务在扩展阶段获得了锁,但在收缩阶段之前被阻塞,等待其他事务释放锁,那么就可能发生死锁。因此,虽然可以采用2PL解决并发问题,但需要注意避免死锁的发生。
表示事务Ti开始执行,表示事务Ti提交,表示事务Ti将数据项D的值由V1修改为V2。例如:表示事务T1将数据项I的数值从22修改为3。表示将事务Ti回滚,数据项D的值回滚到V。表示事务Ti回滚结束。CRASH表示系统磁盘出错。请回答以下问题。","range":{"gcpBegin":289,"len":0}},"builtinStyleName":""},{"operationType":"ModifyRunProp","param":{"range":{"gcpBegin":289,"len":253},"property":{"rFonts":{"ascii":"\"system-ui\",\"-apple-system\",\"BlinkMacSystemFont\",\"Segoe UI\",\"Roboto\",\"Helvetica Neue\",\"Helvetica\",\"sans-serif\",\"Apple Color Emoji\",\"Segoe UI Emoji\",\"Segoe UI Symbol\",\"Noto Color emoji\",\"Helvetica Neue\",Helvetica,\"PingFang SC\",\"Microsoft YaHei\",\"Source Han Sans SC\",\"Noto Sans CJK SC\",\"WenQuanYi Micro Hei\",sans-serif","hAnsi":"\"system-ui\",\"-apple-system\",\"BlinkMacSystemFont\",\"Segoe UI\",\"Roboto\",\"Helvetica Neue\",\"Helvetica\",\"sans-serif\",\"Apple Color Emoji\",\"Segoe UI Emoji\",\"Segoe UI Symbol\",\"Noto Color emoji\",\"Helvetica Neue\",Helvetica,\"PingFang SC\",\"Microsoft YaHei\",\"Source Han Sans SC\",\"Noto Sans CJK SC\",\"WenQuanYi Micro Hei\",sans-serif","eastAsia":"\"system-ui\",\"-apple-system\",\"BlinkMacSystemFont\",\"Segoe UI\",\"Roboto\",\"Helvetica Neue\",\"Helvetica\",\"sans-serif\",\"Apple Color Emoji\",\"Segoe UI Emoji\",\"Segoe UI Symbol\",\"Noto Color emoji\",\"Helvetica Neue\",Helvetica,\"PingFang SC\",\"Microsoft YaHei\",\"Source Han Sans SC\",\"Noto Sans CJK SC\",\"WenQuanYi Micro Hei\",sans-serif","cs":"\"system-ui\",\"-apple-system\",\"BlinkMacSystemFont\",\"Segoe UI\",\"Roboto\",\"Helvetica Neue\",\"Helvetica\",\"sans-serif\",\"Apple Color Emoji\",\"Segoe UI Emoji\",\"Segoe UI Symbol\",\"Noto Color emoji\",\"Helvetica Neue\",Helvetica,\"PingFang SC\",\"Microsoft YaHei\",\"Source Han Sans SC\",\"Noto Sans CJK SC\",\"WenQuanYi Micro Hei\",sans-serif"},"b":{"val":false},"i":{"val":false},"strike":{"val":false},"spacing":{"val":0},"u":{"val":"STUnderline_none"},"author":"p.144115214930797109"},"mode":1},"propertyType":"RunProperty","builtinStyleName":""},{"operationType":"InsertText","param":{"text":"\r","range":{"gcpBegin":542,"len":0}},"builtinStyleName":""},{"operationType":"ModifyRunProp","param":{"range":{"gcpBegin":542,"len":1},"property":{"rFonts":{"ascii":"\"system-ui\",\"-apple-system\",\"BlinkMacSystemFont\",\"Segoe UI\",\"Roboto\",\"Helvetica Neue\",\"Helvetica\",\"sans-serif\",\"Apple Color Emoji\",\"Segoe UI Emoji\",\"Segoe UI Symbol\",\"Noto Color emoji\",\"Helvetica Neue\",Helvetica,\"PingFang SC\",\"Microsoft YaHei\",\"Source Han Sans SC\",\"Noto Sans CJK SC\",\"WenQuanYi Micro Hei\",sans-serif","hAnsi":"\"system-ui\",\"-apple-system\",\"BlinkMacSystemFont\",\"Segoe UI\",\"Roboto\",\"Helvetica Neue\",\"Helvetica\",\"sans-serif\",\"Apple Color Emoji\",\"Segoe UI Emoji\",\"Segoe UI Symbol\",\"Noto Color emoji\",\"Helvetica Neue\",Helvetica,\"PingFang SC\",\"Microsoft YaHei\",\"Source Han Sans SC\",\"Noto Sans CJK SC\",\"WenQuanYi Micro Hei\",sans-serif","eastAsia":"\"system-ui\",\"-apple-system\",\"BlinkMacSystemFont\",\"Segoe UI\",\"Roboto\",\"Helvetica Neue\",\"Helvetica\",\"sans-serif\",\"Apple Color Emoji\",\"Segoe UI Emoji\",\"Segoe UI Symbol\",\"Noto Color emoji\",\"Helvetica Neue\",Helvetica,\"PingFang SC\",\"Microsoft YaHei\",\"Source Han Sans SC\",\"Noto Sans CJK SC\",\"WenQuanYi Micro Hei\",sans-serif","cs":"\"system-ui\",\"-apple-system\",\"BlinkMacSystemFont\",\"Segoe UI\",\"Roboto\",\"Helvetica Neue\",\"Helvetica\",\"sans-serif\",\"Apple Color Emoji\",\"Segoe UI Emoji\",\"Segoe UI Symbol\",\"Noto Color emoji\",\"Helvetica Neue\",Helvetica,\"PingFang SC\",\"Microsoft YaHei\",\"Source Han Sans SC\",\"Noto Sans CJK SC\",\"WenQuanYi Micro Hei\",sans-serif"},"b":{"val":false},"i":{"val":false},"strike":{"val":false},"spacing":{"val":0},"u":{"val":"STUnderline_none"},"author":"p.144115214930797109","isPlaceholder":true},"mode":1},"propertyType":"RunProperty","builtinStyleName":""},{"operationType":"ModifyParagraphProp","param":{"range":{"gcpBegin":542,"len":1},"property":{"pBdr":{"top_i":true,"bottom_i":true},"snapToGrid":{"val":true},"spacing":{"line":240},"ind":{"left":0},"taskPr":{},"numPr":{}},"mode":1},"propertyType":"ParagraphProperty","builtinStyleName":""}],"subStory":[],"srcGlobalPadId":"w3_AdUArgafANUd3eBPCgITMCYAghtF3","copyStart":4908}" data-version="3.0.0" data-hash="2ee1fe3d1f64b9099946e93b8620b683" style="font-size: medium; white-space: normal;">
试题五(共15分)
阅读下列说明,回答问题1至问题3,将解答填入答题纸的对应栏内。
【说明】
某装备的组装过程需要经过多道程序,由于工作空间狭小,同时只能有一人在操作间工作,所以在每道工序之间需要先完成使用配件的出库后,操作人员携带配件到操作间进行安装工作,安装过程中需要扫描配件编码以自动记录该配件的安装情况。
假使存在三个事务用于处理某一类配件的某次安装实施,事务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,I, 22,3>表示事务T1将数据项I的数值从22修改为3。<Ti,D,V>表示将事务Ti回滚,数据项D的值回滚到V。<Ti, abort>表示事务Ti回滚结束。CRASH表示系统磁盘出错。请回答以下问题。

13、【问题1】(5分)
请用100字以内的文字简要说明数据库系统常见故障类型,并说明表5-1中的日志记录表明数据库出现哪种类型的故障。
参考答案:A
解析:
数据库故障类型包括:
(1)事务故障:有事务内部逻辑、运算溢出、并发事务发生死锁、违反了某些完整性限制等而导致事务终止。
(2)系统故障:指造成系统停止运转的任何事件(硬件错误、操作系统故障、 DBMS代码错误、系统断电),使得系统要重新启动。
(3)介质故障:数据库存储磁盘损坏而导致数据丢失。
(4)计算机病毒故障:由于计算机病毒导致数据被恶意修改或删除。
由于日志列表中CRASH表示系统磁盘出错,所以属于系统故障。
14、【问题2】(4分)
请给出系统恢复时需要重做(Redo)的事务列表和需要撤销(Undo)的事务列表。
参考答案:A
解析:
答:系统恢复后,各事务的处理情况如下:
(1)redo:T2;
(2)undo:T3
说明:根据题意,事务T1、T2、T3执行情况如下所示。检查点CHECKPOINT之前已经提交的T1不需要进行处理,故障前T2提交了,T3未提交。
15、【问题3】(6分)
根据题干中所描述的业务逻辑,请填写表5-1日志记录中的空白(a);请给出 Undo恢复的补偿日志记录,填写空白(b)和(c).
参考答案:A
解析:
a:14
b:<T3,I,8>
c:<T3,abort>
事务T1、T2、T3执行情况如下所示。
喵呜刷题:让学习像火箭一样快速,快来微信扫码,体验免费刷题服务,开启你的学习加速器!