image

编辑人: 青衫烟雨

calendar2025-07-28

message8

visits437

2013年5月数据库系统工程师下午题答案及解析

一、问答题

1、阅读下列说明和图,回答问题1 至问题3 ,将解答填入答题纸的对应栏内。

【说明】

某慈善机构欲开发一个募捐系统,以跟踪记录为事业或项目向目标群体进行募捐而组织的集体性活动。该系统的主要功能如下所述。

(1)管理志愿者。根据募捐任务给志愿者发送加入邀请、、邀请跟进、工作任务:管理志愿者提供的邀请响应、志愿者信息、工作时长、工作结果等。

(2)确定募捐需求和收集所募捐赠(资金及物品)。根据需求提出募捐任务、活动请求和捐赠请求,获取所募集的资金和物品。

(3)组织募捐活动。根据活动请求,确定活动时间范围。根据活动时间,搜索场馆,即:向场馆发送场馆可用性请求,获得场馆可用性。然后根据活动时间和地点推广募捐活动,根据相应的活动信息举办活动,从募款机构获取资金并向其发放赠品。获取和处理捐赠,根据捐赠请求,提供所募集的捐赠:处理与捐赠人之间的交互,即:

录入捐赠人信息,处理后存入捐赠人信息表:从捐赠人信息表中查询捐赠人信息,向捐赠人发送募捐请求,并将己联系的捐赠人存入己联系的捐赠人表。根据捐赠请求进行募集,募得捐赠后,将捐赠记录存入捐赠表:对捐赠记录进行处理后,存入己处理捐赠表,向捐赠人发送致谢函。根据已联系的捐赠人和捐赠记录进行跟进,将捐赠跟进情况发送给捐赠人。

现采用结构化方法对募捐系统进行分析与设计,获得如图1-1 、1-2 和1-3 所示分层数据流图。




【问题1】

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

【问题2】

在建模DFD时,需要对有些复杂加工(处理)进行进一步精化,图2为图1中处理3的进一步细化的1层数据流图,图3为图2中3.1进一步细化的2层数据流图。补全图2中加工P1、P2和P3的名称和图2与图3中缺少的数据流。

【问题3】

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

参考答案:

1、E1:志愿者    E2:捐赠人    E3:募捐机构    E4:场馆

由题干中的关键信息"根据募捐任务给志愿者发送加入邀请、邀请跟进、工作任务;管理志愿者提供的邀请响应、志愿者信息、工作时长、工作结果等",结合如图1所示的0层数据流图中与实体E1相关的"加入邀请/邀请跟进/工作任务"这一条输入数据流,以及"志愿者信息/工作时长/邀请响应/工作结果"这一条输出数据流可知,实体E1的名称是"志愿者"。

根据题干中给出的"根据活动时间,搜索场馆,即:向场馆发送场馆可用性请求,获得场馆可用性"等关键信息,结合图1中输入至实体E4的数据流"场馆可用性请求",以及输出数据流"场馆可用性"等可知,实体E4的名称是"场馆"。

基于题干中给出的"根据相应的活动信息举办活动,从募捐机构获取资金并向其发放赠品"等关键信息,结合图1中输入至实体E3的数据流"赠品",以及输出数据流"资金"等可知,实体E3的名称是"募捐机构"。

依据题干中给出的"从捐赠人信息表中查询捐赠人信息,向捐赠人发送募捐请求"等关键信息,结合图1中输入至实体E2的数据流"募捐请求",以及输出数据流"捐赠人信息"等可知,实体E2的名称是"捐赠人"。

2、P1:确定活动时间范围   P2:搜索场馆    P3:推广募捐活动

注:数据流没有次序要求;其中"2"处可以为"确定募捐需求收集所募捐赠"

基于问题1的解析结果,结合如图2所示的1层数据流图中与加工P1相关的"活动时间"这一条输出数据流,查找到题干中与之相关的关键信息"(3)组织募捐活动。根据活动请求,确定活动时间范围。根据活动时间……"可知,P1的名称是"确定活动时间范围"。

