image

编辑人: 未来可期

calendar2025-07-07

message8

visits728

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

一、问答题

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

[说明]

学校欲开发一学生跟踪系统, 以更自动化、更全面地对学生在校情况(到课情况和健康状态等相关信息)进行管理和追踪,使家长能及时了解子女的到课情况和健康状态,并在有健康问题时及时与医护机构对接。该系统的主要功能是:

(1)采集学生状态。通过学生卡传感器,采集学生心率、体温(摄氏度)等健康指标及其所在位置等信息并记录。每张学生卡有唯一的标识 (ID) 与一个学生对应。

(2)健康状态告警。在学生健康状态出现问题时,系统向班主任、家长和医护机构健康服务系统发出健康状态警告,由医护机构健康服务系统通知相关医生进行处理。

(3) 到课检查。综合比对学生状态、课表以及所处校园场所之间的信息对学生到课情况进行判定。对旷课学生,向其家长和班主任发送旷课警告。

(4)在校情况汇总。定期汇总在校情况,并将报告发送给家长和班主任。

(5)家长注册。家长注册使用该系统,指定自己子女,经学校管理人员审核后,向家长发送注册结果。

(6)基础信息管理。学校管理人员对学生及其所用学生卡和班主任、课表(班级、上课时间及场所等)、校园场所(名称和所在位置区域)等基础信息进行管理,对家长注册申请进行审核,将家长ID加入学生信息记录中使家长与其子女进行关联,一个学生至少有一个家长,可以有多个家长。课表信息包括班级、班主任、时间和位置等。

现采用结构化方法对学生跟踪系统进行分析与设计,获得如图1-1所示的上下文数据流图和图1-2所示的0层数据流图。


[问题1] (5分)

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

[问题2] (4分)

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

[问题3] (3分)

根据说明和图中术语,补充图1-2 中缺失的数据流及其起点和终点(三条即可)。

[问题4] (3分)

根据说明中术语,说明图1-1 中数据流“学生状态”和“学生信息”的组成。

参考答案:

1、E1:学生,E2:学校管理人员,E3:班主任,E4:家长,E5:医护机构。

2、D1:学生状态信息,D2:学生信息,D3:校园场所信息,D4:课表。

3、D4→P3 课表;D3→P3 校园场所;P6→D2 注册信息。

4、要满足上述系统需求,并有有效管理查询数据。

(1)学生状态的组成为:学生编号、学生卡号、各种健康状态信息、医护机构编号

(2)学生信息的组成为:学生基本信息、学生卡号、班主任编号、家长编号(一名主要联系人)。

解析:

问题一:根据题目描述和图1-1上下文数据流图,可以确定实体E1~E5的名称。其中,E1对应"学生",E2对应"学校管理人员",E3对应"班主任",E4对应"家长",E5对应"医护机构"。这些实体在系统中扮演着不同的角色,共同参与到学生跟踪系统的运作中。
问题二:根据题目描述和图1-2的0层数据流图,可以确定数据存储D1~D4的名称。其中,D1为"学生状态信息",用于存储通过学生卡传感器采集的学生健康指标和位置信息;D2为"学生信息",包含学生的基本信息、卡号、班主任和家长编号等信息;D3为"校园场所信息",包含校园内各场所的名称和位置区域等信息;D4为"课表",包含班级、班主任、时间和地点等信息。
问题三:根据题目描述和图1-2的数据流图,可以补全缺失的数据流及其起点和终点。其中,数据流D4→P3表示课表信息被传输至学生状态信息记录;数据流D3→P3表示校园场所信息被传输至学生状态信息记录;数据流P6→D2表示家长注册信息被传输至学生信息记录。这些数据流反映了系统中信息的流动和处理过程。
问题四:根据题目描述,可以描述图1-1中数据流"学生状态"和"学生信息"的组成。"学生状态"数据流主要包括学生的健康指标(如心率、体温等)和位置信息,这些信息通过学生卡传感器采集并记录。"学生信息"数据流则包括学生的基本信息、学生卡号、班主任编号以及主要联系人的家长编号等信息,这些信息用于标识和追踪学生的在校情况。

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

[说明]

禁创业孵化基地管理若干孵化公司和创业公司,为规范管理创业项目投资业务,需要开发一个信息系统。请根据下述需求描述完成该系统的数据库设计。

