201405数据库下午真题

第 1 题

阅读下列说明和图,回答问题1至问题4,将解答填入答题纸的对应栏内。
【说明】
某巴士维修连锁公司欲开发巴士维修系统,以维护与维修相关的信息。该系统的主要功能如下:
1)记录巴士ID和维修问题。巴士到车库进行维修,系统将巴士基本信息和ID记录在巴士列表文件中,将待维修机械问题记录在维修记录文件中,并生成维修订单。
2)确定所需部件。根据维修订单确定维修所需部件,并在部件清单中进行标记。
3)完成维修。机械师根据维修记录文件中的待维修机械问题,完成对巴士的维修,登记维修情况;将机械问题维修情况记录在维修记录文件中,将所用部件记录在部件清单中,并将所用部件清单发送给库存管理系统以对部件使用情况进行监控。巴士司机可查看已维修机械问题。
4)记录维修工时。将机械师提供的维修工时记录在人事档案中,将维修总结发送给主管进行绩效考核。
5)计算维修总成本。计算部件清单中实际所用部件、人事档案中所用维修工时的总成本;将维修工时和所用部件成本详细信息给会计进行计费。
现采用结构化方法对巴士维修系统进行分析与设计,获得如图1-1所示的上下文数据流图和图1-2所示的0层数据流图。

    

                                                                                                                                图1-1 上下文数据流图

    

                                                                                                                                  图1-2 0层数据流图

【问题1】(5分)

使用说明中的词语,给出图1-1中的实体 E1~E4  的名称。
【问题2】(4分)
使用说明中的词语,给出图1-2中的数据存储D1~D4的名称。

【问题3】(3分)
说明图1-2中所存在的问题。
【问题4】(3分)
根据说明和图中术语,采用补充数据流的方式,改正图1-2中的问题。要求给出 所补充数据流的名称、起点和终点。

答案与解析

  • 试题难度:较难
  • 知识点:软件工程>开发模型
  • 试题答案:

    【问题1】(5分)

    E1:巴士司机
    E2:机械师
    E3:会计
    E4:主管
    E5:库存管理系统
    【问题2】(4分)
    D1  :巴士列表文件
    D2:维修记录文件
    D3:部件清单
    D4:人事档案
    【问题3】(3分)
    处理3只有输出数据流,没有输入数据流
    D2  、 

D3是黑洞,只有输入的数据流,没有输出数据流
父子图不平衡
图1-2中没有图1-1中的数据流“维修情况”
【问题4】(3分)
补充以下数据流:
(1)名称:待维修机械问题; 起点: 

D2 ;  终点:3或完成维修。
(2)名称:实际所用部件;    起点: 

D3 ;   终点:5或计算总成本。
(3)名称:维修情况;           起点:

E2 ;   终点:3或完成维修</p>

  • 试题解析:
    【问题1】
    根据第3)点:巴士司机可查看已维修机械问题,可知 

E1为巴士司机;根据第3)点:机械师根据维修记录文件中的待维修机械问题,完成对巴士的维修, 登记维修情况,可知

E2  为机械师;根据第5)点:将维修工时和所用部件成本详细信息给会计进行计费,可知

E3  为会计;根据第4)点:将机械师提供的维修工时记录在人事档案中,将维修总结发送 给主管进行绩效考核,可知 

E4为主管;根据第3)点:将所用部件清单发送给库存管理系统以对部件使用情况进行监控,可知 

E5为库存管理系统。
【问题2】
根据第1)点:系统将巴士基本信息和ID 记录在巴士列表文件中,可知D1为巴士列表文件;根据第1)点:将待维修机械问题记录在维修记录文件中,并生成维修订单,可知D2为维修记录文件;根据第2)点:根据维修订单确定维修所需部件,并在部件清单中进行标记,可知D3为部件清单;根据第4)点:将机械师提供的维修工时记录在人事档案中,可知D4为人事档案。
【问题3】
分析图1-2可以发现:
处理3只有输出数据流,没有输入数据流;D2

D3 是黑洞只有输入的数据流,没有输出流,造成父子图不平衡,在1-1和1-2中,1-1中从 