根据题干中给出的"根据活动时间,搜索场馆,即:向场馆发送场馆可用性请求,获得场馆可用性"等关键信息,结合图2中加工P2的输入数据流"活动时间"和"场馆可用性",以及输出数据流"场馆可用性请求"等可知,P2的名称是"搜索场馆"。

由题干中给出的关键信息"然后根据活动时间和地点推广募捐活动,根据相应的活动信息举办活动……"等,结合图2中加工P3的输入数据流"活动时间和地点",以及输出数据流"活动信息"等可知,P3的名称是"推广募捐活动"。

结合题干中给出的关键信息"(3)组织募捐活动。根据活动请求,确定活动时间范围",以及图1中处理2至处理3的数据流"活动请求"可知,图2中缺少了一条从处理2至处理3.2的数据流"活动请求"。

依据题干中给出的"(2)确定募捐需求和收集所募捐赠(资金及物品)……获取所募集的资金和物品"、"(3)组织募捐活动……获取和处理捐赠,根据捐赠请求,提供所募集的捐赠"等关键信息可知,图2中缺少了一条从处理3.5至处理2的数据流"所募集资金"。

基于题干中给出的关键信息"(3)组织募捐活动……根据捐赠请求进行募集",以及图2中处理2至处理3.1的数据流"捐赠请求"可知,图3中缺少了一条从处理2至处理3.1.3的数据流"捐赠请求"。

根据图2中处理3.1至处理2的数据流"所募集物品"、"所募集资金",以及"(2)确定募捐需求和收集所募捐赠(资金及物品)……获取所募集的资金和物品"可知,图3中缺少了一条从处理3.1.3至处理2的数据流"所募集捐赠"。

3、D1:捐赠人信息表  D2:已联系的捐赠人表  D3:捐赠表  D4:已处理捐赠表

结合题干中给出的关键信息"录入捐赠人信息,处理后存入捐赠人信息表",以及图3中处理3.1.1的名称"录入捐赠人信息"可知,图3中数据存储D1的名称是"捐赠人信息表"。

同理,根据题干中给出的关键信息"……向捐赠人发送募捐请求,并将已联系的捐赠人存入已联系的捐赠人表",以及图3中处理3.1.2的名称"请求募捐"及其输出数据流"已联系的捐赠人"等可知,数据存储D2的名称是"已联系的捐赠人表"。

基于题干中给出的关键信息"……根据捐赠请求进行募集,募得捐赠后,将捐赠记录存入捐赠表",以及图3中处理3.1.3的名称"募集"及其输出数据流"捐赠记录"等可知,数据存储D3的名称是"捐赠表"。

依据题干中给出的关键信息"……对捐赠记录进行处理后,存入已处理捐赠表……",以及图3中处理3.1.3的名称"募集"及其输出数据流"已处理的捐赠记录"等可知,数据存储D4的名称是"已处理捐赠表"。

解析:

根据题目描述和图示,可以确定图1-1中的实体El至E4的名称。根据募捐系统的功能描述和数据流图中的关键信息,可以确定:

  • E1为志愿者,因为涉及到给志愿者发送加入邀请、邀请跟进、工作任务,以及管理志愿者的信息、工作时长、工作结果等。
  • E2为捐赠人,因为涉及到向捐赠人发送募捐请求、查询捐赠人信息,以及处理与捐赠人之间的交互。
  • E3为募捐机构,因为涉及到从募捐机构获取资金和向其发放赠品。
  • E4为场馆,因为涉及到根据活动时间搜索场馆,向场馆发送场馆可用性请求,并获得场馆的可用性。

2、阅读下列说明,回答问题1 至问题3 ,将解答填入答题纸的对应栏内。

【说明】

