201605数据库下午真题

第 1 题

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

【说明】

某会议中心提供举办会议的场地设施和各种设备,供公司与各类组织机构租用。场地包括一个大型报告厅、一个小型报告厅以及诸多会议室。这些报告厅和会议室可提供的设备有投影仪、白板、视频播放/回放设备、计算机等。为了加强管理,该中心欲开发一会议预订系统,系统的主要功能如下。

(1)检查可用性。客户提交预订请求后,检查预订表,判定所申请的场地是否在申请日期内可用;如果不可用,返回不可用信息。

(2)临时预订。会议中心管理员收到客户预定请求的通知之后,提交确认。系统生成新临时预订存入预订表,并对新客户创建一条客户信息记录加以保存。根据客户记录给客户发送临时预订确认信息和支付定金要求。

(3)分配设施与设备。根据临时预订或变更预定的设备和设施需求,分配所需设备(均能满足用户要求)和设施,更新相应的表和预订表。

(4)确认预订。管理员收到客户支付定金的通知后,检查确认,更新预订表,根据客户记录给客户发送预订确认信息。

(5)变更预订。客户还可以在支付余款前提交变更预订请求,对变更的预订请求检查可用性,如果可用,分配设施和设各;如果不可用,返回不可用信息。管理员确认变更后,根据客户记录给客户发送确认信息。

(6)要求付款。管理员从预订表中查询距预订的会议时间两周内的预定,根据客户记录给满足条件的客户发送支付余款要求。

(7)支付余款。管理员收到客户余款支付的通知后,检查确认,更新预订表中的已支付余款信息。

现采用结构化方法对会议预定系统进行分析与设计,获得如图1-1所示的上下文数据流图和图1-2所示的0层数据流图(不完整)。

图1-1 上下文数据流图

                                                   

图1-2 0层数据流图

【问题1】(2分)
使用说明中的词语,给出图1-1中的实体E1~E2的名称。
【问题2】(4分)
使用说明中的词语,给出图1-2中的数据存储D1~D4的名称。
【问题3】(6分)
根据说明和图中术语,补充图1-2之中缺失的数据流及其起点和终点。
【问题4】(3分)   
如果发送给客户的确认信息是通过Email系统向客户信息中的电子邮件地址进行发送的,那么需要对图1-1和1-2进行哪些修改?用150字以内文字加以说明。