[需求描述]

(1)记录孵化公司和创业公司的信息。孵化公司信息包括公司代码、公司名称、法人代表名称、注册地址和一个电话:创业公司信息包括公司代码、公司名称和一个电话。

孵化公司和创业公司的公司代码编码不同。

(2)统一管理孵化公司和创业公司的员工。员工信息包括工号、身份证号、姓名、

性别、所属公司代码和一个手机号,工号唯一标识每位员工。

(3)记录投资方信息,投资方信息包括投资方编号、投资方名称和-个电话。

(4)投资方和创业公司之间依靠孵化公司牵线建立创业项目合作关系,具体实施由孵化公司的一位员工负责协调投资方和创业公司的一个创业项目。一个创业项目只属于个创业公司,但可以接受若干投资方的投资。创业项目信息包括项目编号、创业公司代码、

投资方编号和孵化公司员工工号。

]概念模型设计]

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

[逻辑结构设计]

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

孵化公司(公司代码,公司名称, 法人代表名称,注册地址,电话)

创业公司(公司代码,公司名称,电话)

员工(工号,身份证号,姓名,性别,(a) ,手机号)

投资方(投资方编号、投资方名称,电话)

项目(项目编号,创业公司代码(b),孵化公司员工工号)

[问题1](5分)

根据问题描述,补充图2-1的实体联系图。

[问题2] (4分)

补充逻辑结构设计结果中的(a)、 (b)两处空峡及完整性约束关系。

[问题3](6分)

若创业项目的信息还需要包括投资额和投资时间,那么:

(1)是否需要增加新的实体来存储投资额和投资时间?

(2)如果增加新的实体,请给出新实体的关系模式,并对图2-1进行补充,如果不需要增加新的实体,请将“投资额”和“投资时间"两个属性补充井连线到图2-1合适的对象上,并对变化的关系模式进行修改。

参考答案:

1、补充完整的ER图为

2、a:孵化公司代码,创业公司代码,     b:投资方编号

3、不需要创建新实体,修改项目关系模式为:

项目(项目编号,创业公司代码,投资方编号,孵化公司员工工号,投资额,投资时间)


解析:

问题一:根据题目描述的需求,需要补充完整的实体联系图。实体包括孵化公司、创业公司、员工、投资方和项目,它们之间的关系需要明确,例如孵化公司和创业公司之间的合作关系,员工与孵化公司和创业公司的关联关系等。

问题二:逻辑结构设计中的(a)、(b)两处空缺需要填写的是关联关系的属性。根据题目描述,可以知道(a)处应填写“所属孵化公司代码”,表示员工所属的孵化公司的代码;(b)处应填写“投资方编号”,表示该项目对应的投资方的编号。同时,需要确定各实体之间的完整性约束关系,如外键约束等。

问题三:关于是否增加新实体来存储投资额和投资时间的问题,根据题目描述,不需要增加新的实体,可以将“投资额”和“投资时间”属性添加到“项目”关系模式中。在图2-1中,将这两个属性连接到“项目”实体上即可。

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

[说明]

某快递公司对每个发出的快递进行跟踪管理,需要建立一个快递跟踪管理系统,对该公司承接的快递业务进行有效管理。

[需求描述]

1.公司在每个城市的每个街道都设有快递站点。这些站点负责快递的接收和投递。站点信息包括站点地址、站点名称、责任人、一部联系电话、开始营业时间、结束营业时间。

每个站点每天的营业时间相同。每个站点只能有一个责任人。

2.系统内需记录快递员、发件人的基本信息。这些信息包括姓名、身份证号、- 个联系地址、-部联系电话。快递站点的责任人由快递员兼任,且每个快递站点只有一个责任人。每个快递员只负责一个快递站点的揽件和快递派送业务。发件人和快递员需实名认证。

3.快递需要提供详实的信息,包括发件人姓名、身份证号、部发件人电话号码、 发件人地址、收件站点、收件人姓名、收件地址、一部收件人电话、 投递时间、物品类别、物品名称及物品价值。每个发件人和收件人在系统里只能登记个电话和地址。

4.每个快递员接手一份快递后,需在系统中录入每个快递的当前状态信息,包括当前位置、收到时间、当前快递员和上一段快递员。状态信息包括待揽件、投递中、已签收。

