问答题 (一共5题,共5分)

1.

某服装销售公司拟开发一套服装采购管理系统,以方便对服装采购和库存进行管理。

【需求分析】

(1)采购系统需要维护服装信息及服装在仓库中的存放情况。系统按服装的销售种类记录服装信息。服装信息主要包括:服装编码、服装描述、服装类型、销售价格、尺码和面料,其中,服装类型为销售分类,服装按销售分类编码。仓库信息主要包括:仓库编码、仓库位置、仓库容量和库管员。系统记录库管员的库管员编码、姓名和级别。一个库管员可以管理多个仓库,每个仓库有一名库管员。一个仓库中可以存放多类服装,一类服装可能存放在多个仓库中。

(2)当库管员发现有一类或者多类服装缺货时,需要生成采购订单。一个采购订单可以包含多类服装。每类服装可由多个不同的供应商供应,但具有相同的服装编码。采购订单主要记录订单编码、订货日期和应到货日期,并需详细记录所采购的每类服装的数量、采购价格和对应的多个供应商。

(3)系统需记录每类服装的各个供应商信息和供应情况。供应商信息包括:供应商编码、供应商名称、地址、企业法人和联系电话。供应情况记录供应商所供应服装的服装类型和服装质量等级。一个供应商可以供应多类服装,一类服装可由多个供应商供应。库管员根据入库时的服装质量情况,设定或修改每个供应商所供应的每类服装的服装质量等级,用以作为后续采购服装时,选择供应商的参考标准。

【概念模型设计】

根据需求阶段收集的信息,设计的实体联系图(不完整)如图1-1所示。

中级数据库系统工程师,历年真题,2011年上半年《数据库系统工程师》案例分析真题

【逻辑结构设计】

根据概念模型设计阶段完成的实体联系图,得出如下关系模式(不完整):

库管员( (1) ,姓名,级别)

仓库信息( (2) ,仓库位置,仓库容量)

服装(服装编码,服装描述,服装类型,尺码,面料,销售价格)

供应商( (3) ,供应商名称,地址,联系电话,企业法人)

供应情况( (4) ,服装质量等级)

采购订单( (5) )

采购订单明细( (6) )

【问题1】(6分)

补充图1-1中的联系和联系的类型。

【问题2】(6分)

根据图1-1,将逻辑结构设计阶段生成的关系模式中的空(1)~(6)补充完整。对所有关系模式,用下划线指出各关系模式的主键。

【问题3】(3分)

如果库管员定期需要轮流对所有仓库中的服装质量进行抽查,对每个仓库中的每一类被抽查服装需要记录一条抽查结果,并且需要记录抽查的时间和负责抽查的库管员。请根据该要求,对图1-1进行修改,画出修改后的实体间联系和联系的类型

2.

某学校拟开发一套校友捐赠管理系统,以便对校友的捐赠资金进行管理。

【需求分析】

校友可以向学校提出捐赠申请,说明捐赠的金额、捐赠类型和使用方式。捐赠类型包括一次性捐赠和周期性捐赠。捐赠的使用方式分为两种:一种用于资助个人,即受益人为多名学生或老师,主要用于奖学金、奖教金和助学金等;另一种用于资助捐赠项目,即资助已有的捐赠项目和设立新的捐赠项目,主要用于改善教学设施、实验室建设和设备购买等。一个捐赠项目可以涉及校内的多个受益单位,每个单位在该项目中有确定的受益比例。每个单位的受益比例是指在一个捐赠项目中的每个单位所应得的金额占该捐赠项目总受益金额的比例。一个捐赠项目可以由多个捐赠来资助,一个捐赠也可以资助多个捐赠项目。系统需记录一个捐赠给所资助的每个捐赠项目的具体的捐赠金额,即每个捐赠项目能从一个捐赠中受益的金额。

初步设计了校友捐赠信息数据库,其关系模式如图1-1所示。

中级数据库系统工程师,历年真题,2011年上半年《数据库系统工程师》案例分析真题

关系模式的主要属性、含义及约束如表1-1所示。