答案与解析

  • 试题难度:一般
  • 知识点:软件工程>DFD与数据字典
  • 试题答案:
    【问题1】
    E1:客户 
    E2:管理员
    【问题2】
    D1:预定表 
    D2:客户信息记录表 
    D3:设施表   
    D3:设备表
    【问题3】
    预订确认信息           起点:4 确认预定                   终点:E1客户
    已支付余款凭据           起点:E1 客户                     终点: 7 支付余款
    预定信息                   起点:D1  预定信息               终点:6 要求付款
    预定客户信息           起点:D2  客户记录               终点:6 要求付款
    客户信息                   起点:D2   客户记录              终点: 4确认预定
    需变更的客户信息    起点: D2  客户记录              终点:5变更预定
    【问题4】

    图1-1中:添加外部实体“Email系统”,然后将临时预订/预订/变更确认信息 的终点更改为 “Email系统”
    图1-2中:添加外部实体“Email系统”,将数据流“临时预定确认信息”、“预定确认信息”、“变更确认信息”、数据流的终点改为新的外部实体“Email系统”。

  • 试题解析:

    本题考查采用结构化方法进行系统分析与设计,主要考查数据流图(DFD)的应用,是比较传统的题目,考点与往年类似,要求考生细心分析题目中所描述的内容。
    面向数据流建模是目前仍然被广泛使用的结构化分析与设计的方法之一,而DFD是面向数据流建模的重要工具,是一种便于用户理解、分析系统数据的图形化建模工具,是系统逻辑模型的重要组成部分。DFD将系统建模成“输入—加工(处理)—输出”的模型,即流入软件的数据对象、经由加工的转换、最后以结果数据对象的形式流出软件,并采用分层的方式加以表示。
    上下文DFD(顶层DFD)通常用来确定系统边界,将待开发系统看作一个大的加工(处理)。然后根据系统从哪些外部实体接收数据流,以及系统将数据流发送到哪些外部实体,建模出的上下图文中只有唯一的一个加工和一些外部实体,以及这两者之间的输入输出数据流。0层DFD在上下文确定的系统外部实体以及与外部实体的输入输出数据流的基础上,将上下文DFD中的加工分解成多个加工,识别这些加工的输入输出数据流,使得所有上下文DFD中的输入数据流,经过这些加工之后变成上下文DFD的输出数据流。根据0层DFD中加工的复杂程度进一步建模加工的内容。
    在建分层DFD时,根据需求情况可以将数据存储建模在不同层次的DFD中,注意要在绘制下层数据流图时要保持父图与子图平衡。父图中某个加工的输入输出数据流必须要与它的子图的输入输出数据流在数量和名字上相同,或者父图中的一个输入(或输出)数据流应对应于子图中几个输入(或输出)数据流,而子图中的一个输入(或输出)数据流对应于子图中几个输入(或输出)数据流,而子图中组成这些数据流的数据项全体正好是父图中的这一条数据流。
    【问题1】
    本题考查上下文DFD,要求确定外部实体。在上下文DFD中,系统名称作为唯一加工的名称,外部实现和该唯一加工之间有输入输出数据流。通过考查系统的主要功能,不难发现,系统中涉及到客户和会议中心管理员,没有提到其他与系统交互的外部实体。根据描述(1)“客户提交预定请求后”,(2)“会议中心管理员收到客户预定请求的通知之后,提交确认”、“根据客户记录给客户发送临时预定确认信息和支付定金要求”等信息,对照图1-1,从而即可确定E1为“客户”实体,E2为“管理员”实体。
    【问题2】
    本题要求确定图1-2所示的0层数据流图中的数据存储。重点分析说明与数据存储有关的描述。根据(1)“客户提交预定请求后,检查预定表”,“系统生成新临时预定存入预定表,并对新客户创建一条客户信息记录加以保存”,可知D1为预定表、D2为客户表;根据“会议中心提供举办会议的场地设施和各种设备”,(3)“根据临时预定或变更预定的设备和设备需求,分配所需设备(均能满足用户要求)和设施,更新相应的表和预定表”,“分配设施和设备”可知D3和D4分别为场地(设施)表和设备表。
    【问题3】
    本问题要求补充缺失的数据流及其起点和终点。
    对照图1-1和图1-2的输入、输出流数据,数量不同,考查图1-1中从加工“会议预定系统”输出至E1的数据流,有“临时预定/预定/变更确认信息”,从图1-2中从加工输出至E1的数据流“临时预定确认信息”和“变更预定确认信息”,但缺少了其中一条数据流“预定确认信息”。
    另外,图中1-1中有“付款凭据”,图1-2中没有“付款凭据”而只有“已支付定金凭据”,没有针对说明(7)中“管理员收到客户余款支付的通知后”中的“支付余款凭据”。上述两条数据的遗失,使父图和子图数据流没有达到平衡。所以需要确定这两条数据流或者其分解的数据流的起点或终点。
    考查说明中的功能,先考查“确认预定”,功能(4)中“给客户发送预定确认信息”,对照1-2,加工4没有到实体E1客户的“预定确认信息”数据流;功能(7)中“管理员收到客户余款支付的通知后”,对照图1-2,加工7没有从实体E1客户输入的数据流“余款支付凭据”。图中“余款支付凭据”数据流是上下文数据流图中数据流“支付凭据”的分解,与另一条分解出的数据流“已支付定金凭据”对照,改名为“已支付余款凭据”。
    下面再仔细核对说明和图1-2之间是否还有遗失的数据流。
    不难发现,功能(4)中“根据客户记录给客户发送预定确认信息”,而图1-2中加工4从D1预定表中读取预定信息,并没有读取客户信息,所以,此处遗失了数据流“客户记录”,起点是D2客户表,终点是加工4确认预定;功能(5)中“管理员确认客户变更后,根据客户记录给客户发送确认信息”,而图1-2中加工5并没有所根据的“客户记录”输入数据流,所以,此处遗失了数据流“客户记录”,起点是D2客户表,终点是加工5变更预定;功能(6)中“更加客户记录给满足条件的客户发送支付余款要求”,而图1-2中加工6并没有所根据的“客户记录”输入数据流,所以,此处遗失了数据流“客户记录”,起点是D2客户表,终点是加工6要求预定。
    继续核对说明和图1-2,不难发现,功能(6)中“管理员从预定表中查询距预定的会议时间两周内的预定”,而图1-2中没有从D1预定表到加工6的输入流,所以,此处遗失了数据流“距预定会议时间两周内的预定”,其起点是D1预定表,终点是加工6要求付款。
    【问题4】
    DFD中,外部实体可以是用户,也可以是与本系统交互的其他系统。如果某功能交互的是外部系统(在本题中是Email系统),则本系统需要将发送给客户的确认信息发送给Email系统。然后由第三方Email系统向客户发送邮件,此时第三方Email系统即为外部实体,而非本系统内部加工,因此需要对图1-1和图1-2进行修改,添加外部实体“Email系统”,并将数据流确认信息的重点全部改成Email系统。即将数据流“临时预定确认信息”、“预定确认信息”、“变更确认信息”、数据流的终点改为新的外部实体“Email系统”。