E2输入的数据流维修工时/维修情况,在图1-2中只有维修工时,造成父子图不平衡。
【问题4】


第 2 题

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

【说明】
某健身俱乐部要开发一个信息管理系统,该信息系统的部分关系模式如下:
员工(员工身份证号,姓名,工种,电话,住址)
会员(会员手机号,姓名,折扣)
项目(项目名称,项目经理,价格)
预约单(会员手机号,预约日期,项目名称,使用时长)(外键:会员手机号)
消费(流水号,会员手机号,项目名称,消费金额,消费日期)(外键:会员手机号,项目名称)
有关关系模式的属性及相关说明如下:
(1)俱乐部有多种健身项目,不同的项目每小时的价格不同。俱乐部实行会员制,且需要电话或在线提前预约。
(2)每个项目都有一个项目经理,一个经理只能负责一个项目。
(3)俱乐部对会员进行积分,达到一定积分可以进行升级,不同的等级具有不同的折扣。 
根据以上描述,回答下列问题:

【问题1】(4分)

请将下面创建消费关系的SQL语句的空缺部分补充完整,要求指定关系的主码、 外码,以及消费金额大于零的约束。
CREATE TABLE 消费(
            流水号 CHAR(12)   (a)  ,
            会员手机号CHAR(11),
            项目名称CHAR (8),
            消费金额NUMBER    (b)  ,
            消费日期DATE,
               (c)  ,
               (d)  ,
);
【问题2】(6分)
(1)手机号为18812345678的客户预约了 2014年3月18日两个小时的羽毛球场地,消费流水号由系统自动生成。请将下面SQL语句的空缺部分补充完整。
INSERT INTO 消费(流水号,会员手机号,项目名称,消费金额,消费日期)
        SELECT '201403180001','18812345678','羽毛球',  (e)  ,'2014/3/18'
        FROM会员, 项目, 预约单
        WHERE预约单.项目名称=项目.项目名称AND   (f)  
            AND项目.项目名称='羽毛球'
            AND会员.会员手机号='18812345678';
(2)需要用触发器来实现会员等级折扣的自动维护,函数float vip_value(char(11) 会员手机号)依据输入的手机号计算会员的折扣。请将下面SQL语句的空缺部分补充完整。
CREATE TRIGGER VIP_TRG AFTER   (g)   ON   (h)  
REFERENCING new row AS nrow
FOR EACH ROW
BEGIN
       UPDATE 会员
       SET   (i)  
       WHERE   (j)  ;
   END
【问题3】(5分)
请将下面SQL语句的空缺部分补充完整。
(1)俱乐部年底对各种项目进行绩效考核,需要统计出所负责项目的消费总金额 大于等于十万元的项目和项目经理,并按消费金额总和降序输出。
SELECT项目.项目名称,项目经理,SUM(消费金额)
FROM项目,消费
WHERE   (k)  
GROUP BY   (l)  
ORDER BY   (m)  ;
(2)查询所有手机号码以“888”结尾,姓“王”的员工姓名和电话。
SELECT姓名,电话
FROM 员工
WHERE 姓名  (n)   AND 电话  (o)  

