2010 上半年数据库系统工程师考试真题及答案-下午卷
试题一
阅读下列说明和图,回答问题 1 至问题 4,将解答填入答题纸的对应栏内。
[说明]
某大型企业的数据中心为了集中管理、控制用户对数据的访问并支持大量的连接需
求,欲构建数据管理中问件,其主要功能如下:
(1)数据管理员可通过中间件进行用户管理、操作管理和权限管理。用户管理维护用户
信息,用户信息(用户名、密码)存储在用户表中;操作管理维护数据实体的标准操作及其
所属的后端数据库信息,标准操作和后端数据库信息存放在操作表中;权限管理维护权限
表,该表存储用户可执行的操作信息。
(2)中间件验证前端应用提供的用户信息。若验证不通过,返回非法用户信息;若验证
通过,中间件将等待前端应用提交操作请求。
(3)前端应用提交操作请求后,中间件先对请求进行格式检查。如果格式不正确,返回
格式错误信息;如果格式正确,则进行权限验证(验证用户是否有权执行请求的操作),若
用户无权执行该操作,则返回权限不足信息,否则进行连接管理。
(4)连接管理连接相应的后台数据库并提交操作。连接管理先检查是否存在空闲的数据
库连接,如果不存在,新建连接;如果存在,则重用连接。
(5)后端数据库执行操作并将结果传给中间件,中间件对收到的操作结果进行处理后,
将其返回给前端应用。
现采用结构化方法对系统进行分析与设计,获得如图 1-1 所示的顶层数据流图和图 1-
2 所示的 0 层数据流图。
[问题 1]
使用说明中的词语,给出图 1-1 中的实体 E1~E3 的名称。
[问题 2]
使用说明中的词语,给出图 1-2 中的数据存储 D1~D3 的名称。
[问题 3]
给出图 1-2 中加工 P 的名称及其输入、输出流。
输入流
输出流
名称
起点
P
终点
P
除加工 P 的输入与输出流外,图 1-2 还缺失了两条数据流,请给出这两条数据流的起
点和终点。
起点
终点
注:名称使用说明中的词汇,起点和终点均使用图 1-2 中的符号或词汇。
[问题 4]
在绘制数据流图时,需要注意加工的绘制。请给出三种在绘制加工的输入、输出时可
能出现的错误。
试题一分析
本题考查数据流图(DFD)的应用,是比较传统的题目,要求考生细心分析题目中所描述
的内容。
DFD 是一种便于用户理解、分析系统数据流程的图形工具,是系统逻辑模型的重要组
成部分。
[问题 1]
本问题考查顶层 DFD。项层 DFD 一股用来确定系统边界,将待开发系统看作是一个加
工,因此图中只有唯一的一个加工和一些外部实体,以及这两者之问的输入输出数据流。
题目要求根据描述确定图中的外部实体。分析题目中的描述,并结合已经在顶层数据流图
中给出的数据流进行分析。题目中有信息描述:数据管理员可通过中间件进行用户管理、
操作管理和权限管理;前端应用提交操作请求;连接管理连接相应的后台数据库并提交操
作。由此可知该中间件系统有数据管理员、前端应用和后端数据库三个外部实体。对应图
1-1 中数据流和实体的对应关系,可知 E1 为前端应用,E2 为数据管理员,E3 为后端数据
库。
[问题 2]
本问题考查 0 层 DFD 中数据存储的确定。说明中描述:用户信息(用户名、密码)存储
在用户表中;标准操作和后端数据库信息存放在操作表中;权限管理维护信息存放在权限
表中。因此数据存储为用户表、操作表以及权限表。再根据图 1-2 中 D1 的输入数据流从用
户管理来,D2 的输入数据流从操作管理来,D3 的输入数据流从权限管理来,所以 D1 为用
户表,D2 为操作表,D3 为权限表。
[问题 3]
本问题考查 0 层 DFD 中缺失的加工和数据流。比较图 1-1 和图 1-2,可知顶层 DFD 中
的操作结果和处理后的操作结果没有在 0 层 DFD 中体现。再根据描述:后端数据库执行操
作并将结果传给中间件,中间件对收到的操作结果进行处理后,将其返回给前端应用。可
知,需要有操作结果处理,因此 P 为操作结果处理,其输入流从后端数据库 E3 来的操作结
果,输出结果为处理后的操作结果,并返回给前端应用 E1。
考查完 P 及其输入输出流之后,对图 1-2 的内部数据流进行考查,以找出缺失的另外
2 条数据流。从图中可以看出 D2 和 D3 只有输入流没有输出流,这是常见 DFD 设计时的错
误,所以首先考查 D2 和 D3 的输出流。描述中:权限验证是验证用户是否有权执行请求的
操作,若用户有权执行该操作,进行连接管理;连接管理连接相应的后台数据库并提交操
作;权限表存储用户可执行的操作信息。因此,权限验证有从权限表 D3 来的输入数据流。
而要连接后端数据库,需要数据库信息,从权限验证的输出流中包含有数据库信息可知,
权限验证需要获取到数据库信息,所以还需从操作表 D2 来的输入流。
[问题 4]
本问题考查在绘制数据流图中加工绘制时的注意事项。绘制加工时可能出现的错误
有:加工的输入、输出时可能出现只有输入而无输出、只有输出而无输入、输入的数据流
无法通过加工产生输出流以及输入的数据流与输出的数据流名称相同等错误。
参考答案
[问题 1]
E1:前端应用 E2:数据管理员 E3:后端数据库
[问题 2]
D1:用户表 D2:操作表 D3:权限表
[问题 3]
P 的名称:操作结果处理
输入流
输出流
缺少的数据流:
名称
操作结果
处理后的操作结果
起点
D2
D3
终点
P
E1
起点
E3
P
终点
权限验证
权限验证
[问题 4]
在绘制数据流图的加工时,可能出现的输入、输出错误:
只有输入而无输出或者黑洞
只有输出而无输入或者奇迹
输入的数据流无法通过加工产生输出流或者灰洞
输入的数据流与输出的数据流名称相同
试题二
阅读下列说明,回答问题 1 至问题 3,将解答填入答题纸的对应栏内。
[说明]
天津市某银行信息系统的数据库部分关系模式如下所示:
客户 (客户号,姓名,性别,地址,邮编,电话)
账户 (账户号,客户号,开户支行号,余额)
支行(支行号,支行名称,城市,资产总额)
交易 (交易号,账户号,业务金额,交易日期)
其中,业务金额为正值表示客户向账户存款;为负值表示取款。
[问题 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
试题二分析
本题考查 SQL 语句的基本语法与结构知识。
此类题目要求考生掌握 SQL 语句的基本语法和结构,认真阅读题目给出的关系模式,
针对题目的要求具体分析并解答。本试题已经给出了 4 个关系模式,需要分析每个实体的
属性特征及实体之间的联系,补充完整 SQL 语句。
[问题 1]
由于问题 1 中“账户号唯一识别一个账户”可知账户号为账户关系的主键,即不能为
空且唯一标识一条账户信息,因此需要用 PRIMARY KEY 对该属性进行主键约束;又由于
“客户号为客户关系的唯一标识,且不能为空”可知客户号为客户关系的主键,在账户关
系中应作外键,用 FOREIGN KEY 对该属性进行外键约束;由“账户余额不能小于 1.00 元”
可知需要限制账户余额属性值的范围,通过 CHECK 约束来实现。从上分析可见,完整的
SQL 语句如下:
CREATE TABLE 账户(
账户号 CHAR(19) PRIMARY KEY,
客户号 CHAR(10) FOREIGN KEY(客户号)REFERENcEs 客户(客户号),
开户支行号 CHAR(6) NOT NULL,
余额 NUMBER(8,2) CHECK(余额>1.00));
注:PRIMARY KEY 可替换为 NOT NULL UNIQUE 或 NOT NULL PRIMARY KEY。
[问题 2]
SQL 查询通过 SELECT 语句实现。
(1)根据问题 2 要求应在表连接条件的基础上,需要添加两个条件:①支行关系的城市
属性值为“天津市”,即支行城市='天津市';②在 2009 年 9 月存在交易记录,由于交易
日期形式为'2000-01-01',所以需要通过模糊匹配来实现,用 LIKE 关键词和通配符表示,
即交易.交易日期 LIKE'2009-09-%'。
WHERE 子句中条件的先后顺序会对执行效率产生影响。假如解析器是按照先后顺序依
次解析并列条件,优化的原则是:表之间的连接必须出现在其他 WHERE 条件之后,那些可
以过滤掉最多条记录的条件尽可能出现在 WHERE 子句中其他条件的前面。要实现上述优化
过程,可以重新组织 WHERE 条件的顺序或者通过嵌套查询以缩小连接记录数目的规模来实
现。
根据问题 2 要求,考生需要添加两个子查询以缩小参与连接的记录的数目,即筛选出
天津市的所有支行(SELECT+FROM 支行 WHERE 城市='天津市'),而且找到 2009 年 9 月发生
的交易记录(SELECT+FROM 交易 WHERE 交易日期 LIKE'2009-09-%'),然后再做连接查询。
(2)根据问题 2 要求,可通过予查询实现“所有账户余额之和超过百万的客户信息”的
查询;对 SUM 函数计算的结果应通过 HAVING 条件语句进行约束;降序通过 DESC 关键字来
实现。
SELECT *
FROM 客户
WHERE 客户号 IN
(SELECT 客户号 FROM 账户 GROUP BY 客户号 HAVING SUM(余额)>1000000.00)
ORDER BY 客户号 DESC;
[问题 3]
(1)关系模式的修改通过 ALTER 语句来实现,使用 ADD 添加属性;使用 SET 修改属性
值。
ALTER TABLE 账户 ADD 账户标记 INT DEFAULT 0;
UPDATE 账户 SET 账户标记 =0;
(2)创建触发器可通过 CREATE TRIGGER 语句实现,问题 3 要求考生掌握该语句的基本
语法结构。按照问题 3 要求,在交易关系中插入一条记录时触发器应自动执行,故需要创
建基于 INSERT 类型的触发器,其触发条件是新插入交易记录的金额属性值>100000.00;
最后添加表连接条件。完整的触发器实现方案如下:
CREATE TRIGGER 交易触发器 AFTER INSERT ON 交易
REFERENCING NEW ROW AS 新交易
FOR EACH ROW
WHEN 新交易.金额>100000.00
BEGIN ATOMIC
UPDATE 账户 SET 账户标记=账户标记+1
WHERE 账户.账户号=新交易.账户号;
COMMIT WORK;
END
参考答案
[问题 1]
(a)PRIMARY KEY/NOT NULL UNIQUE/NOT NULL PRIMARY KEY
(b)FOREIGN KEY(客户号)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 或等价表示
(i)客户号 DESC
[问题 3]
(1)
(k)ADD 账户标记 INT
(1)SET 账户标记=0;
(2)
(m)AFTER INSERT
(n)新交易.金额>100000.00 或等价表示
(o)账户.账户号=新交易.账户号
试题三
阅读下列说明,回答问题 1 至问题 3,将解答填入答题纸的对应栏内。
[说明]
某学校拟开发一套实验管理系统,对各课程的实验安排进行管理。
[需求分析]
每个实验室可进行的实验类型不同。由于实验室和实验员资源有限,需根据学生人数
分批次安排实验室和实验员。一门含实验的课程可以开设给多个班级,每个班级每学期可
以开设多门含实验的课程。每个实验室都有其可开设的实验类型。一门课程的一种实验可
以根据人数、实验室的可容纳人数和实验室类型,分批次开设在多个实验室的不同时间
段。一个实验室的一次实验可以分配多个实验员负责辅导实验,实验员给出学生的每次实
验成绩。
1.课程信息包括:课程编号、课程名称、实验学时、授课学期和开课的班级等信息;
实验信息记录该课程的实验进度信息,包括:实验名、实验类型、学时、安排周次等信
息,如表 3-1 所示。
课程编号
15054037
课程
数字电视原理
实验
12
表 3-1
课程及实验信息
班级
序号
电 0501,信
0501,计 0501
实验名
名称
学时
授课
机械与电气工
授课
院系
程
实验
学期
难
学时
1505403701
音视频 AD-DA 实验
1505403702
音频编码实验
类型
度
验证
性
验证
性
1
2
1505403703
视频编码实验
演示
0.5
性
2
2
1
第三学
期
安排周
次
3
5
9
2.以课程为单位制定实验安排计划信息,包括:实验地点,实验时间、实验员等信
息。实验计划如表 3-2 所示。
课程编号
15054037
表 3-2
课
程名称
实验编号
实验名
实验安排计划
数字
电视原理
实验
员
安排学
期
实验时
间
第 3 周
1505403701
音视频 AD-DA 实验
盛
×,陈×
周四晚上
1505403701
音视频 AD-DA 实验
盛
第 3 周
×,陈×
周四晚上
1505403701
音视频 AD-DA 实验
吴
第 3 周
1505403701
音视频 AD-DA 实验
×,刘×
吴×
周五晚上
第 3 周
周五晚上
1505403702
音频编码实验
盛
第 5 周
×,刘×
周一下午
2009
总
220
年秋
人数
地点
批
次号
1
数
2
3
4
1
实验
三楼 310
实验
三楼 310
实验
三楼 311
实验
三楼 311
实验
四楼 410
人
60
60
60
40
70
3.由实验员给出每个学生每次实验的成绩,包括:实验名,学号,姓名,班级,实验
成绩等信息。实验成绩如表 3-3 所示。
表 3-3 实验成绩
音视频 AD-DA 实验
实验名
学号
实验员: 盛×
课程名
班级
数字电视原理
实验成绩
姓名
陈民
刘志
张勤
87
030501001
78
030501002
040501001
86
4.学生的实验课程总成绩根据每次实验的成绩以及每次实验的难度来计算。
[概念模型设计]
根据需求阶段收集的信息,设计的实体联系图(不完整)如图 3-1 所示。
信 0501
信 0501
计 0501
[逻辑结构设计]
根据概念模型设计阶段完成的实体联系图,得出如下关系模式(不完整):
课程(课程编号,课程名称,授课院系,实验学时)
班级(班级号,专业,所属系)
开课情况( (1) ,授课学期)
实验( (2) ,实验类型,难度,学时,安排周次)
实验计划( (3) ,实验时间,人数)
实验员( (4) ,级别)
实验室(实验室编号,地点,开放时间,可容纳人数,实验类型)
学生( (5) ,姓名,年龄,性别)
实验成绩( (6) ,实验成绩,评分实验员)
[问题 1]
补充图 3-1 中的联系和联系的类型。
[问题 2]
根据图 3-1,将逻辑结构设计阶段生成的关系模式中的空(1)~(6)补充完整。对所有
关系模式,用下划线标出各关系模式的主键。
[问题 3]
如果需要记录课程的授课教师,新增加“授课教师”实体。请对图 3-1 进行修改,画
出修改后的实体问联系和联系的类型。
试题三分析
本题考查数据库概念结构设计及向逻辑结构转换的掌握。
此类题目要求考生认真阅读题目,根据题目的需求描述,给出实体问的联系。
[问题 1]
根据题意由“一门含实验的课程可以开设给多个班级,每个班级每学期可以开设多门
含实验的课程”可知课程和班级之间的开设关系为 m:n 联系。由“一个实验室的一次实验
可以分配多个实验员负责辅导实验”可知实验、实验室与实验员之间的安排关系为 k:n:m
联系。由“实验员给出学生的每次实验成绩”可知实验、学生与实验员之间的成绩关系为
k:n:m 联系。班级和学生之间的包含关系为 1:n 联系。
[问题 2]
根据题意,可知课程编号是课程的主键,班级号是班级的主键。从表 3-1 可见,开课
情况是体现课程与班级间的 m:n 联系,因此开课情况关系模式应该包含课程编号和班级
号,并共同作为主键。一门课程包含多次实验,实验与课程之间是 m:1 关系,因此,由表
3-1 可知,实验关系模式应包含实验编号和课程编号,并且以实验编号为主键,以课程编
号为外键。在制定试验计划时,每个班的每次实验可能按实验室被分成多个批次,每个批
次的实验会有若干名实验员来辅导学生实验并打分。实验员关系模式应该记录实验员编号
和实验员姓名,并以实验员编号为主键。实验室编号是实验室的主键。从表 3-2 可知,实