第 2 题

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

【说明】
某单位公用车辆后勤服务部门数据库的部分关系模式如下:   
驾驶员:EMP(Eno,Ename, Age, Sex, telephone),各属性分别表示驾驶员工号、姓名、年龄、性别和电话号码;    
车辆:CAR(Cno,Brand,Capacity),各属性分别表示汽车车牌号、品牌名和排量;
调度:SCHEDULE(Sno,Eno,Cno,StartTime, Endtime),各属性分别表示调度号、驾驶员工号、汽车车牌号、发车时间和收车时间。
奖金:BONUS(Eno,Year,Month,Amount),各属性分别表示驾驶员工号、年、月和当月的奖金数量。
有关车辆调度的相关说明如下:

公车的行驶时间只能在工作时间内,因此规定调度表中每天安排发车的时间在上午07:00:00至下午18:00:00范围内。(

【问题1】(4分)
请将下面创建调度关系的SQL语句的空缺部分补充完整,要求指定关系的主码、外码,以及调度表中每天安排发车的时间在上午07:00:00至下午18:00:00范围内的约束(由函数
Time Get_time(DATETIME StartTime)返回出车的时间)。
CREATE TABLE SCHEDULE(
Sno CHAR(10),
Eno CHAR(10)       (a)      ,
Cno CHAR(8)        (b)      ,
StartTime DATETIME        (c)     ,
EndTime DATETIME,
PRIMARY KEY          (d)       );
【问题2】(6分)
(1)创建所有'奥迪'品牌汽车的调度信息的视图AudiSCHEDULE,属性有Eno、Ename、Cno、Brand、StartTime和EndTime,请将下面SQL语句的空缺部分补充完整。
CREATE            (e)      
AS
SELECT  EMP,Eno,Ename, CAR,Cno,Brand, StartTime, EndTime
FROM EMP,CAR, SCHEDULE
WHERE            (f)        
(2)驾驶员的奖金在收车时间写入时,由出车时间段自动计算,并用触发器来实现奖金的自动维护,函数float Bonus_value(DATETIME StartTime, DATETIME EndTime)依据发车时间和收车时间来计算本次出车的奖金。系统在每月初自动增加一条该员工的当月奖金记录,初始金额为零。请将下面SQL语句的空缺部分补充完整。
CREATE    (g)     Bonus_TRG  AFTER      (h)        ON SCHEDULE
REFERENCING new row AS nrow
FOR EACH ROW
BEGIN
UPDATE BONUS
SET         (i)         
WHERE     (j)     AND   Year=Get_Year(nrow.StartTime)
AND Month= Get_Month(nrow.StartTime) ;
END
【问题3】(5分)
请将下面SQL语句的空缺郜分补充完整。
(1)查询调度次数最多的汽车车牌号及其品牌。
SELECT  CAR.Cno,Brand
FROM  CAR, SCHEDULE
WHERE  CAR.Cno =SCHEDULE.Cno
GROUP BY      (k)      
HAVING       (l)       (SELECT  COUNT(*)
FROM SCHEDULE
CROUP BY Cno);
(2)查询所有在调度表中没有安排过“大金龙”品牌车辆的驾驶员工号和姓名。
SELECT Eno,Ename
FROM EMP
WHERE Eno          (m)     (
SELECT Eno
FROM        (n)    
WHERE       (o)       
AND  brand= ‘大金龙'); **答案与解析** - 试题难度:一般 - 知识点:SQL语言>SELECT语句 - 试题答案:
【问题1】(4分)
(a)REFERENCES Emp(Eno)
(b)REFERENCES Car(Cno)
(c)CHECK(Get_time(StartTime)>=”07:00:00“ AND Get_time(StartTime)=<”18:00:00“)
(d)(Sno)
【问题2】(6分)
(e)View AduiSCHEDULE
(f)Emp.Eno=SCHEDULE.Eno AND SCHEDULE.Cno=Car.Cno AND Car.Brand=’奥迪’
(g)TRIGGER
(h)UPDATE OF EndTime
(i)Amount=Amount+Bonus_Value(nrow.StartTime,nrow.EndTime)
(j)Eno=nrow.Eno
【问题3】(5分)
(k)Car.Cno,Brand
(l)COUNT(*)>=ALL
(m)NOT IN
(n)SCHEDULE,CAR
(o)SCHEDULE.Cno=CAR.Cno - 试题解析:

本题考查SQL语句的基本语法与结构知识。
此类题目要求考生掌握SQL语句的剧本语法和结构,认真阅读题目给出的关系模式,针对题目的要求具体分析并解答,本试题已经给出了4个关系模式,需要分析每个实体的属性特征及实体之间的联系,补充完整SQL语句。
【问题1】
由题目说明可知Sno属性是SCHEDULE关系表的主键,所以在PRIMARY KEY后天的应该是Sno;Eno和Cno分别作为外键引用到EMP和CAR关系表的主键,因此需要用REFERENCES对这两个属性进行外键约束;由“每天安排发车的时间在上午07:00:00至下午18:00:00范围类”的约束,可知需要限制StartTime属性组的取值范围,通过CHECK约束来竖线。从上分析可见,完整的SQL语句如下:

CREATE TABLE SCHEDULE(
Sno CHAR(10),
Eno CHAR (10) REFERENCES EMP(Eno
Cno CHAR (8) REFERENCES CAR(Cno
StartTime DATETIME CHECK( Get time(StartTime) BETWEEN ‘07:00:00’AND ’18:00:00’)
EndTime DATETIME,
PRIMARY KEY Sno);
【问题2】
(1)创建视图需要通过CREATE VIEW语句来实现,由题目可知视图的属性有(Eno,Enanme,Cno,Brand,StartTimen,EndTime);通过公共属性Eno和Cno对使用的三个基本表进行连接;由于只创建奥迪汽车的视图,所以还要在WHERE后加入Brand=‘奥迪’的约束条件。从上分析可见,完整的SQL语句如下:
CREATE VIEW AudisCHEDULE (Eno,Enanme,Cno,Brand,StartTimen,EndTime)
AS
SELECT EMP.Eno,Ename,CAR.Cno,Brand,StartTime,EndTime
FROM EMO,CAR,SCHEDULE
WHERE EMP.Eno=SCHEDULE.Eno AND CAR.Cho=SCHEDULE.Cno AND Brand=‘奥迪’;
(2)创建触发器通过CREATR TRIGGER语句实现,要求考生掌握触发器的基本语法结构。按照问题要求,在SCHEDULE关系中更新调度信息时触发器应自动执行,故需要创建基于UPDATE类型的触发器;最后添加表连接条件。完整的触发器实现的方案如下:
CREATE  TRIGGER  Bonus_TGR  AFTER UODATE ON SCHEDULE
REFERENCING new row AS nrow
FOR EACH ROW
BEGIN
UPDATE BONUS
SET  Amount=Amount+Bonus_Value(nrow.StartTime,nrow.EndTime)  
WHERE BOUNS.Eno=nrow. Eno AND Year =Get_Year(nrow.StartTime)
AND Month=Get_Mouth(nrow.StartTime);
End
【问题3】分析
SQL查询通过SELECT语句实现。
根据问题要求,可通过子查询实现“调度次数最多的汽车车牌号及其品牌”的查询;对COUNT函数计算的结果应通过HAVING条件语句进行约束;通过Cno和Brand的组合进行分组查询。完整的SQL语句如下:
SELECT CAR.Cno, Brand
FROM CAR,SCHEDULE
WHERE CAR.Cno=SCHEDULE.Cno
GROUP BY CAR.Cno,Brand
HAVING COUNT(*)≥ALL(SELECT COUNT(*))
FROM  SCHEDULE
GROUP BY Cno);
(2)根据问题要求,需要使用嵌套查询。先将WORKS和COMPANY表进行连接。查找出所有在“安排过 ‘大金龙’品牌车辆的驾驶员”;然后在雇员表中使用“NOT IN”或者“<>ANY”查询不在前述结果里面的员工即可。完整的SQL语句如下:
SELECT Eno,Ename
FROM EMP
WHERE Eno NOT IN或<>ANY(
SELECT Eno
FROM SCHEDULE, CAR
WHERE SCHEDULE.Cno=CAR.Cno AND Brand=‘大金龙’);

第 3 题

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

【说明】

某销售公司当前的销售业务为商城实体店销售。现该公司拟开展网络销售业务,需要开发一个信息化管理系统。请根据公司现有业务及需求完成该系统的数据库设计。

【需求描述】

(1)记录公司所有员工的信息。员工信息包括工号、身份证号、姓名、性别、出生日期和电话,并只登记一部电话。

(2)记录所有商品的信息。商品信息包括商品名称、生产厂家、销售价格和商品介绍。系统内部用商品条码唯一区别每种商品。

(3)记录所有顾客的信息。顾客信息包括顾客姓名、身份证号、登录名、登录密码、和电话号码。一位顾客只能提供一个电话号码。系统自动生成唯一的顾客编号。

(4)顾客登录系统之后,在网上商城购买商品。顾客可将选购的商品置入虚拟的购物车内,购物车可长期存放顾客选购的所有商品。顾客可在购物车内选择商品、修改商品数量后生成网购订单。订单生成后,由顾客选择系统提供的备选第三方支付平台进行电子支付,支付成功后系统需要记录唯一的支付凭证编号,然后由商城根据订单进行线下配送。

(5)所有的配送商品均由仓库统一出库。为方便顾客,允许每位顾客在系统中提供多组收货地址、收货人及联系电话。一份订单所含的多个商品可能由多名分检员根据商品所在仓库信息从仓库中进行分拣操作,分拣后的商品交由配送员根据配送单上的收货地址进行配送。

(6)新设计的系统要求记录实体店的每笔销售信息,包括营业员、顾客、所售商品及其数量。

【概念模型设计】   

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

    
图3-1实体联系图

【逻辑结构设计】

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

员工(工号,身份证号,姓名,性别,出生日期,电话)

商品(商品条码,商品名称,生产厂家,销售价格,商品介绍,  (a)  

顾客(顾客编号,姓名,身份证号,登录名,登录密码,电话)

收货地点(收货ID,顾客编号,收货地址,收货人,联系电话)

购物车(顾客编号,商品条码,商品数量)

订单(订单ID,顾客编号,商品条码,商品数量,  (b)  

分检(分拣ID,分拣员工号,  (c)  ,分拣时间)  

配送(配送ID分拣ID,配送员工号,收货ID,配送时间,签收时间,签收快照)

销售(销售ID,营业员工号,顾客编号,商品条码,商品数量)

【问题1】(4分)
补充图3-1中的“配送”联系所关联的对象及联系类型。  
【问题2】(6分)
补充逻辑结构设计中的(a)、(b)和(c)三处空缺。
【问题3】(5分)
对于实体店销售,若要增加送货上门服务,由营业员在系统中下订单,与网购的订单进行后续的统一管理。请根据该需求,对图3-1进行补充,并修改订单关系模式。

答案与解析

  • 试题难度:较难
  • 知识点:数据库技术基础>E-R模型
  • 试题答案:
    【问题1】
      
    【问题2】
    (a)所在仓库(b)支付凭证(c)订单ID。
    【问题3】
    关系模式:订单(订单ID,顾客编号(FK),商品条码(FK),商品数量,销售ID(FK))。
  • 试题解析:

    本题考查数据库概念结构设计和逻辑结构设计。
    此类题目要求考生认真阅读题目中的需求描述,配合已给出的E-R图,理解概念结构设计中设计者对实体及联系的划分和组织方法,结合需求描述完成E-R图中空缺部分,并使用E-R图向关系模式的转换方法,完成逻辑结构设计。
    【问题1】
    根据所给E-R图,结合需求描述,购物车作为顾客和商品之间的联系,而订单由顾客从购物车中选择商品生成,因此将购物车这一联系当作实体,与订单实体产生联系。将联系当作实体参与另一联系,称为聚合,通常当后一联系与此联系相关时,采用这种设计方法。顾客可以从购物车中生成多个订单,一个订单只能从一个购物车里提取商品,属于一对多联系。
    根据需求描述中的“分拣后的商品交由配送员根据配送单上的收货地址进行配送。”可以知道,配送是与分拣联系相关的联系,同样的,将分拣联系进行聚合,参与配送联系,同时参与配送联系的还有配送员和地点,为多对多对多联系,语义为配送员根据分拣结果按照收货地点进行配送,与需求相符。
    【问题2】
    本小题考核E-R图向关系模式的转换。由于E-R图中没有画出实体及联系的属性,需要根据需求描述进行补充。根据需求中的“一种商品只能放在一个仓库中”和“一份订单所含的多个商品可能由多名分拣员根据商品的所在仓库信息从仓库中进行分拣操作”,可以确定“所在仓库”作为商品实体的属性,转入商品关系中。
    订单关系由E-R图中的订单实体和一对多联系网站合并而成,取一方的主码,即购物车这一联系的主码,为参与该联系的实体的主码商品条码和顾客编号,加上网购联系的属性数量,并入到订单实体转成的关系模式中。订单ID为订单实体的标识符,订单实体的其他属性需要通过需求描述中获取。根据需求“订单生成后,由顾客选择系统提供的备选第三方支付平台进行电子支付,支付成功后系统需要记录唯一的支付凭证编号”,支付凭证编号应为订单的属性,转入订单关系中。
    E-R图中的分拣联系为分拣员与订单之间的多对多联系,转换成独立的分拣关系模式,应包含分拣员实体的标识符分拣员工号和订单实体的标识符订单ID,及分拣联系的属性分拣时间。
    【问题3】
    实体店的订单是营业员根据销售结果生成的,将销售联系聚合成实体,与订单产生联系。一笔销售对应一个订单,一个订单对应一笔销售,为一对一联系。转换为关系模式时,将此联系归入订单关系,即取销售的标识符销售ID加入到订单关系模式中。

第 4 题

阅读下列说明,回答问题1至问题3,将解答填入答题纸的对应栏内。
【说明】
某小区由于建设时间久远,停车位数量无法满足所有业主的需要,为公平起见,每年进行一次抽签来决定车位分配。小区物业拟建立一个信息系统,对停车位的使用和收费进行管理。
【需求描述】
(1)小区内每套房屋可能有多名业主,一名业主也可能在小区内有多套房屋。业主信息包括业主姓名、身份证号、房号、房屋面积,其中房号不重复。
(2)所有车位都有固定的编号,且同一年度所有车位的出租费用相同,但不同年份的出租费用可能不同。
(3)所有车位都参与每年的抽签分配。每套房屋每年只能有一次抽签机会。抽中车位的业主需一次性缴纳全年的车位使用费用,且必须指定唯一的汽车使用该车位。
(4)小区车辆出入口设有车牌识别系统,可以实时识别进出的汽车车牌号。为方便门卫确认,系统还需登记汽车的品牌和颜色。
【逻辑结构设计】
根据上述需求,设计出如下关系模式:
业主(业主姓名,业主身份证号,房号,房屋面积)
车位(车位编号,房号,车牌号,汽车品牌,汽车颜色,使用年份,费用)
【问题1】(6分)
对关系“业主”,请回答以下问题:
(1)给出“业主”关系的候选键。
(2)它是否为2NF,用60字以内文字简要叙述理由。
(3)将其分解为BCNF,分解后的关系名依次为:A1,A2,...,并用下划线标示分解后的各关系模式的主键。
【问题2】(6分)
对关系“车位”,请回答以下问题:
(1)给出“车位’’关系的候选键。    
(2)它是否为3NF,用60字以内文字简要叙述理由。
(3)将其分解为BCNF,分解后的关系名依次为:B1,B2,...,并用下划线标示分解后的各关系模式的主键。
【问题3】(3分)
若临时车辆进入小区,按照进入和离开小区的时间进行收费(每小时2元)。试增加“临时停车”关系模式,用100字以内文字简要叙述解决方案。 **答案与解析** - 试题难度:一般 - 知识点:关系数据库>1NF至4NF - 试题答案:
【问题1】(6分)
(1)业主身份证号、房号
(2)不满足,存在部分函数依赖,如:业主身份证号→业主姓名,房号→房屋面积,业主姓名和房屋面积部分依赖于码(业主身份证号、房号)
(3)
A1(业主姓名,业主身份证号
A2(房号,房屋面积)
A3(业主身份证号,房号
【问题2】(6分)
(1)(车位编号,使用年份)、(房号,使用年份)或(车牌号,使用年份)。注(回答三个中任意一个得分)
(2)不满足3NF,存在部分依赖,如:车牌号→(汽车品牌、汽车颜色),对码(车位编号、房号、车牌号、使用年份)存在部分依赖
(3)
B1(车牌号,汽车品牌、汽车颜色)
B2(使用年份,费用)
B3(车位编号、房号、车牌号、使用年份
B3(车位编号、房号、车牌号、使用年份
B3(车位编号、房号、车牌号、使用年份
注:任意一个B3均正确。
【问题3】(3分)
因为需要根据进入和离开小区的时间进行收费,所以在增加的“临时停车”关系模式中值需要体现车牌号、进入时间和离开时间即可,即增加的关系模式为:
临时停车(车牌号,进入时间,离开时间)。 - 试题解析:
本问题考查候选键和第二范式。
“业主”关系的候选键为:房号,业主身份证号。
分析“业主”关系的函数依赖可知:
房号,业主身份证号→业主姓名,业主身份证号,房号,房屋面积
根据第二范式的要求:对每一个业主属性完全函数依赖于码,而根据“业主”关系的函数依赖:
房屋→房屋面积
可知,存在非主属性对候选键的部分依赖。所以,“业主”关系模式不满足于第二范式。
分解后的关系模式为:
A1(房号,业主身份证号)
A2(房号,房屋面积)
A3(业主身份证号,业主姓名)
【问题2】
本问题考查第三范式。
根据第三范式的要求:,每一个非主属性即不部分依赖于码也不传递依赖于码。

“车位”关系的候选键为:(车位编号,使用年份),(房号,使用年份)或(车牌号,使用年份)
存在非主属性“汽车品牌”(或“汽车颜色”)对候选键“车位编号,使用年份”的传递依赖:(车位编号,使用年份)→车牌号,车牌号→汽车品牌。故(车位编号,使用年份)→汽车品牌,为传递依赖。
所以,“车位”关系模式不满足第三范式。
分解后的关系模式为:
B1(使用年份,费用)
B2(车牌号,汽车品牌,汽车颜色)
B3(车位编号,使用年份,房号,车牌号)或
B3(车位编号,使用年份,房号,车牌号)或
B3(车位编号,使用年份,车牌号,房号)
【问题3】
本问题考查增加新的关系。
因为需要根据进入和离开小区的时间进行收费,所以在增加的“临时停车”关系模式中值需要体现车牌号、进入时间和离开时间即可,即增加的关系模式为:
临时停车(车牌号,进入时间,离开时间)。
需要注意的是:这三个属性是必须有的,也可用出现其他属性。

### 第 5 题
阅读下列说明,回答问题1和问题2,将解答填入答题纸的对应栏内。
【说明】
某图书馆的图书借还业务使用如下关系模式:
书目(ISBN,书名,出版社,在库数量)
图书(书号,ISBN,当前位置)
其中在库数量为当前书目可借出的图书的数量,每本图书入库后都会有当前位置,借出后当前位置字段改为空值。每一条书目信息对应多本相同的图书,每一本图书只能对应一条书目。
借还书业务的基本流程如下描述:
(1)读者根据书名查询书目,当前书目的在库数量大于0时可借阅。
(2)读者借出一本图书时,进行出库操作:根据该图书的书号将该图书的当前位置字段值改为空值,并根据其ISBN号将对应书目的在库数量减1。
(3)读者归还一本图书时,进行入库操作:系统根据当前书架的空余位置自动生成该本书的存放位置,并根据该图书的书号将其当前位置字段值改为生成的存放位置,然后将对应书目的在库数量加1。
(4)借还书时,逐一扫描每本图书的书号并进行出、入库操作。
【问题1】(7分)
引入两个伪指令:a= R(X)表示将在库数量X值读入到变量a中;W(a,X)表示将变量a的值写入到在库数量X中。入库操作用下标I表示,出库操作用下标O表示。
将出库和入库操作分别定义为两个事务,针对并发序列:ao=Ro(X),aI=RI(X),ao=ao-1,Wo(ao,X),aI-aI+1,WI(aI,X)。其中变量 aI和 ao分别代表入库事务和出库事务中的局部变量。
(1)假设当前X的值为3,则执行完上述并发序列的伪指令后,X的值是多少?简述产生这一错误的原因(100字以内)。
(2)为了解决上述问题,引入独占锁指令XLock(X)对数据X进行加锁,解锁指令Unlock(X)两对数据X进行解锁。入库操作用下标I表示,如XLockI(X);出库操作用下标O表示,如Unlocko(X)。请根据上述的并发序列,给出一种可能的执行序列,使其满足2PL协议。
【问题2】(8分)
下面是用SQL实现的出入库业务程序的一部分,请补全空缺处的代码。
CREATE PROCEDURE IOstack(IN BookNo VARCHAR(20), IN Amount INT){
       //输入合法性验证
       if not(Amount=1 or Amount=-1) return -1;
       //修改图书表当前位置
       UPDATE 图书 SET 当前位置=GetPos(BookNo,Amount)//系统生成
       WHERE     (a)   ;
       if error then {ROLLBACK;return -2;}
       //修改在库数量
       UPDATE 书目 SET 在库数量=    (b)     
       WHERE EXISTS(
                    SELECT  *
                    FROM 图书
                    WHERE  书号=BookNo AND
                               (c)        );
       if error then {ROLLBACK;return -3;}
          (d)   ;
       return 0;
} **答案与解析** - 试题难度:较难 - 知识点:事务管理>并发操作设计 - 试题答案:
【问题1】(7分)
(1)4,发生了丢失更新,入库事务更新操作覆盖出库事务更新操作

 
【问题2】(8分)
(a)书号=BookNo
(b)在库数量+Amount
(c)图书.ISBN=书目.ISBN 
(d)COMMIT
- 试题解析:

(1)根据问题中给出的并发序列“aO=RO(X),aI=RI(X),aO=aO-1,WO(aO,X),aI=aI+1 ,WI(aI,X)”及指令的说明,该序列为一个入库事务和一个出库事务的并发调度。X的当前值为3,执行完“aO=RO(X),aI=RI(X)”后,变量aO和aI的值均为3;执行完“aO=aO-1,WO(aO,X)”后,X的值被改为2;执行完“aI=aI+1 ,WI(aI,X)”后X的值被改为4,即并发序列执行完后X的值。
这两个事务分别是同一书目下两本书的出库和入库操作。根据事务并发正确性的判定,其正确的必要条件是与某一次串行的结果相同。在X当前值为3的情况下,出库一本书和入库一本书,两个事务两种串行方式下,其结果都为3。因而题目给出的并发序列的执行结果是错误的。
错误原因在于出库事务的指令“ WO(aO,X)”写入X的值后,被入库事务的指令“ WI(aI,X)”所覆盖,即丢失修改错误,出库事务的修改丢失了。
(2)根据2PL协议的规定,在修改数据前需对该数据加独占锁,前提是在该数据没有其他事务所加的锁,否则只能等待其他事务释放锁后再加锁。题目要求只加独占锁,因此出库事务的第一条语句“aO=RO(X)”前应有加锁语句“XLock1(X)”;入库事务第一条指令“aI=RI(X)”之前应有加锁语句“XLockI(X)””,但此时X上已有出库事务上的锁,故入库事务加锁被拒绝,只能等待,到出库事务释放锁之后才能加上锁,入库事务的后续指令才能得以执行。
【问题2】
本问题将出入库两项操作使用同一程序完成,通过形参Amount的值(1表示入库,-1表示出库)进行区别。空缺(a)处应根据BookNo值确定要修改的图书记录。空缺(b)处为新的在库数量值,将形参Amount的值累加到在库数量上即可。空缺(c)处要通过当前图书记录确定要修改的数目记录。空缺(d)处应为提交指令。

results matching ""

    No results matching ""