答案与解析

  • 试题难度:较难
  • 知识点:SQL语言>SELECT语句
  • 试题答案:

    【问题1】 

    a、PRIMARY KEY 
    b、CHECK(消费金额>0)  
    c、FOREIGN KEY(会员手机号)REFERENCES 会员(会员手机号)
    d、FOREIGN KEY(项目名称)REFERENCES 项目(项目名称)

    【问题2】 
    e、价格*使用时长*折扣
    f、预约单.会员手机号=会员.会员手机号
    g、INSERT
    h、消费
    i、折扣=vip_value(nrow. 会员手机号)
    j、会员.会员手机号= nrow. 会员手机号

    【问题3】 
    k、项目.项目名=消费.项目名
    l、项目.项目名 项目经理 HAVING SUM(消费金额)>=100000
    m、SUM(消费金额) DESC
    n、LIKE ‘王%’
    0、LIKE ‘%888’

  • 试题解析:
    【问题1】
    依据消费关系中标识的“流水号”作为该关系的主键,因此在(a)处应该填写的是主键约束即:PRIMARY KEY;依据“消费金额大于零的约束”,因此(b)应该填写的CHECK约束即:CHECK(消费金额>0);依据消费关系中标识的“会员手机号,项目名称”作为该关系的外键,在结合外键相关的关系,因此(c、d)处应该填写的是外键约束即: FOREIGN KEY(会员手机号)REFERENCES 会员(会员手机号)和FOREIGN KEY(项目名称)REFERENCES 项目(项目名称)
    【问题2】
    (1)依据INSERT语句的数据要与相关的列进行对应,可以得出(e)处应该是“消费金额”数额。而实际的消费金额应该为:价格使用时长折扣,所以(e)应为:价格使用时长折扣;(f)处应该指出预约单关系和会员关系的连接条件,因此应为:预约单.会员手机号=会员.会员手机号
    (2)依据“俱乐部对会员进行积分,达到一定积分可以进行升级,不同的等级具有不同的折扣”,可以得出该触发器应该是更新触发,即(g)处应该为INSERT;依据触发器语句语法结构:
    CREATE TRIGGER 触发器名
    {BEFORE|AFTER}
    {事件}
    ON <对象名>
    REFERENCING   {OLD AS old}|{NEW AS new}
    [FOR EACH ROW] [WHEN 条件]
    {触发器执行体}
    所以(h)处应该是“消费”关系
    (i)处应是对会员关系中的折扣进行重新计算,折扣=vip_value(nrow. 会员手机号);
    (j)处应是对更新语句指定筛选条件,应为:会员手机号= nrow. 会员手机号
    【问题3】
    SELECT语句的基本语法结构:
    SELECT [ ALL| DISTINCT ]  <列名>[,… n]
    FROM <表名|视图名>  [,…n]
    [WHERE <条件表达式>]
    [GROUP  BY <列名> [ HAVNG <条件表达式>] ]
    [ORDER  BY <列名>[ASC|DESC]   [,…n]  ]
    (1)由于该查询涉及到两个关系,因此WHERE语句中应指定两个关系的连接条件,即(k)处应为:项目.项目名=消费.项目名;依据“需要统计出所负责项目的消费总金额大于等于十万元的项目和项目经理,并按消费金额总和降序输出”,可以得出GROUP BY 进行分组的条件是按项目进行,统计的条件是金额大于等于十万,所以在分组的基础上应指定条件,需要使用HAVING语句来指定条件,即(i)应为:项目.项目名 项目经理 HAVING SUM(消费金额)>=100000;(m)处应该是对项目的金额进行汇总后进行降序排列,即为:SUM(消费金额) DESC
    (2)查询所有手机号码以“888”结尾,姓“王”的员工姓名和电话,该查询为模糊查询,因此需要使用LIKE语句配合进行模糊查询。通配符应使用“%”

第 3 题

阅读下列说明和图,回答问题1至问题3,将解答填入答题纸的对应栏内。 
【说明】
某家电销售电子商务公司拟开发一套信息管理系统,以方便对公司的员工、家电销售、家电厂商和客户等进行管理。 
【需求分析】 
(1)系统需要维护电子商务公司的员工信息、客户信息、家电信息和家电厂商信息等。员工信息主要包括:工号、姓名、性别、岗位、身份证号、电话、住址,其中岗位包括部门经理和客服等。客户信息主要包括:客户ID、姓名、身份证号、电话、住址、账户余额。家电信息主要包括:家电条码、家电名称、价格、出厂日期、所属厂商。家电厂商信息包括:厂商ID、厂商名称、电话、法人代表信息、厂址。
(2)电子商务公司根据销售情况,由部门经理向家电厂商订购各类家电。每个家电厂商只能由一名部门经理负责。
(3)客户通过浏览电子商务公司网站查询家电信息,与客服沟通获得优惠后,在线购买。 
【概念模型设计】
根据需求阶段收集的信息,设计的实体联系图(不完整)如图1-1所示。

    

                                                                                                                                图1-1 实体联系图