某航空公司要开发一个订票信息处理系统,该系统的部分关系模式如下:

    航班(航班编号,航空公司,起飞地,起飞时间,目的地,到达时间,票价)

    折扣(航班编号,开始日期,结束日期,折扣)

    旅客(身份证号,姓名,性别,出生日期,电话,VIP折扣)

    购票(购票单号,身份证号,航班编号,搭乘日期,购票金额)

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

(1)航班表中的起飞时间和到达时间不包含日期,同一航班不会在一天出现两次及两次以上;

(2)各航空公司会根据旅客出行淡旺季适时调整机票的折扣,旅客购买机票的购票金额计算公式为:票价×折扣×VIP折扣,其中旅客的VIP折扣与该旅客已购买过的机票的购票金额总和相关,在旅客每次购票后被修改。VIP折扣值的计算由函数float vip_value(char[18]身份证号)完成。

根据以上描述,回答下列问题。

 【问题1】

请将如下创建购票关系的SQL语句的空缺部分补充完整,要求指定关系的主键、外键,以及购票金额大于零的约束。

    CREATE TABLE 购票(

    购票单号 CHAR(15) ___(a)___,

    身份证号 CHAR(18),

    航班编号 CHAR(6),

    搭乘日期 DATE,

    购票金额 FLOAT __(b)__,

    ___(c)__,

    ___(d)__,

    );

【问题2】

(1)身份证号为210000196006189999的客户购买了2013年2月18日CA5302航班的机票,购票单号由系统自动生成。下面的SQL语句将上述购票信息加入系统中,请将空缺部分补充完整。

INSERT INTO 购票(购票单号,身份证号,航班编号,搭乘日期,购票金额)

    SELECT '201303105555','210000196006189999','CA5302','2013/2/18',

    __(e)__

    FROM 航班,折扣,旅客

    WHERE __(f)__ AND 航班.航班编号='CA5302'

    AND '2013/2/18' BETWEEN 折扣.开始日期 AND 折扣.结束日期

    AND 旅客.身份证号='210000196006189999';

(2)需要用触发器来实现VIP折扣的修改,调用函数vip_value()来实现。请将如下SQL语句的空缺部分补充完整。

    CREATE TRIGGER VIP_TRG AFTER ___(g)___ ON ___(h)___

    RE FERENCING new  row AS  nrow

    FOR EACH row

    BEGIN

        UPDATE 旅客

        SET ___(i)___

        WHERE ___(j)___;

END

【问题3】

请将如下SQL语句的空缺部分补充完整。

(1)查询搭乘日期在2012年1月1日至2012年12月31日之间,且合计购票金额大于等于10000元的所有旅客的身份证号、姓名和购票金额总和,并按购票金额总和降序输出。

    SELECT 旅客.身份证号,姓名,SUM(购票金额)

    FROM 旅客,购票

    WHERE ___(k)___

    GROUP BY ___(l)___;

    ORDER BY ___(m)___;

(2)经过中转的航班与相同始发地和目的地的直达航班相比,会享受更低的折扣。查询从广州到北京,经过一次中转的所有航班对,输出广州到中转地的航班编号、中转地、中转地到北京的航班编号。

    SELECT ___(n)___

    FROM 航班航班1,航班 航班2

    WHERE ___(o)___;

参考答案:

【问题1】

(a) PRIMARYKEY (或NOT NULL UNIQUE)

(b) CHECK (购票金额> 0)

(c) FOREIGN KEY (身份证号) REFERENCES 旅客(身份证号)

(d) FOREIGN KEY (航班编号) REFERENCES 航班(航班编号)

【问题2】

(e)票价*折扣*VIP折扣

(f)航班.航班编号=折扣.航班编号

(g) INSERT

(h)购票

(i) VIP折扣= vip _ value(nrow.身份证号)

(j)旅客.身份证号= nrow.身份证号

【问题3】

(k)身份证号=购票.身份证号 AND 搭乘日期 BETWEEN '2012/1/1' AND '2012/12/31'

(l)旅客.身份证号,姓名 HAVlNG SUM(购票金额)>=10000

(m)SUM(购票金额) DESC