如果快递已签收,应记录签收人姓名及一个联系电话。每个快递在一个站点只能对应一个负责的快递员。

注:试题不需要考虑快递退回的相关问题。

[逻辑结构设计]

根据上述需求,设计出如下关系模式:

快递(快递编号,收件人姓名,收件地址编号,收件人电话,投递时间,物品类别,物品名称,物品价值),其中收件地址编号是地址实体的地址编号。

快递员(姓名,身份证号,电话号码,联系地址编号,工作站点编号)

快递站点(站点编号,站点名称,责任人编号,站点地址编号,开始营业时间,联系电话,结束营业时间)。责任人编号是负责该站点的快递员的身份证号。

地址(地址编号,所在省,所在市,所在街道,其他), 其他信息是需补充的地址信息。

快递投递(快递编号,快递员编号,发件人姓名,发件人身份证号,发件人电话号码,发件人地址编号),其中发件人地址编号为发件人地址的地址编号,揽件站点编号为接收

该快递的站点编号。

快递跟踪(快递编号,当前快递员编号,上一 段快递 员编号,当前状态,收到时间,当前站点编号)。

快递签收(快递编号,签收人姓名,签收人联系电话)。

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

[问题1] (6分)

对关系“快递投递”,请回答以下问题:

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

(2)它是否为3NF,用100字以内文字简要叙述理由。

(3)将其分解为BCNF,分解后的关系名依次为:快递投递1,快递投递2,.并用下划线标示分解后各关系模式的主键。

[问题2] (6分)

对关系“快递跟踪”,请回答以下问题:

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

(2)它是否为2NF,用100字以内文字简要叙述理由。

(3)将其分解为BCNF,分解后的关系名依次为:快递跟踪1,快递跟踪2, ..并用下划线标示分解后各关系模式的主键。

[问题3] (3分)

快递公司会根据快递物品和距离收取快递费,每件快递需由发件人或收件人支付快递费给公司。同一个发件人同时发起多个快递,必须分别支付。快递公司提供预支付和到付两种支付方式。为了统计快递费的支付情况(详细金额和时间),试增加“快递费支付”关系模式,用100字以内文字简要叙述解决方案。

参考答案:

[问题1]

(1)快递编号

(2)不属于3NF,存在非主属性’发件人姓名’对键的传递函数依赖。即

快递编号→发件人身份证号,发件人身份证号→发件人姓名

(3)分解为BCNF

快递投递1(快递编号,快递员编号,发件人身份证号)

快递投递2(发件人身份证号,发件人姓名,发件人电话号码,发件人地址编号)

[问题2]

(1)键有:(快递编号,当前快递员编号)、(快递编号,当前站点编号),(快递编号,收到时间)

(2)达到了2NF,不存在非主属性对码的部分函数依赖。

(3)分解为BCNF

快递跟踪1(快递编号,当前快递员编号,上一段快递员编号,当前状态,收到时间)

快递跟踪1(快递编号,当前快递员编号)

[问题3]

建立如下快递费支付关系模式。

快递费支付(快递编号,快递费,支付方式,支付时间,支付渠道)

“快递费支付”通过连接“快递”、“快递投递”可获得发件人、发件地址、收件人、收件地址相关信息,进而可以通过距离计算快递费。支付方式可选择:预付、到付,预付由发件人付款,到付由收件人付款;支付渠道表示现金或第三方放支付平台。

解析:

问题1:对于关系"快递投递",首先确定其候选键。考虑到每个快递都是唯一的,且发件人的身份证号是唯一的,因此候选键包括快递编号和发件人身份证号。然后判断其是否满足3NF,由于存在非主属性对键的传递函数依赖,所以不满足。最后将其分解为BCNF范式,得到两个关系模式。

问题2:对于关系"快递跟踪",首先列举出所有的候选键,考虑到快递员、站点和收到时间都可能影响快递的跟踪信息,因此有多个可能的候选键。然后判断其是否满足2NF,由于不存在非主属性对码的部分函数依赖,所以满足。最后将其分解为BCNF范式。

问题3:为了统计快递费的支付情况,需要增加一个"快递费支付"关系模式。该模式应包含快递编号、快递费、支付方式、支付时间和支付渠道等属性。通过连接其他关系模式,可以获得发件人和收件人的信息,进而计算快递费。支付方式可以是预付或到付,并可以记录支付时间和支付渠道。

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