中级数据库系统工程师,历年真题,2011年上半年《数据库系统工程师》案例分析真题

【问题1】(5分)

对关系“校友信息”,请回答以下问题:

(1)列举出所有候选键的属性。

(2)它可达到第几范式,用60字以内文字简要叙述理由。

【问题2】(6分)

对关系“捐赠信息”,请回答以下问题:

(1)用100字以内文字简要说明它会产生什么问题。

(2)将其分解为第三范式,分解后的关系名依次为:捐赠信息1,捐赠信息2,……

(3)列出其被修正后的各关系模式的主键。

【问题3】(4分)

对关系“项目受益情况”,请回答以下问题:

(1)它是否是第四范式,用100字以内文字叙述理由。

(2)将其分解为第四范式,分解后的关系名依次为:项目受益情况l,项目受益情2,……

3.

某医院欲开发病人监控系统。该系统通过各种设备监控病人的生命体征,并在生命体征异常时向医生和护理人员报警。该系统的主要功能如下:

(1)本地监控:定期获取病人的生命体征,如体温、血压、心率等数据。

(2)格式化生命体征:对病人的各项重要生命体征数据进行格式化,然后存入日志文件并检查生命体征。

(3)检查生命体征:将格式化后的生命体征与生命体征范围文件中预设的正常范围进行比较。如果超出了预设范围,系统就发送一条警告信息给医生和护理人员。

(4)维护生命体征范围:医生在必要时(如,新的研究结果出现时)添加或更新生命体征值的正常范围。

(5)提取报告:在医生或护理人员请求病人生命体征报告时,从日志文件中获取病人生命体征生成体征报告,并返回给请求者。

(6)生成病历:根据日志文件中的生命体征,医生对病人的病情进行描述,形成病历存入病历文件。

(7)查询病历:根据医生的病历查询请求,查询病历文件,给医生返回病历报告。

(8)生成治疗意见:根据日志文件中的生命体征和病历,医生给出治疗意见,如处方等,并存入治疗意见文件。

(9)查询治疗意见:医生和护理人员查询治疗意见,据此对病人进行治疗。

现采用结构化方法对病人监控系统进行分析与设计,获得如图1-1所示的顶层数据流图和图1-2所示的0层数据流图。

中级数据库系统工程师,历年真题,2011年上半年《数据库系统工程师》案例分析真题

中级数据库系统工程师,历年真题,2011年上半年《数据库系统工程师》案例分析真题

【问题1】(3分)

使用说明中的词语,给出图1-1中的实体E1~E3的名称。

【问题2】(4分)

使用说明中的词语,给出图1-2中的数据存储D1~D4的名称。

【问题3】 (6分)

图1-2中缺失了4条数据流,使用说明、图1-1和图1-2中的术语,给出数据流的名称及其起点和终点。

【问题4】(2分)

说明实体E1和E3之间可否有数据流,并解释其原因。

4.

某网上商品销售系统的业务流程如下:

(1)将客户的订单记录(订单号,客户ID,商品ID,购买数量)写入订单表;

(2)将库存表(商品ID,库存量)中订购商品的库存量减去该商品的购买数量。

针对上述业务流程,完成下列问题:

【问题1】(3分)

假设库存量有大于等于0的约束,可能出现如下情况:当订单记录写入订单表后,修改库存表时因违法约束而无法执行,应如何处理?(100字以内)

【问题2】(6分)

引入如下伪指令:将商品A的订单记录插入订单表记为I(A);读取商品A的库存量到变量x,记为x=R(A);变量x值写入商品A中的库存量,记为W(A,x)。则客户i的销售业务伪指令序列为:Ii(A),xi=Ri (A),xi=xi-ai,Wi (A,Xi)。其中ai为商品的购买数量。

假设当前库存量足够,不考虑发生修改后库存量小于0的情况。若客户1、客户2同时购买同一种商品时,可能出现的执行序列为:I1(A),I2 (A),X1=R1 (A),X2= R2 (A),x1= x1-a1 , W1 (A, xi), X2 =X2- a2, W2(A,X2)。