(n)航班1.航班编号,航班1.目的地,航班2.航班编号

(o)航班1.起飞地='广州' AND 航班2.目的地='北京' AND  航班1.目的地=航班2.起飞地;


解析:


问题一的答案主要是关于创建关系模式时需要的约束条件。主键约束用于确保数据的唯一性,外键约束用于确保数据之间的引用完整性,而检查约束用于确保数据的正确性(如购票金额大于零)。因此,空缺部分应填入这些约束条件。问题二涉及了插入数据和修改数据时的触发器操作。插入数据时需要根据特定的计算规则计算购票金额,并更新VIP折扣值。因此,空缺部分需要填入相关的计算和更新操作。问题三涉及了复杂的SQL查询操作。第一个查询需要找出满足特定条件的旅客信息并按购票金额排序,第二个查询需要找出从广州出发经过一次中转到达北京的航班信息。因此,空缺部分需要根据具体的查询需求进行填充。注意:这里提供的答案仅供参考,具体的实现可能会根据实际的数据库设计和数据有所不同。

3、阅读下列说明,回答问题1 至问题3,将解答填入答题纸的对应栏内。

【说明】

某电视台拟开发一套信息管理系统,以方便对全台的员工、栏目、广告和演播厅等进行管理。

【需求分析】

(1)系统需要维护全台员工的详细信息、栏目信息、广告信息和演播厅信息等。员工的信息主要包括:工号、姓名、性别、出生日期、电话和住址等,栏目信息主要包括:栏目名称、播出时间和时长等。广告信息主要包括:广告编号、价格等。演播厅信息包括:房间号、房间面积等。

(2)电视台根据调度单来协调各档栏目、演播厅和场务。一个销售档栏目只会占用一个演播厅,但会使用多名场务来进行演出协调。演播厅和场务可以被多个栏目循环使用。

(3)电视台根据栏目来插播广告。每档栏目可以插播多条广告,每条广告也可以在多档栏目中插播。

(4)一档栏目可以有多名主持人,但一名主持人只能主持一档栏目。

(5)一名编辑人员可以编辑多条广告,一条广告只能由一名编辑人员编辑。

【概念模型设计】

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


【逻辑结构设计】

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

演播厅(房间号,房间面积)

栏目(栏目名称,播出时间,时长)

广告(广告编号,销售价格,___(1)___)

员工(工号,姓名,性别,出生日期,电话,住址)

主持人(主持人工号,___(2)___)

插播单(___(3)___,播出时间)

调度单(___(4)___)

【问题1】

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

【问题2】

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

【问题3】

现需要记录广告商信息,增加广告商实体。一个广告商可以提供多条广告,一条广告只能由一个广告商提供。请根据该要求,对图进行修改,画出修改后的实体间联系和联系的类型。

参考答案:



1、这是一道要求读者掌握数据库的概念结构设计的综合分析题,本题的解答思路如下。

仔细阅读题干给出的说明信息,由其中关键信息"(3)电视台根据栏目来插播广告。每档栏目可以插播多条广告,每条广告也可以在多档栏目插播"等可知,图中实体"广告"与实体"栏目"之间存在联系"插播",其联系的类型为多对多(m:n)。

基于题干给出的"(4)一档栏目可以有多个主持人,但一名主持人只能主持一档栏目"等关键信息可知,图中实体"栏目"与实体"主持人"之间存在联系"主持",其联系的类型为一对多(1:n)。

根据题干给出的关键信息"(2)电视台根据调度单来协调各档栏目、演播厅和场务。一个销售档栏目只会占用一个演播厅,但会使用多名场务来进行演出协调。演播厅和场务可以被多个栏目循环使用"等关键信息可知,图中实体"场务"与联系"调度"之间存在关联,其关联的类型为多(n)。

整理以上分析结果,结合图可得出完整的信息管理系统实体联系图,如图所示。

2、(1)编辑人员工号          (2)栏目名称

   (3)栏目名称,广告编号    (4)栏目名称,房间号,场务工号