【逻辑结构设计】
根据概念模型设计阶段完成的实体联系图,得出如下关系模式(不完整):
客户(客户ID、姓名、身份证号、电话、住址、账户余额)
员工(工号、姓名、性别、岗位、身份证号、电话、住址)
家电(家电条码、家电名称、价格、出厂日期、  (1)  
家电厂商(厂商ID、厂商名称、电话、法人代表信息、厂址、  (2)  
购买(订购单号、  (3)  、金额) 
【问题1】(6分)
补充图1-1中的联系和联系的类型。
【问题2】(6分)
根据图1-1,将逻辑结构设计阶段生成的关系模式中的空(1)~(3)补充完整。 用下划线指出“家电”、“家电厂商”和“购买”关系模式的主键。
【问题3】(3分)
电子商务公司的主营业务是销售各类家电,对账户有余额的客户,还可以联合第二方基金公司提供理财服务,为此设立客户经理岗位。客户通过电子商务公司的客户经理和基金公司的基金经理进行理财。每名客户只有一名客户经理和一名基金经理负责,客户经理和基金经理均可负责多名客户。请根据该要求,对图1-1进行修改,画出修改后的实体间联系和联系的类型。

答案与解析

  • 试题难度:较难
  • 知识点:软件工程>软件开发方法
  • 试题答案:

    【问题1】(6分)

    【问题2】(6分)
    (1)厂商ID
    (2)工号
    (3)家电条码,客户ID,工号
    家电关系的主键:家电条码
    家电厂商关系的主键:厂商ID
    购买关系的主键:订购单号


【问题3】(3分)

- 试题解析:
根据实际生活经验,不难得知家电厂商与家电之间的关系为一对多;家电与客户之间的关系,此处的家电是指家电的类型,因此一种类型的家电可以被多个客户购买,一个客户也可以购买多种不同类型的家电,所以家电与客户之间的关系为多对多。
根据题意:每名客户只有一名客户经理和一名基金经理负责,客户经理和基金经理均可负责多名客户,可知客户经理与客户的关系是一对多,基金经理与客户的关系也是一对多。
根据题目中的需求分析,不难得出关系模式的答案。 ### 第 4 题

阅读下列说明,回答问题1至问题3,将解答填入答题纸的对应栏内。
【说明】
某图书馆的管理系统部分需求和设计结果描述如下:
图书馆的主要业务包括以下几项:
(1)对所有图书进行编目,每一书目包括ISBN号、书名、出版社、作者、排名, 其中一部书可以有多名作者,每名作者有唯一的一个排名;
(2)对每本图书进行编号,包括书号、ISBN号、书名、出版社、破损情况、存放位置和定价,其中每一本书有唯一的编号,相同ISBN号的书集中存放,有相同的存储位置,相同ISBN号的书或因不同印刷批次而定价不同;
(3)读者向图书馆申请借阅资格,办理借书证,以后凭借书证从图书馆借阅图书。 办理借书证时需登记身份证号、姓名、性别、出生年月日,并缴纳指定金额的押金。 如果所借图书定价较高时,读者还须补交押金,还书后可退还所补交的押金;
(4)读者借阅图书前,可以通过ISBN号、书名或作者等单一条件或多条件组合进行查询。根据查询结果,当有图书在库时,读者可直接借阅;当所查书目的所有图书已被他人借走时,读者可进行预约,待他人还书后,由馆员进行电话通知;
(5)读者借书时,由系统生成本次借书的唯一流水号,并登记借书证号、书号、 借书日期,其中同时借多本书使用同一流水号,每种书目都有一个允许一次借阅的借书时长,一般为90天,不同书目有不同的借书时长,并且可以进行调整,但调整前所借出的书,仍按原借书时长进行处理;
(6)读者还书时,要登记还书日期,如果超出借书时长,要缴纳相应的罚款;如果所还图书由借书者在持有期间造成破损,也要进行登记并进行相应的罚款处罚。
初步设计的该图书馆管理系统,其关系模式如图1-1所示。

    

【问题1】(5分)
对关系“借还”,请回答以下问题:
(1)列举出所有候选键;
(2)根据需求描述,借还关系能否实现对超出借书时长的情况进行正确判定?用 60字以内文字简要叙述理由。如果不能,请给出修改后的关系模式(只修改相关关系模式属性时,仍使用原关系名,如需分解关系模式,请在原关系名后加1,2,……等进行区别)。
【问题2】(5分)
对关系“图书”,请回答以下问题:
(1)写出该关系的函数依赖集;
(2)判定该关系是否属于BCNF,用60字以内文字简要叙述理由。如果不是,请进行修改,使其满足BCNF,如果需要修改其他关系模式,请一并修改,给出修改后的关系模式(只修改相关关系模式属性时,仍使用原关系名,如需分解关系模式,请在原关系名后加1,2,……等进行区别)。
【问题3】(5分)
对关系“书目”,请回答以下问题:
(1)它是否属于第四范式,用60字以内文字叙述理由。
(2)如果不是,将其分解为第四范式,分解后的关系名依次为:书目1,书目2,……。 如果在解决【问题1】、【问题2】时,对该关系的属性进行了修改,请沿用修改后的属性。

答案与解析

  • 试题难度:较难
  • 知识点:关系数据库>1NF至4NF
  • 试题答案:

    【问题1】
    (1)流水号、书号;
    (2)不能。还书时读取书目中的借书时长,可能在借书后因时长发生变化,不满足按原借书时长计算的要求。
    在借还关系中增加借书时长属性,借书时根据书目中的借书时长写入该值。
    修改后的“借还”关系:
    借还(流水号,借书证号,书号,借书日期,借书时长,还书日期,罚款金额,罚款原因)
    【问题2】
    (1)书号→(ISBN号、破坏情况、定价);ISBN号→(书名、出版社、存放位置)
    (2)不属于,原因是:非主属性对码存在传递依赖
    修改内容:去掉书名和出版社属性,将存放位置属性移置书目关系。修改后的关系模式:
    图书(书号,ISBN号,破损情况,定价)(书号为主键,ISBN号为外键)
    书目(ISBN号,书名,出版社,作者,排名,存放位置,借书时长)(ISBN号为主键)
    【问题3】
    (1)否,存在多值依赖,ISBN号→→作者
    书目1(ISBN号、书名、出版社、存放位置、借书时长)
    书目2(ISBN号、作者、排名)

  • 试题解析:

    【问题1】
    针对借还关系,根据题干描述,“读者借书时,由系统生成本次借书的唯一流水号,并登记借书证号、书号、借书日期,其中同时借多本书使用同一流水号”,说明流水号不能唯一确定借阅记录,还需要借阅书的参与,而书号可以唯一确定一本书,故借还关系候选码应由流水号和书号构成。
    关系模式的设计应满足应用需求。通过题干中的描述,“不同书目有不同的借书时长,并且可以进行调整,但调整前借出的书,仍按原借书时长进行处理”,借书时长应该是借书时确定的,从书目的属性中读取,作为借书关系的属性,以后借书时长在书目关系中修改,并不影响已发生的借还关系。
    【问题2】
    根据描述“每一本书有唯一的编号,相同ISBN号的书集中存放,有相同的存储位置,相同ISBN号的书或因不同印刷批次而定价不同”,得出书号决定定价,破损情况是每本书的具体情况,也决定于书号,而书名、出版社和存放位置应由ISBN号决定,故函数依赖集为:书号→(ISBN号、书名、出版社、破坏情况、存放位置、定价);ISBN号→(书名、出版社、存放位置)
    根据函数依赖集,图书关系的候选码为书号,存在非主属性书名、出版社和存放位置对候选码的传递依赖,不满足BCNF的要求。
    修改内容:去掉书名和出版社属性,将存放位置属性移置书目关系。修改后的关系模式:
    图书(书号,ISBN号,破损情况,定价)(书号为主键,ISBN号为外键)
    书目(ISBN号,书名,出版社,作者,排名,存放位置,借书时长)(ISBN号为主键)
    【问题3】
    第四范式设关系模式R∈1NF,如果对于R的每个非平凡的多值依赖X→→Y,都有X包含码,那么R∈4NF ;4NF就是限定关系模式的属性之间不允许有非平凡且非函数依赖的多值依赖。
    该关系存在多值依赖,ISBN号→→作者 ,因此应将关系进行分解为:
    书目1(ISBN号、书名、出版社、存放位置、借书时长)
    书目2(ISBN号、作者、排名)

第 5 题

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

【说明】   
某高速路不停车收费系统(ETC)的业务描述如下:
(1)车辆驶入高速路入口站点时,将驶入信息(ETC卡号,入口编号,驶入时间)写入登记表;
(2)车辆驶出高速路出口站点(收费口)时,将驶出信息(ETC卡号,出口编号,驶出时间)写入登记表;根据入口编号、出口编号及相关收费标准,清算应缴费用, 并从绑定的信用卡中扣除费用。    
一张ETC卡号只能绑定一张信用卡号,针对企业用户,一张信用卡号可以绑定多 个ETC卡号。使用表绑定(ETC卡号,信用卡号)来描述绑定关系,从信用卡(信用卡号,余额)表中扣除费用。   
针对上述业务描述,完成下列问题:

【问题1】(4分)
在不修改登记表的表结构和保留该表历史信息的前提下,当车辆驶入时,如何保 证当前ETC卡已经清算过,而在驶出时又如何保证该卡已驶入而未驶出?请用100字以内文字简述处理方案。
【问题2】(5分)
当车辆驶出收费口时,从绑定信用卡余额中扣除费用的伪指令如下:读取信用卡余额到变量x,记为x=R(A);扣除费用指令x=x-a;写信用卡余额指令记为W(A,x)。  
(1)当两个绑定到同一信用卡号的车辆同时经过收费口时,可能的指令执行序列为:x1=R(A),x1=x1-a1,x2=R(A),x2=x2-a2,W(A,x1),W(A,x2)。此时会出现什么问题?(100字以内)  
(2)为了解决上述问题,引入独占锁指令XLock(A)对数据A进行加锁,解锁指令Unlock(A)对数据A进行解锁。请补充上述执行序列,使其满足2PL协议。
【问题3】(6分)
下面是用E-SQL实现的费用扣除业务程序的一部分,请补全空缺处的代码。
CREATE PROCEDURE 扣除(IN ETC 卡号 VARCHAR(20), IN 费用 FLOAT)
        BEGIN
            UPDATE 信用卡 SET 余额=余额-费用
            FROM 信用卡,绑定
            WHERE 信用卡.信用卡号=绑定.信用卡号 AND   (a)  ;
            if error then ROLLBACK;
            else   (b)  ;
END

答案与解析

  • 试题难度:较难
  • 知识点:事务管理>并发操作设计
  • 试题答案:

    【问题1】在车辆驶入时判定登记表上对应ETC卡的所有记录,出口编号和驶出时间均不为空,表示该卡已清算过,在车辆驶出时判定该卡存在记录有驶入信息出口编号和驶出时间为空

    【问题2】出现丢失更新

    【问题3】
    a、绑定.ETC卡号=ETC卡号
    b、COMMIT</div>

  • 试题解析:
    【问题1】
    一次通过包含经过入口站点和经过出口站点,由于ETC卡存在反复使用,所以应将经过入口和出口严格配对,根据历史记录,进入站点时应该没有未配对的入口信息,即所有的经过信息均有配对的入口和出口记录;出口时仅有唯一的入口信息。
    解决这些问题的最好办法是把入口和出口信息作为一条记录,用来记录每一次经过。经过入口站点时插入新记录,出口信息字段为空值,经过出口站点时再修改为相应的值。
    【问题2】
    由于第2个事务在第一事务写入前已经读取了信用卡的信息,当第1个事务写入数据后,这时第2个事务信用卡的信息并未更新为最新状态,而是第1个事务写入前的状态,所以当第2个事务再写入数据,就导致第1个事务的更新被覆盖了,从而产生了丢失更新。
    2PL:即两阶段锁协议,对任何数据进行读写之前必须对该数据加锁,在释放了一个封锁之后,事务不再申请和获得任何其他封锁,即第1阶段为持所阶段,这阶段不能释放所,第2阶段为释放阶段,这阶段不能再加锁
     
    注意:两个事务的书写,事务中加锁必须出现在释放锁之前。
    【问题3】
    (a)应为指定扣款的卡号,所以(a)处应为:绑定.ETC卡号= ETC卡号
    (b)处是if分支语句成功分支,所以该处应该提交事务,即使用COMMIT

results matching ""

    No results matching ""