(1)此时会出现什么问题(100字以内)

(2)为了解决上述问题,引入共享锁指令SLock(A)和独占锁指令XLock(A)对数据A进行加锁,解锁指令Unlock(A)对数据A进行解锁,客户i的加锁指令用SLocki(A)表示,其他类同。插入订单表的操作不需要引入锁指令。请补充上述执行序列,使其满足2PL协议,并使持有锁的时间最短。

【问题3】(6分)

下面是用E-SQL实现的销售业务程序的一部分,请补全空缺处的代码。

SET TRANSACTION ISOLATION LEVEL REPEATABLE READ;

INSERT INTO 订单表VALUES(:OID,:CID,:MID,:qty);

If error then {ROLLBACK; (a) ;}

UPDATE库存表

SET库存量=库存量-:qty

WHERE (b) ;

If error then {ROLLBACK; return;}

(c)

5.

某法院要开发一个诉讼案件信息处理系统,该信息系统的部分关系模式如下:

职工(职工编号,姓名,岗位)

律师(律师编号,姓名)

被告(被告编号,姓名,地址)

案件(案件编号,案件类型,案件描述,被告,律师,主审法官,立案日期,状态,

结案日期,结案摘要)

审理(审理编号,案件编号,审理日期,摘要)

有关关系模式的属性及相关说明如下:

(1)职工关系模式的岗位有“法官”、“书记员”和“其他”。

(2)诉讼立案后,即在案件关系中插入一条相应记录。案件关系模式的状态有“待处理”、“审理中”、“结案”和“撤销”,一个案件开始立案时其案件状态为“待处理”。

(3)案件关系模式的案件类型有“偷窃”、“纵火”等。

(4) 一个案件自立案到结案的整个过程由一位法官和一位律师负责,一个案件通常经过一次到多次审理。

【问题1】

假设案件编号唯一标识一个案件,且立案日期小于等于结案日期。请将如下创建案件关系的SQL语句的空缺部分补充完整。

CREATE TABLE案件(

案件编号CHAR(6) (a) ,

案件类型VARCHAR(10),

案件描述VARCHAR (200),

立案日期DATE

被告VARCHAR (6) REFERENCES被告(被告编号),

律师VARCHAR (6) REFERENCES律师(律师编号),

主审法官VARCHAR (6) (b) ,

状态VARCHAR (6) (c) DEFAULT‘待处理’,

结案日期DATE,

结案摘要VARCHAR (200),

(d) );

【问题2】

请完成下列查询的SQL语句。

(1)查询当前待处理的诉讼案件,显示案件的案件编号、立案日期、被告姓名、被告地址、案件描述、律师姓名和主审法官姓名。

SELECT案件编号,立案日期,被告.姓名AS被告姓名,地址AS被告地址,案件描述,律师.姓名AS律师姓名, (e)

FROM (f)

WHERE案件.被告=被告.被告编号AND案件.律师=律师.律师编号AND

(g) ;

(2)查询2009年立案的各类案件数,并按案件数降序排序。(日期格式举例:2009年1月1日表示为01-JAN-2009,2009年12月31日表示为31-DEC-2009)

SELECT类型,count(*) AS案件数

FROM案件

WHERE (h)

GROUP BY案件类型

(i) ;

(3)查询立案次数超过5次的被告姓名和地址。

SELECT姓名,地址,count(*)

FROM案件,被告

WHERE (j)

GROUP BY (k)

(l) ;

【问题3】

当插入一个审理记录时,检查案件的状态,若状态为“未处理”,则将其修改为“审理中”。下面是用触发器实现该需求的SQL语句,请将空缺部分补充完整。

CREATE TRIGGER 审理TRIGGER AFTER (m) ON审理

REFERENCING new row AS nrow

FOR EACH row

WHEN‘未处理’=(SELECT状态

FROM案件

WHERE案件编号- nrow.案件编号)

BEGIN

UPDATE案件 (n)

WHERE (o) ;

END