广告(广告编号,销售价格,编辑人员工号)

主持人(主持人工号,栏目名称)

插播单(栏目名称,广告编号,播出时间)

调度单(栏目名称,房间号,场务工号)

这是一道要求读者掌握数据库的逻辑结构设计的综合理解题,本题的解答思路如下。

基于问题1的分析结果,在图中实体"编辑人员"与实体"广告"之间存在联系"编辑",其联系的类型为一对多(1:n)。结合题干说明信息中已给出的关系模式:员工(工号,姓名,性别,出生日期,电话,住址),可知"广告"关系模式中需要加入一端实体的主键"编辑人员工号"(即空缺处所填写的内容)。结合常识可知,属性"广告编号"唯一标识每一条"广告"的数据记录,因此它是"广告"关系模式的主键。

同理,在图中实体"栏目"与实体"主持人"之间存在联系"主持",其联系的类型为一对多(1:n)。题干中已给出的关系模式:栏目(栏目名称,播出时间,时长),可知"主持人"关系模式中需要加入一端实体的主键"栏目名称"(即空缺处所填写的内容)。结合常识可知,属性"主持人工号"唯一标识每一条"主持人"的数据记录,因此它是"主持人"关系模式的主键。

对于图中联系类型为多对多(m:n)的"插播"联系,应将其转换成一个独立的关系模式,其属性为两端实体类型的主键加上联系类型自身的属性,而该关系模式的主键为两端实体主键的组合。因此空缺处应填入"栏目名称,广告编号"。属性"栏目名称"、"广告编号"的组合是"插播单"关系模式的主键。

对于图中联系类型为1:m:n的"调度"联系,应将其转换成一个独立的关系模式,其属性为三端实体类型的主键加上联系类型自身的属性,而该关系模式的主键为三端实体主键的组合。因此空缺处应填入"栏目名称,房间号,场务工号"。属性"栏目名称"、"房间号"、"场务工号"的组合是"调度"关系模式的主键。

3、这是一道要求读者掌握数据库的概念结构设计的综合应用题,本题的解答思路如下:如果需要广告商信息,则新增一个"广告商"实体,而一个广告商可以提供多条广告,一条广告只能由一个广告商提供,因此"广告商"和"广告"两个实体之间都存在联系"提供",其联系的类型都为一对多(1:n)。修改后的某电视台信息管理系统的实体联系图如图所示。



解析:

<问题1>:根据题目描述,理解并分析了各个实体间的联系和联系类型,包括广告与栏目之间的插播关系、栏目与主持人之间的主持关系以及场务与调度之间的关联关系。这些联系和类型是根据系统的实际需求设计出来的。

<问题2>:根据逻辑结构设计阶段的需求,补充完整了关系模式中的空缺部分,并明确了各个关系模式的主键。这些主键用于唯一标识每条记录。

<问题3>:根据题目要求,增加了广告商实体,并设计了广告商与广告之间的提供联系。这个修改是根据系统的新需求进行的,以记录广告商信息。

4、阅读下列说明,冋答问题1至问题3,将解答填入答题纸的对应栏内。

【说明】

某水果零售超市拟开发一套信息系统,对超市的顾客、水果、员工、采购和销售信息进行管理。

(1)水果零售超市实行会员制,顾客需具有会员资格才能进行购物,顾客需持所在单位出具的证明信才能办理会员资格,每位顾客具有唯一编号。

(2)超市将采购员和导购员分成若干个小组,每组人员负责指定的若干种水果的采购和导购。每名采购员可采购指定给该组购买的水果;每名导购员都可对顾客选购的本组内的各种水果进行计价和包装,并分别贴上打印条码。

(3)顾客选购水果并计价完毕后进行结算,生成结算单。结算单包括流水号、购买的各种水果信息和顾客信息等,每张结算单具有唯一的流水号。

(4)超市在月底根据结算单对导购员进行绩效考核,根据采购情况对采购员进行考核,同时也根据结算单对顾客消费情况进行会员积分。