[说明]

某学生信息管理系统的部分数据库关系模式如下:

学生: Student ( stumo, stuame, stuage, susex, schno),各属性分别表示学生的学号、姓名、年龄、性别,以及学生所属学院的编号;

学院: School ( schno, schname, schstunum),各属性分别表示学院的编号、名称及学生人数:

俱乐部: Club ( clubno, clubname, clubyear, clubloc ),各属性分别表示俱乐部的编号、名称、成立年份和活动地点;

参加: JoinClub ( stuno. clubno, joinyear),各属性分别表示学号、俱乐部编号,以及学生加入俱乐部的年份。

有关关系模式的说明如下:

(1)学生的性别取值为‘F’和‘M’(F表示女性,M表示男性)。

(2)删除一个学院的记录时,通过外键约束级联删除该学院的所有学生记录。

(3)学院表中的学生人数值与学生表中的实际人数要完全保持一-致。也就是说,当学生表中增减记录时,就要自动修改相应学院的人数。

根据以上描述,回答下列问题,将SQL语句的空缺部分补充完整。

[问题1] (4分)

请将下面创建学生表的SQL语句补充完整,要求定义实体完整性约束、参照完整性约束,以及其他完整性约束。

CREATE TABLE Student (

stuno CHAR(11)2_ (a),

stuname VARCHAR(20),

stuage SMALLINT,

stusex CHAR(1)

(b) ,

schno CHAR(3)_ (c) ON DELETE (d) );

[问题2] (5分)

创建俱乐部人数视图,能统计每个俱乐部已加入学生的人数,属性有cubmo clnam和clubstunum。对于暂时没有学生参加的俱乐部,其人数为0。

此视图的创建语句如下,请补全。

CREATE VIEW cs. NUMBER (clubno, clubname, clubstum )AS

SELECT JoinClub.clubno, (e) ,(f)

FROM JoinClub, Club

WHERE JoinClub.clubno = Club.clubno

(g) BY JoinClub.clubno

SELECT clubno, clubname, 0

FROM Club

WHERE clubno NOT IN

( SELECT DISTINCT clubno FROM_ (i) );

[问题3] (4分)

每当系统中新加或删除一一个学生,就需要自动修改相应学院的人数,以便保持系统中学生,人数的完整性与一致性。此功能由下面的触发器实现,请补全。

CREATE TRIGGER STU NUM TRG

AFTER INSERT OR DELETE ON (i)

REFERENCING new row AS nrow, old row AS orow

FOR EACH (k)

BEGIN

IF INSERTING THEN

UPDATE School (1) ;

END IF;

IF DELETING THEN

UPDATE School (m);

END IF;

END;

[问题4] (2分)

查询年龄小于19岁的学生的学号、姓名及所属学院名,要求输出结果把同一个学院

的学生排在一起。此功能由下面的SQL语句实现,请补全。

SELECT stuno, stuname, schname

FROM Student, School

WHERE Student. schno = School.schno

AND stuage < 19

(n) BY (o) ;

参考答案:

A:primary key

B:check(stusex in(‘F’,’M’))

C:foreign key references school(schno)

D:cascade

E:clubname

F:count(stuno)

G:group

H:union

I:Joinclub

J:student

K:row

L:set schstunum=schstunum+1 where schno=nrow.schno

M:set schstunum=schstunum-1 where schno=orow.schno

N:order

O:school.schno

解析:

问题一解析:创建学生表时,需要定义主键(primary key)、检查性别是否为’F’或’M’的约束(check)、外键约束(foreign key references)以及级联删除约束(cascade)。因此,空缺部分应填入相应的关键词。问题二解析:创建俱乐部人数视图时,需要统计每个俱乐部的已加入学生人数。首先选择俱乐部编号和学生姓名,然后按俱乐部编号分组,并对每个俱乐部的加入学生人数进行计数。对于没有学生的俱乐部,其人数为0。因此,空缺部分应填入相应的SQL语句和关键词。问题三解析:创建触发器时,需要指定触发器的触发时机(AFTER INSERT OR DELETE)、引用的新旧行以及触发器的执行条件。每当系统中新加或删除一个学生时,需要自动修改相应学院的人数。因此,空缺部分应填入相应的SQL语句和关键词。问题四解析:查询年龄小于19岁的学生的学号、姓名及所属学院名时,需要按照学院进行排序。因此,空缺部分应填入排序的关键词和排序依据的字段。

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

