当前位置:首页 → 计算机类 → 软件水平考试 → 中级数据库系统工程师->2010年上半年《数据库系统工程师》案例分析真题
推荐等级:
发布时间: 2021-12-17 09:45
扫码用手机做题
某航空售票系统负责所有本地起飞航班的机票销售,并设有多个机票销售网点。各售票网点使用相同的售票程序。假设售票程序中用到的伪指令如下表1-1所示:
假设某售票网点一次售出a张航班A 的机票,则售票程序的伪指令序列为:R(A, x);W(A,x-a)。根据上述业务及规则,完成下列问题:
【问题1】(5 分)
若两个售票网点同时销售航班A的机票,在数据库服务器端可能出现如下的调度:
A:R1(A, x),R2(A, x),W1(A, x–1),W2(A, x–2);
B:R1(A, x),R2(A, x),W2(A, x–2),W1(A, x–1);
C:R1(A, x),W1(A, x–1),R2(A, x),W2(A, x–2);
其中Ri(A, x),Wi(A, x)分别表示第i个销售网点的读写操作,其余类同。
假设当前航班 A 剩余 10 张机票,分析上述三个调度各自执行完后的剩余票数,并指出错误的调度及产生错误的原因。
【问题2】(6 分)
(1)判定事务并发执行正确性的准则是什么?如何保证并发事务正确地执行?
(2)引入相应的加解锁指令,重写售票程序的伪指令序列,以保证正确的并发调度。
【问题3】(4 分)
下面是用E-SQL实现的机票销售程序的一部分,请补全空缺处的代码。
EXEC SQL SET TRANSACTION ISOLATION LEVEL SERIALIZABLE
EXEC SQL SELECT balance INTO :x FROM tickets WHERE flight = ’A’ ;
printf("航班A 当前剩余机票数为:%d\n请输入购票数:", x );
scanf("%d", &a);
x = x – a ;
if (x<0)
EXEC SQL ROLLBACK WORK;
printf("票数不够,购票失败!");
else{
EXEC SQL UPDATE tickets SET (a) ;
if (SQLCA.sqlcode <> SUCCESS)
EXEC SQL ROLLBACK WORK;
else
(b) ;
}
本题解析:
【问题1】
调度A结果:8 调度B结果:9 调度C结果:7
调度A、B结果错误,因为破坏了事务的隔离性。一个事务的执行结果被另一个所
覆盖。
【问题2】
(l)判定事务并发执行正确性的准则是满足可串行化调度。要保证并发事务正确地
执行,采用两段锁协议(2PL)。
(2)重写后的售票程序伪指令序列:
Xlock(A);R(A,x);W(A,x-a);Unlock(A);
【问题3】
(a)balance=:x WHERE flight=’A’
(b)EXEC SQL COMMIT WORK
天津市某银行信息系统的数据库部分关系模式如下所示:
客户(客户号,姓名,性别,地址,邮编,电话)
账户(账户号,客户号,开户支行号,余额)
支行(支行号,支行名称,城市,资产总额)
交易(交易号,账户号,业务金额,交易日期)
其中,业务金额为正值表示客户向账户存款;为负值表示取款。
【问题1】
以下是创建账户关系的SQL语句,账户号唯一识别一个账户,客户号为客户关系的唯一标识,且不能为空。账户余额不能小于1.00元。请将空缺部分补充完整。
CREATE TABLE 账户(
账户号 CHAR(19) (a) ,
客户号 CHAR(10) (b) ,
开户支行号 CHAR(6) NOT NULL ,
余额 NUMBER(8,2) (c) );
【问题2】
(1)现银行决策者希望查看在天津市各支行开户且2009年9月使用了银行存取服务的所有客户的详细信息,请补充完整相应的查询语句。 (交易日期形式为’2000-01-01’)
SELECT DISTINCT 客户.*
FROM 客户, 账户, 支行, 交易
WHERE 客户.客户号 = 账户.客户号 AND
账户.开户支行号 = 支行.支行号 AND
(d) AND
交易.账户号 = 账户.账户号 AND
(e) ;
上述查询优化后的语句如下,请补充完整。
SELECT DISTINCT 客户.*
FROM 客户, 账户, (f) AS 新支行, (g) AS 新交易
WHERE 客户.客户号 = 账户.客户号 AND
账户.开户支行号 = 新支行.支行号 AND
新交易.账户号 = 账户.账户号
(2)假定一名客户可以申请多个账户,给出在该银行当前所有账户余额之和超过百万的客户信息并按客户号降序排列。
SELECT *
FROM 客户
WHERE (h)
(SELECT 客户号 FROM 账户 GROUP BY 客户号 (i) )
ORDER BY (j) ;
【问题3】
(1)为账户关系增加一个属性“账户标记” ,缺省值为0,取值类型为整数;并将当前账户关系中所有记录的“账户标记”属性值修改为0。请补充相关SQL语句。
ALTER TABLE 账户 (k) DEFAULT 0 ;
UPDATE 账户 (l) ;
(2)对于每笔金额超过10万元的交易,其对应账户标记属性值加1,给出触发器实现的方案。
CREATE TRIGGER 交易_触发器 (m) ON 交易
REFERENCING NEW ROW AS 新交易
FOR EACH ROW
WHEN (n)
BEGIN ATOMIC
UPDATE 账户 SET 账户标记 = 账户标记 + 1
WHERE (o) ;
COMMIT WORK ;
END ;
本题解析:
【问题1】
(a)PRIMARY KEY/NOT NULL UNIQUE/NOT NULL PRIMARY KEY
(b)NOT NULL REFERENCES客户(客户号)
(c)CHECK(余额>=1.00)
【问题2】
(1)
(d)支行.城市=’天津市’
(e)交易.交易日期LIKE ’2009-09-%’或等价表示
注:(d)(e)次序无关
(f) (SELECT* FROM支行WHERE城市=’天津市’)
(g)(SELECT * FROM交易WHERE交易日期LIKE ’2009-09%’)或等价表示
(2)
(h)客户号IN
(i) HAVING SUM(余额)> 1000000.00或等价表示
(J)客户号DESC
【问题3】
(1)
(k) ADD 账户标记 INT
(l) SET账户标记=0;
(2)
(m)AFTER INSERT
(n)新交易.业务金额> 100000.00或等价表示
(o)账户.账户号=新交易.账户号
某旅行社拟开发一套旅游管理系统,以便管理旅游相关的信息。
1.旅行社可发布旅游线路的信息,包含:线路的价格、天数、住宿情况,以及具体的行程安排等。不同的线路参观的景点及住宿情况不相同,如表1-1所示。
2.游客与旅行社沟通,选择适合自己的线路,并由旅行社为其生成订单,以记录游客联系人的姓名、身份证号、联系方式、人数、所选线路、导游安排和票务信息。旅行社为游客在行程中的每个城市安排一个负责导游,负责游客在该城市的具体旅行安排。同一城市的负责导游相同,不同城市的负责导游有可能不同。
3.旅行社的每位员工只属于一种固定的员工类别,系统可记录员工的多部手机号。旅行社按月统计导游每月的带团人数和游客投诉次数,以计算导游的当月月薪。
根据上述需求,初步设计了旅游信息数据库,其关系模式如图1-1所示。
关系模式中主要属性的含义及约束如表1-2所示。
【问题1】(3 分)
对关系“线路信息”,请回答以下问题:
(1)列举出所有不属于任何候选键的属性(非键属性)。
(2)关系“线路信息”是否为BCNF范式,用60字以内文字简要叙述理由。
【问题2】(7 分)
对关系“订单信息”,请回答以下问题:
(1)“订单信息”是否为2NF范式,用100字以内文字简要说明会产生什么问题。
(2)把“订单信息”分解为第三范式,分解后的关系名依次为:订单信息1,订单信息2,……
(3)列出分解后的各关系模式的主键。
【问题 3】(5 分)
对关系“员工信息” ,请回答以下问题:
(1)关系“员工信息”是不是第四范式,用100字以内文字叙述理由。
(2)若 “员工信息”不是第四范式,将其分解为第四范式,分解后的关系名依次为:员工信息1,员工信息2,……
本题解析:
【问题1】
(1)价格,天数
(2)“线路信息”关系模式可以达到BCNF范式。
因为非主属性价格、天数完全函数依赖于码且不传递依赖于码,且仅一个候选码,并为单属性。
或答:每个函数依赖的决定因素都包含码。
【问题2】
(1)“订单信息”关系不满足第二范式,即非主属性不完全依赖于码。
会造成插入异常、删除异常和修改复杂(或修改异常)。
(2)分解后的关系模式如下:
订单信息1(订单号,线路编号,联系人身份证号,出发时间,订单价格,人数)
订单信息2(联系人身份证号,联系人名称,联系方式)
订单信息3(订单号,负责导游工号,负责城市)
(3)分解后的主键如下:
订单信息1(订单号)
订单信息2(联系人身份证号)
订单信息3(订单号,负责导游工号)
【问题3】
(1)“员工信息”关系模式,不满足第四范式。
答出以下内容之一即可:
①该关系模式不满足第二范式。
②该关系模式存在非平凡的且非函数依赖的多值依赖。
③员工工号→姓名,年龄,员工类别,为部分决定。
④员工工号→手机号。
(2)分解后的关系模式如下:
员工信息1(员工工号,姓名,年龄,员工类别)
员工信息2(员工工号,手机号)
员工信息3(员工工号,计薪月,被投诉次数,带团人数,月薪)
某学校拟开发一套实验管理系统,对各课程的实验安排情况进行管理。
【需求分析】
一个实验室可进行多种类型不同的实验。由于实验室和实验员资源有限,需根据学生人数分批次安排实验室和实验员。一门课程可以为多个班级开设,每个班级每学期可以开设多门课程。一门课程的一种实验可以根据人数、实验室的可容纳人数和实验类型,分批次开设在多个实验室的不同时间段。一个实验室的一次实验可以分配多个实验员负责辅导实验,实验员给出学生的每次实验成绩。
(1)课程信息包括:课程编号、课程名称、实验学时、授课学期和开课的班级等信息;实验信息记录该课程的实验进度信息,包括:实验名、实验类型、学时、安排周次等信息,如表1-1所示。
(2)以课程为单位制定实验安排计划信息,包括:实验地点,实验时间、实验员等信息,实验计划如表1-2所示。
(3)由实验员给出每个学生每次实验的成绩,包括:实验名、学号、姓名、班级、实验成绩等信息,实验成绩如表1-3所示。
(4)学生的实验课程总成绩根据每次实验的成绩以及每次实验的难度来计算。
【概念模型设计】
根据需求阶段收集的信息,设计的实体联系图(不完整)如图1-1所示。
【逻辑结构设计】
根据概念模型设计阶段完成的实体联系图,得出如下关系模式(不完整):
课程(课程编号,课程名称,授课院系,实验学时)
班级(班级号,专业,所属系)
开课情况( (1) ,授课学期)
实验( (2) ,实验类型,难度,学时,安排周次)
实验计划( (3) ,实验时间,人数)
实验员( (4) ,级别)
实验室(实验室编号,地点,开放时间,可容纳人数,实验类型)
学生( (5) ,姓名,年龄,性别)
实验成绩( (6) ,实验成绩,评分实验员)
【问题1】(6 分)
补充图3-1中的联系和联系的类型。
【问题2】(6 分)
根据图3-1,将逻辑结构设计阶段生成的关系模式中的空(1)~(6)补充完整并用下划线指出这六个关系模式的主键。
【问题3】(3 分)
如果需要记录课程的授课教师,新增加“授课教师”实体。请对图3-1进行修改,画出修改后的实体间联系和联系的类型。
本题解析:
【问题1】
答案参见图3-1。
图3-1 实体联系图
【问题2】
(l)课程编号,班级号
(2)实验编号,课程编号,实验名
(3)实验编号,批次号,安排学期,实验室编号,实验员编号
(4)实验员编号,实验员姓名
(5)学号,班级号
(6)实验编号,学号
其他关系模式主键:
课程(课程号,课程名称,授课院系,实验学时)
班级(班级号,专业,所属系)
实验室(实验室编号,地点,开放时间,可容纳人数,实验课类型)
【问题3】
图3-2 修改后的实体联系图
试卷分类:高级信息系统项目管理师
练习次数:0次
试卷分类:高级系统架构设计师
练习次数:0次
试卷分类:中级系统集成项目管理工程师
练习次数:0次
试卷分类:中级信息系统监理师
练习次数:0次
试卷分类:中级软件设计师
练习次数:0次
试卷分类:高级网络规划设计师
练习次数:0次
试卷分类:高级网络规划设计师
练习次数:0次
试卷分类:高级网络规划设计师
练习次数:0次
试卷分类:中级网络工程师
练习次数:0次
试卷分类:中级网络工程师
练习次数:0次