初步设计的数据库关系模式如下。

"结算单"示例如表所示:

【问题1】

对于"顾客"关系模式,请回答以下问题:

(1)给出所有候选键。

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

【问题2】

对于"结算单"关系模式,请回答以下问题:

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

(2)将其分解为第3范式,分解后的关系名依次为:结算单1,结算单2,结算单3,并用下划线标注分解后的各关系模式的主键。

【问题3】

对于"职责"关系模式,请回答以下问题:

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

(2)将其分解为第4范式,分解后的关系名依次为:职责1,职责2,┄。

参考答案:

1 、(1)顾客编号和身份证号

(2)可以达到第2范式

理由:在"顾客"关系模式中,存在以下函数依赖:"单位名称→单位地址,

单位电话",存在非主属性对键的传递依赖,所以"顾客"关系模式可以达到第2范式,但不满足第3范式

这是一道要求读者掌握数据库关系模式规范化理论中,非主属性和3NF范式的综合分析题,本题的解答思路如下。

(1)依题意,由"顾客"关系模式和题干给出的关键信息"每位顾客具有唯一编号"等可知,属性"顾客编号"是"顾客"关系模式的主键;而属性"身份证号"也是该关系模式的决定因素之一,因此它们都是候选键的属性。

(2)结合表1中的属性"单位地址和单位电话"的约束条件--"顾客的单位地址和电话由单位名称决定"等关键信息可知,在"顾客"关系模式中,存在"单位名称→(单位地址,单位电话)"的函数依赖关系。根据3NF的要求:每一个非主属性既不部分依赖于码,也不传递依赖于码。而"顾客"关系模式存在非主属性对码的传递依赖,因此它不能满足3NF,但可以达到2NF。

2、(1)根据"结算单"关系模式,可知其键为(流水号,条码),而又存在部分函数依赖:"条码→水果名称,销售单价,数量,金额,导购员编号"

根据第2范式的要求:不存在非主属性对键的部分依赖,所以"结算单"关系模式不满足第2范式,会造成插入异常、删除异常和修改异常

(2)对"结算单"关系模式进行分解后的关系模式及主键如下:

结算单1(流水号,条码)

结算单2(流水号,顾客编号)

结算单3(条码,水果名称,销售单价,数量,金额,导购员编号)

这是一道要求读者掌握数据库关系模式规范化理论中2NF和3NF的综合应用题,本题的解答思路如下。

(1)由"结算单"关系模式、题干(或表1)中给出的关键信息"(3)……每张结算单具有唯一的流水号"、表1中"条码"属性的约束条件--"购买的每种水果的信息"和表2的示例等关键信息可知,属性"流水号,条码"是该关系模式的候选键。

"结算单"关系模式存在部分函数依赖:

流水号→顾客编号

条码→水果名称,销售单价,数量,金额,导购员编号

根据第2范式(2NF)的要求:不存在非主属性对码的部分依赖。而"结算单"关系模式存在非主属性对码的部分依赖,因此它不属于2NF,会造成插入异常、删除异常和修改复杂(或修改异常)等问题。

(2)根据3NF的要求和"结算单"关系模式的函数依赖关系,对"结算单"关系模式进行如下分解,以满足3NF的要求。

结算单1(流水号,条码)

结算单2(流水号,顾客编号)

结算单3(条码,水果名称,销售单价,数量,金额,导购员编号)

其中,带下划实线的属性为分解后的各关系模式对应的主键,带波浪线的属性为外键。这3个关系模式中的每一个非主属性既不部分依赖于码,也不传递依赖于码,因此满足3NF的要求。

3、(1)不属于第4范式。

根据"职责"关系模式的定义可知:其主键为"水果名称,采购员编号,导购员

编号",存在多值依赖:

水果名称→→采购员编号

水果名称→→导购员编号

根据第4范式的要求,不允许存在非平凡的多值依赖,因此,"职责"关系模式不满足第4范式。