[说明]

某商业银行账务系统的部分关系模式如下:

账户表: Account (ano, aname, balance), 其中属性含义分别为:账户号码,账户名称和账户余额。

交易明细表: TranDetails (tno, ano, time, toptr, amount, ttype), 其中属性分别为:

交易编号,账户号码,交易时间,交易操作员,交易金额,交易类型(1-存款,2-取款,3-转账)。

余额汇总表: AcctSums (adate, atime, allamt), 其中属性分别为:汇总日期,汇总时间,总余额。

常见的交易规则如下:

存/取款交易:操作员核对用户相关信息,在系统上执行存/取款交易。账务系统增加/减少该账户余额,并在交易明细表中增加一条存/取款交易明细。

转账交易:操作员核对用户相关信息,核对转账交易账户信息,在系统上执行转账交易。账务系统对转出账户减少其账户余额,对转入账户增加其账户余额,并在交易明细表

中增加一条转账交易明细。

余额汇总交易:将账户表中所有账户余额累计汇总。

假定当前账户表中的数据记录如表5-1所示。

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

[问题1] (3分)

假设在正常交易时间,账户上在进行相应存取款或转账操作时,要执行余额汇总交易。

下面是用SQL实现的余额汇总程序,请补全空缺处的代码。要求(不考虑并发性能)在保证余额汇总交易正确性的前提下,不能影响其他存取款或转账交易的正确性。

CREATE PROCEDURE AcctSum(OUT: Amts DOUBLE)

BEGIN

SET TRANSACTION ISOLATION LEVEL (a) ;

BEGIN TRANSACTION;

SELECT sum(balance) INTO :Amts FROM Accounts;

if rror/l/ error是由DBMS提供的上-句SQL的执行状态

BEGIN

ROLLBACK;

return -2;

END

INSERT INTO AcctSums

VALUES ( getDATE(,getTIME(),_ (b) );

ifrror1/error是由DBMS提供的上一句SQL的执行状态

BEGIN

ROLLBACK;

return -3;

END

END

[问题2] (8 分)

引入排它锁指令LX0)和解锁指令UX0,要求满足两段锁协议和提交读隔离级别。假

设在进行余额汇总交易的同时,发生了一笔转账交易。从101账户转给104账户400元。

这两笔事务的调度如表5-2所示。

1)请补全表中的空缺处(a)、(b);

(2)上述调度结束后,汇总得到的总余额是多少?

(3)该数据是否正确?请说明原因。

[问题3] (4分)

在[问题2]的基础上,引入共享锁指令LSO和解锁指令USO。对[问题2]中的调

度进行重写,要求满足两段锁协议。两个事务执行的某种调度顺序如表5-3所示,该调度

顺序使得汇总事务和转账事务形成死锁。请补全表中的空缺处(a)、(b)。

参考答案:

1、a:  serializable,b:amts,c:commit

2、(1)a:等待,b:UX(101),UX(104)

(2)总额=500+350+550+600=2000

 (3)汇总不正确,原因是读提交虽然避免了读脏数据,但是不能避免不能重复读或读幻影的问题,这里是读幻影。

3、a:LX(101),b:LX(104)

解析:

问题1要求补全SQL余额汇总程序中的空缺代码。为了保证交易的正确性和独立性,需要设置事务的隔离级别为最高,即序列化(serializable)。在获取账户余额汇总值时,需要将结果插入到AcctSums表中。因此,第一个空填"serializable",第二个空填"Amts"。

问题2描述了在余额汇总交易的同时发生了一笔转账交易的情况。在调度过程中,转账事务需要等待汇总事务完成,因此填写"等待"。转账完成后需要解锁涉及的账户,因此填写"UX(101), UX(104)"。汇总得到的总余额是账户余额的累加。但由于并发性能的影响,汇总结果可能不准确。因此,虽然采用了提交读隔离级别可以避免读脏数据,但汇总结果仍然可能不正确。

问题3描述了引入共享锁指令LSO和解锁指令USO后的情况。为了避免死锁,转账事务需要先锁定涉及的账户,然后再执行其他操作。因此,空a填写"LX(101)“,空b填写"LX(104)”。

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

创作类型:
原创

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

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