2009 上半年数据库系统工程师考试真题及答案-下午卷
试题一
【说明】
假设某大型商业企业由商品配送中心和连锁超市组成,其中商品配送中心包括采购、财
务、配送等部门。为实现高效管理,设计了商品配送中心信息管理系统,其主要功能描述如
下:
1.系统接收由连锁超市提出的供货请求,并将其记录到供货请求记录文件。
2.在接到供货请求后,从商品库存记录文件中进行商品库存信息査询。如果库存满足供
货请求,则给配送处理发送配送通知;否则,向采购部门发出缺货通知。
3.配送处理接到配送通知后,查询供货请求记录文件,更新商品库存记录文件,并向配
送部门发送配送单,在配送货品的同时记录配送信息至商品配送记录文件。
4.采购部门接到缺货通知后,与供货商洽谈,进行商品采购处理,合格商品入库,并记
录采购清单至采购清单记录文件、向配送处理发出配送通知,同时通知财务部门给供货商支
付货款。
该系统采用结构化方法进行开发,得到待修改的数据流图(如图 1-1 所示)。
【问题 1】
使用【说明】中的词语,给出图 1-1 中外部实体 E1 至 E4 的名称和数据存储 D1 至 D4
的名称。
E1:财务部门
E3:连锁超市
E2:采购部门
E4:配送部门
D1:采购清单记录文件
D2:商品库存记录文件
D3:商品配送记录文件
D4:供货请求记录文件
解析:本题考查 DFD 的分析与设计,问题一主要考査 DFD 中的外部实体和数据存储,由于在
题干中已经提到“系统接收由连锁超市提出的供货请求,并将其记录到供货请求记录文件”,
因此可以明确出“连锁超市”外部实体和“供货请求记录文件”数据存储;对应到 DFD 图中
为 E3 和 D4。描述中的第二项提出“从商品库存记录文件中进行商品库存信息查询。如果库
存满足供货请求,则给配送处发送配送通知;否则,向采购部门发出缺货通知”,因为配送
通知需要发送到采购部门,因此采购部门将成为系统的外部实体;同时,商品库存记录文件
能够提供库存信息,所以 DFD 图中 E2 和 D2 分别为采购部门和商品配送记录文件丨第三项需
求“配送处理接到配送通知后,查询供货请求记录文件,更新商品库存记录文件,并向配送
部门发送配送单,在配送货品的同时记录配送信息至商品配送记录文件”,所以配送处理需
要查询供货请求记录文件,更新商品库存记录文件与商品配送记录文件,因此 D3 为商品配
送记录文件:采购处理需要记录采购清单同时通知财务部门,所以 E1 应该为财务部门,D1
为采购清单记录文件,剩下的 E4 则为配送部门。
DFD 中出现的错误数据流为:E1 到 E2, E1 与 E2 的数据流不属于系统的范围;D3 到 E4,多余
的数据流;D2 到采购处理,数据流方向错误;D4 到供货请求处理,数据流方向错误。需要
补充的数据流为:E2 到采购处理,因为 E2 是采购部门,采购部门需要给采购处提供入库商
品信息;采购处到 D2 需要一条数据流,因为采购处理需要更改库存信息;供货请求处理到
D4 需要一条数据流,因为供货请求处理需要记录供货请求信息。
【问题 2】
图 1-1 中存在四处错误数据流,请指出各自的起点和终点:若将上述四条错误数据流删
除,为保证数据流图的正确性,应补充三条数据流,请给出所补充数据流的起点和终点。(起
点和终点请采用数据流图 1-1 中的符号或名称)
解析:本题考查 DFD 的分析与设计,问题一主要考査 DFD 中的外部实体和数据存储,由于在
题干中已经提到“系统接收由连锁超市提出的供货请求,并将其记录到供货请求记录文件”,
因此可以明确出“连锁超市”外部实体和“供货请求记录文件”数据存储;对应到 DFD 图中
为 E3 和 D4。描述中的第二项提出“从商品库存记录文件中进行商品库存信息查询。如果库
存满足供货请求,则给配送处发送配送通知;否则,向采购部门发出缺货通知”,因为配送
通知需要发送到采购部门,因此采购部门将成为系统的外部实体;同时,商品库存记录文件
能够提供库存信息,所以 DFD 图中 E2 和 D2 分别为采购部门和商品配送记录文件丨第三项需
求“配送处理接到配送通知后,查询供货请求记录文件,更新商品库存记录文件,并向配送
部门发送配送单,在配送货品的同时记录配送信息至商品配送记录文件”,所以配送处理需
要查询供货请求记录文件,更新商品库存记录文件与商品配送记录文件,因此 D3 为商品配
送记录文件:采购处理需要记录采购清单同时通知财务部门,所以 E1 应该为财务部门,D1
为采购清单记录文件,剩下的 E4 则为配送部门。
DFD 中出现的错误数据流为:E1 到 E2, E1 与 E2 的数据流不属于系统的范围;D3 到 E4,多余
的数据流;D2 到采购处理,数据流方向错误;D4 到供货请求处理,数据流方向错误。需要
补充的数据流为:E2 到采购处理,因为 E2 是采购部门,采购部门需要给采购处提供入库商
品信息;采购处到 D2 需要一条数据流,因为采购处理需要更改库存信息;供货请求处理到
D4 需要一条数据流,因为供货请求处理需要记录供货请求信息。
试题二
【说明】
某网上书店后台数据库的部分关系模式如下:
会员(会员编号,用户名,密码,姓名,地址,邮编,电话,消费额,积分)
图书(图书编号,类型名称,图书名称,作者,出版社,出版日期,ISBN,价格)
订单(订单编号,用户名,销售额,订购日期,出货曰期)
订单明细(订单明细编号,订单编号,图书编号,数量)
【问题 1】
下面是创建订单关系的 SQL 语句,订单编号唯一识别一个订单,用户名为订购图书的会
员用户名,且不能为空。要求订购日期不能大于出货日期。请将空缺部分补充完整。
(a) PRIMARY KEY 或 NOT NULL UNIQUE 或 UNIQUE NOT NULL
(b) REFERENCES 会员(用户名)或 REFERENCES 会员
(c) CHECK (订购日期 <=出货日期或 CONSTRAINTchk_dateCHECK (订购日期<=出货日期)
(注:chk_date 可为其他名称)
解析:本题考查关系模型的完整性约束。完整性约束包括三类:实体完整性、参照完整性和
用户定义的完整性。实体完整性约束规定关系的主属性不能取空值,关系模型中以主码作为
唯一性标示。(a)考核的是实体完整性,订单编号是订单关系的主键,用 PRIMARY KEY 关键
字,也可用 NOT NULL UNIQUE 或 UNIQUE NOT NULL 来保证一个订单标号唯一识别一个订单;
参照完整性约束规定若属性(或属性组)A 是关系 R 上的主码,B 是关系 S 上的外码,A 与 B
相对应(来自相同的域),则 B 取值为空或者来自于 R 上的某个 A 的值。(b)考查参照完整性,
用户名属性对应于会员关系的用户名属性,定义语法为 REFERENCES 会员(用户名),由于两
个关系中的属性名一致,因此也可以用 REFERENCES 会员定义;用户定义的完整性约束是针
对具体的数据库应用而定义的,它反映该应用所涉及的数据必须满足用户定义的语义要求。
(c)考查用户定义的完整性 约束,要求出货日期必须大于等于订购日期,因此答案为 CHECK
(订购日期<=出货日期)或 CONSTRAINTchk_date CHECK(订购日期<=出货日期),此处,
chk_date 可以为其他的约束名。
【问题 2】
请完成下列查询的 SQL 语句。
(1)查询名称中包含“数据库”的图书的图书名称,作者,出版社和出版日期。
(2)查询提供销售(图书表中有)但没有销售过(没在订单明细表中出现)的图书名称
和出版社。
(4)为了统计会员的购买行为信息,实施有意义的客户关怀策略,査询会员的平均订购
间隔时间,考虑多次购买图书和一次购买图书的情况(其中,DATEDIFF 函数表示两个日期
之间的天数)。
(1) (d)图书名称,作者,出版社,出版日期
(e) LIKE%数据库%
(2)(f) *
(g)图书.图书编号=订单明细.图书编号
(3)(h) SUM(数量)
(i)订单.订单编号=订单明细.订单编号
(j)SUM(数量)>=ALL
(4)(k) COUNT(*) > 1
(l)(COUNT(*)-l)或 COUNT(*)也给分
(m)GROUP BY 用户名
解析:本题考查查询语句 SELECT 的语法,查询是 SQL 的重要内容。
(1)考查基本的 SQL 查询语法,SELECT 后是要查询的属性,查询条件是包含“数据库”的图
书,因此用 LIKE 关键字。
(2)考查 NOT EXISTS 语法,(f)处填*。该查询为相关查询,因此(g)处的条件为图书.图书
编号=订单明细.图书编号。
(3)考査较复杂的嵌套査询、分组查询和 ALL 关键字。子查询得到所有会员的订购数,题目
要求查询订购数最多的会员名和订购数,因此(j)的答案为 SUM(数量)>=ALL。
(4)考查分组查询、聚集函数和 CASE 语法。平均订购间隔时间对一次购买和多次购买的会员
有不同的计算方式,对一次购买的会员,平均订购时间为当前时间-订购时间;而对于多次
购买的会员,平均订购时间为(最晚的订购时间-最早的订购时间)/间隔数,间隔数为订购
数-1。
【问题 3】
会员订购图书后,将本次订购的销售额累加到该会员的消费额中,并按照本次订单的销
售额计算积分累加到该会员的积分中(每 20 元增加 1 个积分,不足 20 元不计入积分)。下
面用触发器实现该需求,请填充空缺部分。
(n) INSERT ON 订单
(o)积分=积分+ INT( NROW.销售额/20)
解析:本题考查 SQL 的触发器机制。触发器是通过事件触发而执行的,事件指的是对某个关
系的插入、删除或更新。当触发器被事件激活时,并不是立即执行,而是检测触发器的条件,
若条件满足则执行触发器定义的动作。因此,创建一个触发器时,必须指定:触发器名称、
在其上定义触发器的关系(表)、触发器将何时激发、触发器执行时应作的动作。本题中触
发器定义的事件为会员订购图书,即插入一个订单记录,因此(n)的答案为 INSERT ON 订单。
执行的动作是累加会员的消费额,并按照规则把本次订单的销售额计算为积分,更新会员的
积分,因此(o)的答案为积分=积分+INT(NROW.销售额/20)。