(2)对"职责"关系模式进行分解后的关系模式如下:

职责1(水果名称,采购员编号)

职责2(水果名称,导购员编号)

这是一道要求读者掌握关系模式规范化理论中4NF的综合分析题,本题解答思路如下。

(1)由"职责"关系模式和题干中"(2)超市将采购员和导购员分成若干个小组,每组人员负责指定的若干种水果的采购和导购……"等关键信息可知,属性"水果名称,采购员编号,导购员编号"是该关系模式的主键。"职责"关系模式存在多值依赖:

水果名称→→采购员编号

水果名称→→导购员编号

根据第4范式的要求:不允许有非平凡且非函数依赖的多值依赖,因此"职责"关系模式不满足4NF。

(2)根据4NF的要求和"职责"关系模式的函数依赖,对该关系模式进行如下分解,以满足4NF的要求。

职责1(水果名称,采购员编号)

职责2(水果名称,采购员编号)

其中,带下划线的属性为相应关系模式的主键。

解析:

问题1:
对于"顾客"关系模式,候选键是指能够唯一标识表中每一行的属性或属性组合。根据题目描述,"顾客"关系模式包括顾客编号和身份证号等属性,其中顾客编号是唯一的,因此顾客编号是一个候选键。同时,如果身份证号也是唯一的,那么它也是候选键。关于范式的问题,该关系模式满足第二范式的要求,因为存在传递依赖(单位名称→单位地址和单位电话),但不满足第三范式的要求。

问题2:
对于"结算单"关系模式,根据题目描述和数据库规范化理论,它存在部分函数依赖(条码→水果信息等),不满足第二范式的要求。因此会造成插入异常、删除异常和修改异常。为了解决这个问题,我们需要将其分解为三个关系模式:结算单1、结算单2和结算单3。这三个关系模式的主键分别是(流水号,条码)、(流水号)和(条码,水果信息等)。这样分解后满足了第三范式的要求。

问题3:
对于"职责"关系模式,它不属于第四范式。因为存在多值依赖:水果名称与采购员编号和导购员编号都有依赖关系。为了解决这个问题,我们需要将其分解为两个关系模式:职责1和职责2。职责1包括(水果名称,采购员编号),职责2包括(水果名称,导购员编号)。这样分解后满足了第四范式的要求。

5、阅读下列说明,回答问题1至问题3,将解答填入答题纸的对应栏内。

【说明】

某连锁酒店提供网上预订房间业务,流程如下:

(1)客户查询指定日期内所有类别的空余房间数,系统显示空房表(日期,房间类别,数量)中的信息。

(2)客户输入预订的起始日期、结束日期、房间类别和数量,并提交。

(3)系统将用户提交的信息写入预订表(身份证号,起始日期,结束日期,房间类别,数量),并修改空房表的相关数据。

针对上述业务流程,回答下列问题。

【问题1】

如果两个用户同时查询相同日期和房间类别的空房数量,得到的空房数量为1,并且这两个用户又同时要求预订,可能会产生什么结果,请用100字以内的文字简要叙述。

【问题2】

引入如下伪指令:将预订过程作为一个事务,将查询和修改空房表的操作分别记为R(A)和W(A,x),插入预订表的操作记为W(B,a),其中x代表空余房间数,a代表预订房间数,则事务的伪指令序列为:x=R(A),W(A,x-a),w(B,a)。

在并发操作的情况下,若客户1、客户2同时预订相同类别的房间时,可能出现的执行序列为:x1=R(A),x2=R(A),W(A,x1-a1),W(B1,a1),W(A,x2-a2),W(B2,a2)。

(1)此时会出现什么问题,请用100字以内的文字简要叙述。

(2)为了解决上述问题,引入共享锁指令SLock(X)和独占锁指令XLock(X)对数据X进行加锁,解锁指令Unlock(X)对数据X进行解锁,请补充上述执行序列,使其满足2PL协议,不产生死锁且持有锁的时间最短。

【问题3】

下面是实现预订业务的程序,请补全空缺处的代码。其中主变量":Cid"、":Bdate"、":Edate"、":Rtype"、":Num"分别代表身份证号、起始日期、结束日期、房间类别和订房数量。

    SET TRANSACTION  ISOLATION LEVEL REPEATABLE READ;

    UPDATE 空房表

    SET 数量=数量-:Num

    WHERE  (a)  ;

    if error  then  {ROLLBACK; return -1;  }

    INSERT INTO 预订表 VALUES (:cid, :Bdate, :Edate, :Rtype, :Num);

    if error then  {ROLLBACK; return -2;  }

      (b)  ;

参考答案:

1、同时预订时,可能会产生一个客户订不到或者把同一房订给两个客户

依题意,如果两个用户同时要求预订相同日期和相同类别的同一个房间,则可能会产生一个客户订不到房间或者把同一房间预订给两个客户的冲突现象。

2、(1)出现问题:丢失修改,客户1预订a1数量房间后,对空房数量的修改被T2的修改覆盖,造成数据不一致。

(2)XLOCK(A),x1=R(A),W(A,x1-a1),XLOCK(B),UNLOCK(A),W(B1,a1),

UNLOCK(B),XLOCK(A),x2=R(A),W(A,x2-a2),XLOCK(B),UNLOCK(A),

W(B2,a2),UNLOCK(B)

若对并发事务的指令交叉执行不加以控制,则会使每个事务的执行结果相互干扰,破坏事务的隔离性,从而造成数据库的不一致。本试题中,客户1预订a1数量房间后,对空房数量的修改可能被客户2的修改所覆盖,造成不能体现出客户1已预订的房间数量。该现象属于丢失修改造成的数据库不一致性。

在并发状态下,可能会相互干扰破坏事务的ACID属性,加锁机制是保障事务正确执行的一种机制。2PL协议能够保证事务在并发状态下调度的正确性,即可串行化的调度。针对题干所给出的客户f的房间预订伪指令序列:x=R(A),W(A,x-a),W(B,a),需要在修改房间数量之前加XLock()指令,并保证读/写锁不交叉,即确保客户1释放A上的锁之后客户2才能执行加锁操作。重写后的房间预订伪指令序列如下。

XLOCK(A),x1=R(A),W(A,x1-a1),XLOCK(B),UNLOCK(A),W(B1,a1),UNLOCK(B),XLOCK(A),

x2=R(A),W(A,x2-a2),XLOCK(B),UNLOCK(A),W(B2,a2),UNLOCK(B)

3、房间类别=:Rtype AND 日期 BETWEEN :Bdate AND :Edate

   COMMIT :retum 0;

SQL语句"SET TRANSACTION ISOLATION LEVEL REPEATABLE READ;"是SQL提供的事务隔离级别之一。它表示只允许事务读已提交的数据,并且在两次读同一数据时不允许其他事务修改此数据。依题意,结合题干给出的关键信息"(1)客户查询指定日期内所有类别的空余房间数,系统显示空房表(日期,房间类别,数量)中的信息"可得,空缺处应填入"房间类别=:Rtype AND 日期 BETWEEN :Bdate AND :Edate"。

在程序中,事务是以COMMIT语句或ROLLBACK语句结束。结合该程序中已给出的代码"if error then {ROLLBACK; return -1;)"和"if error then {ROLLBACK; return -2;}"可得,空缺处应填入"COMMIT; return 0;"。

解析:

如果两个用户同时要求预订相同日期和类别的房间,而空房数量只有一间,那么系统无法同时满足两个用户的需求,可能会导致一个用户订不到房间或者将同一个房间预订给两个用户。

喵呜刷题:让学习像火箭一样快速,快来微信扫码,体验免费刷题服务,开启你的学习加速器!

创作类型:
原创

本文链接:2013年5月数据库系统工程师下午题答案及解析

版权声明:本站点所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明文章出处。
分享文章
share