数据库系统工程师-2015年案例分析真题解析【下篇】

四季读书网 11 0
数据库系统工程师-2015年案例分析真题解析【下篇】
【第 1 】(题型:设计题)
题目:
某大学为进一步推进无纸化考试,欲开发一考试系统。系统管理员能够创建包括专业方向、课程编号、任课教师等相关考试基础信息,教师和学生进行考试相关的工作。系统与考试有关的主要功能如下。
(1)考试设置。教师制定试题(题目和答案),制定考试说明、考试时间和提醒时间等考试信息,录入参加考试的学生信息,并分别进行存储。
(2)显示并接收解答。根据教师设定的考试信息,在考试有效时间内向学生显示考试说明和题目,根据设定的考试提醒时间进行提醒,并接收学生的解答。
(3)处理解答。根据答案对接收到的解答数据进行处理,然后将解答结果进行存储。
(4)生成成绩报告。根据解答结果生成学生个人成绩报告,供学生查看。
(5)生成成绩单。对解答结果进行核算后生成课程成绩单供教师查看。
(6)发送通知。根据成绩报告数据,创建通知数据并将通知发送给学生;根据成绩单数据,创建通知数据并将通知发送给教师。
现采用结构化方法对考试系统进行分析与设计,获得如图 1-1 所示的上下文数据流图和图 1-2 所示的 0 层数据流图。
数据库系统工程师-2015年案例分析真题解析【下篇】-第1张图片-四季读书网
数据库系统工程师-2015年案例分析真题解析【下篇】-第2张图片-四季读书网
【问题 1】(2 分)
使用说明中的词语.给出图 1-1 中的实体 E1~E2 的名称。
【问题 2】(4 分)
使用说明中的词语,给出图 1-2 中的数据存储 D1~D4 的名称。
【问题 3】(4 分)
根据说明和图中词语,补充图 1-2 中缺失的数据流及其起点和终点。
【问题 4】(5 分)
图 1-2 所示的数据流图中,功能(6)发送通知包含创建通知并发送给学生或老师。请分解图 1-2 中加工(6),将分解出的加工和数据流填入答题纸的对应栏内。(注:数据流的起点和终点须使用加工的名称描述)
【 答 案 】
【问题 1】
E1:教师  E2:学生
【解析】
根据说明,教师负责制定试题、考试信息,接收课程成绩单;学生接收考试题目、提交解答、查看个人成绩报告,因此 E1 为教师,E2 为学生。
【问题 2】
D1:试题表(或题目和答案表)  D2:学生信息表
D3:考试信息表   D4:解答结果表
【解析】
根据功能(1)考试设置,教师制定的试题存储到 D1,学生信息存储到 D2,考试信息存储到 D3;功能(3)处理解答的结果存储到 D4,因此对应数据存储分别为试题表、学生信息表、考试信息表、解答结果表。
【问题 3】
数据流
起点
终点
答案
D1(或试题表 / 题目和答案表)
3(或处理解答)
题目
D1(或试题表 / 题目和答案表)
2(或显示并接收解答)
【解析】
功能(3)处理解答需要依据试题的答案来批改,因此缺少从 D1 到加工 3 的数据流 “答案”;功能(2)显示并接收解答需要向学生展示题目,因此缺少从 D1 到加工 2 的数据流 “题目”。
【问题 4】
分解为 2 个加工:创建通知、发送通知
数据流
起点
终点
报告数据
生成成绩报告
创建通知
成绩单数据
生成成绩单
创建通知
通知数据
创建通知
发送通知
【解析】
原加工 “发送通知” 包含创建通知和发送两个步骤,需拆分为两个加工。创建通知需要接收生成成绩报告的 “报告数据” 和生成成绩单的 “成绩单数据”,生成 “通知数据” 后传递给发送通知加工。
【第 2 题】(题型:SQL 编程题)
题目:
某大型集团公司的数据库的部分关系模式如下:
员工表:EMP(Eno,Ename,Age,Sex, Title),各属性分别表示员工工号、姓名、年龄、性别和职称级别,其中性别取值为 “男”“女”;
公司表:COMPANY(Cno,Cname,City),各属性分别表示公司编号、名称和所在城市;
工作表:WORKS(Eno,Cno,Salary),各属性分别表示职工工号、工作的公司编号和工资。
有关关系模式的属性及相关说明如下:
(1)允许一个员工在多家公司工作,使用身份证号作为工号值。
(2)工资不能低于 1500 元。
【问题 1】(4 分)
请将下面创建工作关系的 SQL 语句的空缺部分补充完整,要求指定关系的主码、外码,以及工资不能低于 1500 元的约束。
CREATE TABLE WORKS (
    Eno CHAR (10)    (a)  ,
    Cno CHAR (4)     (b)  ,
    Salary int   (c)  ,
    PRIMARY KEY    (d)  ,
【问题 2】(6 分)
(1)创建女员工信息的视图 FemaleEMP。属性有 Eno、Ename、Cno、Cname 和 Salary,请将下面 SQL 语句的空缺部分补充完整。CREATE   (e)  
    AS
SELECT EMP.Eno, Ename, COMPANY.Cno, Cname, Salary
    From EMP, COMPANY, WORKS
    WHERE    (f)  ;
(2)员工的工资由职称级别的修改自动调整,需要用触发器来实现员工工资的自动维护,函数 float Salary_value (char (10) Eno) 依据员工号计算员工新的工资。请将下面 SQL 语句的空缺部分补充完整。
Create   (g)   Salary_TRG AFTER   (h)   ON EMP
        REFERENCING new row AS nrow
        FOR EACH ROW
        BEGIN
        UPDATE WORKS
                SET     (i)  
                WHERE     (j)   ;
        END
【问题 3】(5 分)
请将下面 SQL 语句的空缺部分补充完整。
(1)查询员工最多的公司编号和公司名称。
SELECT COMPANY.Cno, Cname
FROM COMPANY, WORKS
WHERE COMPANY.Cno=WORKS.Cno
GROUP BY     (k)  
        HAVING    (l)    (SELECT COUNT (*)
        FROM WORKS
        GROUP BY Cno
                                );
(2)查询所有不在 “中国银行北京分行” 工作的员工工号和姓名。
SELECT Eno, Ename
FROM EMP
WHERE Eno    (m)    (
        SELECT Eno
        FROM    (n)  
        WHERE    (o)   
        AND Cname = ' 中国银行北京分行 '
);
【 答 案 】
【问题 1】
a) REFERENCES EMP (Eno)
b) REFERENCES COMPANY (Cno)
c) CHECK (Salary>=1500)
d) (Eno,Cno)
【解析】
Eno 是 EMP 表的主键,因此 WORKS 表中 Eno 需定义为外码,引用 EMP 的 Eno;
Cno 是 COMPANY 表的主键,因此 WORKS 表中 Cno 需定义为外码,引用 COMPANY 的 Cno;
根据要求工资不低于 1500,需添加 CHECK 约束;
员工可在多家公司工作,因此 WORKS 的主键是 Eno 和 Cno 的组合。
【问题 2】
e) VIEW FemaleEMP (Eno,Ename,Cno,Cname,Salary)
f) EMP.Eno=WORKS.Eno AND COMPANY.Cno=WORKS.Cno AND Sex=' 女 '
g) TRIGGER
h) UPDATE
i) salary=Salary_value (nrow.Eno)
j) WORKS.Eno=nrow.Eno
【解析】
(1) 创建视图需使用 VIEW 关键字,同时指定视图属性;WHERE 条件需关联三张表,并且筛选出性别为女的员工。
(2) 创建触发器需使用 TRIGGER 关键字,触发时机是 EMP 表的 UPDATE 操作;更新 WORKS 表的工资时调用指定函数,条件是员工号匹配新行的员工号。
【问题 3】
k) COMPANY.Cno, Cname
l) COUNT (*)>=ALL
m) NOT IN(或 <>ANY)
n) WORKS, COMPANY
o) WORKS.Cno=COMPANY.Cno
【解析】
(1) GROUP BY 需包含 SELECT 中的所有非聚合字段;HAVING 子句需用 >=ALL 来匹配员工数量最多的公司。
(2) 使用 NOT IN 或 <>ANY 来排除在目标公司工作的员工;子查询需关联 WORKS 和 COMPANY 表,筛选出目标公司的员工。
【第 3 题】(题型:数据库设计题)
题目:
某省针对每年举行的足球联赛,拟开发一套信息管理系统,以方便管理球队、球员、主教练、主裁判、比赛等信息。
【需求分析】
(1)系需要维护球队、球员、主教练、主裁判、比赛等信息。
球队信息主要包括:球队编号、名称、成立时间、人数、主场地址、球队主教练。
球员信息主要包括:姓名、身份证号、出生日期、身高、家庭住址。
主教练信息主要包括:姓名、身份证号、出生日期、资格证书号、级别。
主裁判信息主要包括:姓名、身份证号、出生日期、资格证书号、获取证书时间、级别。
(2)每支球队有一名主教练和若干名球员。一名主教练只能受聘于一支球队,一名球员只能效力于一支球队。每支球队都有自己的唯一主场场地,且场地不能共用:
(3)足球联赛采用主客场循环制,一周进行一轮比赛,一轮的所有比赛同时进行。
(4)一场比赛有两支球队参加,一支球队作为主队身份、另一支作为客队身份参与比赛。一场比赛只能有一名主裁判,每场比赛有唯一的比赛编码,每场比赛都记录比分和日期。
【概念结构设计】
根据需求分析阶段的信息,设计的实体联系图(不完整)如图 3-1 所示。
数据库系统工程师-2015年案例分析真题解析【下篇】-第3张图片-四季读书网
【逻辑结构设计】
根据概念结构设计阶段完成的实体联系图,得出如下关系模式(不完整):
球队(球队编号,名称,成立时间,人数,主场地址)
球员(姓名,身份证号,出生日期,身高,家庭住址, (1) )
主教练(姓名,身份证号,出生日期,资格证书号,级别, (2) )
主裁判(姓名,身份证号,出生日期,资格证书号,获取证书时间,级别)
比赛(比赛编码,主队编号,客队编号,主裁判身份证号,比分,日期)
【问题 1】(6 分)
补充图 3-1 中的联系和联系的类型。图 3-1 中的联系 “比赛” 应具有的属性是哪些?
【问题 2】(4 分)
根据图 3-1,将逻辑结构设计阶段生成的关系模式中的空 (1)~(2) 补充完整。
【问题 3】(5 分)
现在系统要增加赞助商信息,赞助商信息主要包括赞助商名称和赞助商编号。
赞助商可以赞助某支球队,一支球队只能有一个赞助商,但赞助商可以赞助多支球队。赞助商也可以单独赞助某些球员,一名球员可以为多个赞助商代言。请根据该要求,对图 3-1 进行修改,画出修改后的实体间联系和联系的类型。
【 答 案 】
【问题 1】
数据库系统工程师-2015年案例分析真题解析【下篇】-第4张图片-四季读书网
“比赛” 应具有的属性:比赛编码,比分,日期。
【解析】
根据需求,球员属于一支球队,球队有多名球员,因此球员与球队是 1:* 的 “效力” 联系;一场比赛由一名主裁判执裁,一名主裁判可执裁多场比赛,因此主裁判与比赛是 1:* 的 “执裁” 联系;一场比赛有一支主队和一支客队,一支球队可参与多场比赛,因此球队与比赛存在两个 1:* 的联系。比赛的属性为需求中明确的比赛编码、比分、日期。
【问题 2】
(1) 球队编号   (2) 球队编号
【解析】
球员和主教练都属于某一支球队,因此需要在关系模式中添加外码 “球队编号” 关联球队表。
【问题 3】
数据库系统工程师-2015年案例分析真题解析【下篇】-第5张图片-四季读书网
【解析】
赞助商与球队是一对多关系(一个赞助商赞助多支球队,一支球队只有一个赞助商);赞助商与球员是多对多关系(一个赞助商可赞助多名球员,一名球员可为多个赞助商代言)。
【第 4 题】(题型:数据库设计题)
题目:
某地人才交流中心为加强当地企业与求职人员的沟通,促进当地人力资源的合理配置,拟建立人才交流信息网。
【需求描述】
1.每位求职人员需填写《求职信息登记表》,并出示相关证件,经工作人员审核后录入求职人员信息。表中毕业证书编号为国家机关统一编码,编号具有唯一性。每个求职人员只能填写一部联系电话。
2.每家招聘企业需填写《招聘信息登记表》,并出示相关证明及复印件,经工作人员核实后录入招聘企业信息。表中企业编号由系统自动生成,每个联系人只能填写一部联系电话。
3.求职人员和招聘企业的基本信息会在系统长期保存,并分配给求职人员和招聘企业用于登录的用户名和密码。求职人员登录系统后可登记自己的从业经历、个人简历及特长,发布自己的求职意向信息;招聘企业的工作人员登录系统后可维护本企业的基本信息,发布本企业的岗位需求信息。
4.求职人员可通过人才交流信息网查询企业的招聘信息并进行线下联系;招聘企业的工作人员也可通过人才交流信息网查询相关的求职人员信息并进行线下联系。
5.求职人员入职后应修改自己的就业状态(在岗/求职);招聘企业在发布需求岗位有人员到岗后也应该及时修改需求人数。
【逻辑结构设计】
根据上述需求,设计出如下关系模式:
个人信息(身份证号,姓名,性别,出生日期,毕业院校,专业名称,学历,毕业证书编号,联系电话,电子邮件,个人简历及特长)
从业经历(身份证号,起止时间,企业名称,职位)
求职意向(身份证号,职位名称,最低薪水)
企业信息(企业编号,企业名称,地址,企业网址,联系人,联系电话,电子邮件,企业简介)
岗位需求(企业编号,职位,专业,学历,薪水,人数,备注)
数据库系统工程师-2015年案例分析真题解析【下篇】-第6张图片-四季读书网
数据库系统工程师-2015年案例分析真题解析【下篇】-第7张图片-四季读书网
【问题 1】(6 分)
对关系 “个人信息”,请回答以下问题:
(1) 列举出所有候选键。
(2) 它是否为 3NF,用 60 字以内文字简要叙述理由。
(3) 将其分解为 BC 范式,分解后的关系名依次为:个人信息 1,个人信息 2,…,并用下划线标示分解后的各关系模式的主键。
【问题 2】(6 分)
对关系 “企业信息”,请回答以下问题:
(1) 列举出所有候选键。
(2) 它是否为 2NF,用 60 字以内文字简要叙述理由。
(3) 将其分解为 BC 范式,分解后的关系名依次为:企业信息 1,企业信息 2,…,并用下划线标示分解后的各关系模式的主键。
【问题 3】(3 分)
若要求个人的求职信息一经发布,即由系统自动查找符合求职要求的企业信息,填入表 R (身份证号,企业编号),在不修改系统应用程序的前提下,应采取什么方法来实现,用 100 字以内文字简要叙述解决方案。
【 答 案 】
【问题 1】
(1) 候选码:毕业证书编号、身份证号
(2) 不是 3NF。存在传递函数依赖:毕业证书编号→身份证号→姓名,非主属性对候选码存在传递依赖。
(3) 个人信息 1(身份证号,姓名,性别,出生日期,联系电话,电子邮件,个人简历及特长)
个人信息 2(身份证号,毕业院校,专业名称,学历,毕业证书编号)
【解析】
(1) 毕业证书编号具有唯一性,身份证号也具有唯一性,两者均可唯一标识个人信息,因此都是候选键。
(2) 3NF 要求不存在非主属性对候选码的传递依赖,此处毕业证书编号通过身份证号间接决定姓名,存在传递依赖,因此不符合 3NF。
(3) 分解时将基本个人信息和学历信息拆分,消除传递依赖,每个关系都符合 BCNF。
【问题 2】
(1) 候选码:(企业编号,联系人)
(2) 不是 2NF。存在部分函数依赖:企业编号→企业名称,非主属性对候选码存在部分依赖。
(3) 企业信息 1(企业编号,企业名称,地址,企业网址,企业简介)
企业信息 2(企业编号联系人,联系电话,电子邮件)
【解析】
(1) 企业编号可唯一标识企业,但同一企业有多个联系人,因此候选码是企业编号和联系人的组合。
(2) 2NF 要求不存在非主属性对候选码的部分依赖,此处企业编号单独可决定企业名称,存在部分依赖,因此不符合 2NF。
(3) 分解时将企业基本信息和联系人信息拆分,消除部分依赖,每个关系都符合 BCNF。
【问题 3】
创建 “求职意向” 表上的 INSERT 触发器,当有新求职意向插入时,自动查询匹配的 “岗位需求” 记录,将对应的身份证号和企业编号插入表 R。
【解析】
触发器可在表数据发生变化时自动执行逻辑,无需修改应用程序,符合题目要求。
【第 5 题】(题型:事务与并发控制题)
题目:
某航空售票系统负责所有本地起飞航班的机票销售,并设有多个机票销售网点。以下为 E-SQL 编写的部分售票代码:
EXEC SQL SELECT balance INTO :X FROM tickets WHERE flight=:flightno;printf(“航班%s当前剩余机票数为:%d\n请输入购票数:”,flightno, x );scanf(“%d”,&a);EXEC SQL UPDATE tickets SET balance = :x - :a WHERE flight = :flightno ;

请根据上述描述,完成下列问题。

【问题 1】(5 分)
上述售票程序,在并发状态下,可能发生什么错误?产生这种错误的原因是什么?
【问题 2】(6 分)
若将上述代码封装成一个完整的事务,则:
(1)在并发请求下的响应效率会存在什么问题?
(2)分析产生效率问题的原因。
(3)给出解决方案。
【问题 3】(4 分)
下面是改写的存储过程,其中 flightno 为航班号;a 为购票数;result 为执行状态:1 表示成功,0 表示失败;表 tickets 中的剩余机票数 balance 具有大于等于零约束。请补充完整。
CREATE PROCEDRUE buy_ticket (char[] flightno IN,  (a)  , int result OUT)AS BEGIN  ……UPDATE tickets SET balance =    (b)   ;     WHERE flight = flightno ;if (SQLcode<> SUCCESS)  {   // SQLcode为SQL语句的执行状态        (c)     ;   Result = 0;    return;}COMMIT ;    (d)     END
【 答 案 】
【问题 1】
可能发生丢失修改错误:两个用户同时购票时,第一个用户的余额修改会被第二个用户的修改覆盖,导致实际剩余票数错误。
原因:并发操作破坏了事务的隔离性,两个事务同时读取并修改同一数据,后提交的事务覆盖了先提交事务的修改。
【解析】
该代码未加并发控制,两个事务同时读取同一航班的余额,分别计算后更新,会导致先更新的结果被后更新的结果覆盖,属于典型的丢失修改问题。
【问题 2】
(1) 并发度极低,多个用户购票时会出现长时间等待,系统响应效率下降。
(2) 原因:事务包含用户输入等待环节,事务持续时间过长,导致数据被长时间锁定,其他事务无法访问。
(3) 解决方案:将查询剩余票数的操作放在事务外部,仅将 UPDATE 操作封装为事务,减少事务持续时间。
【解析】
若将整个代码封装为事务,事务会在用户输入购票数时处于等待状态,此时数据库中的 tickets 记录被锁定,其他用户无法修改,导致系统并发度急剧下降。需拆分事务,仅将修改操作纳入事务。
【问题 3】
a) int a IN
b) balance - a
c) ROLLBACK(或 ROLLBACK WORK)
d) result = 1; return;
【解析】
存储过程需要定义输入参数 a,更新余额时直接用 balance 减去购票数;若更新失败需回滚事务,成功则提交并设置 result 为 1。
知识点盘点:
【试题一知识点】
・数据流图(DFD)的基本元素:实体、加工、数据存储、数据流
・上下文数据流图与 0 层数据流图的对应关系
・数据流图的完整性检查:确保所有输入输出数据流、加工逻辑的完整性
・加工分解的原则:将复杂加工拆分为粒度合适的子加工
【试题二知识点】
・SQL 表创建语句:主键、外码、约束的定义
・视图的创建与使用
・触发器的创建:触发时机、触发事件、触发逻辑
・分组查询(GROUP BY)与聚合函数的使用
・子查询与集合运算(NOT IN、ANY)
【试题三知识点】
・ER 图的设计:实体、联系、联系类型(1:1、1:、:*)
・ER 图向关系模式的转换规则:实体转关系、联系转关系或外码
・关系模式中外码的设计:用于关联不同实体的关系
・需求分析到概念结构设计的转化方法
【试题四知识点】
・候选键的定义与识别:能够唯一标识关系中元组的属性或属性组
・范式判断:1NF、2NF、3NF、BCNF 的定义与判断方法
・关系模式分解:消除部分依赖、传递依赖的分解方法
・触发器的应用:自动执行数据联动逻辑
【试题五知识点】
・并发控制中的常见问题:丢失修改、不可重复读、幻读
・事务的特性(ACID):原子性、一致性、隔离性、持久性
・事务的合理划分:避免事务包含等待用户输入的环节
・存储过程的设计:输入输出参数、事务控制(COMMIT/ROLLBACK)

THE  END -

点击下方卡片关注我   点个小赞你必上岸↓↓↓

数据库系统工程师-2015年案例分析真题解析【下篇】-第8张图片-四季读书网
数据库系统工程师-2015年案例分析真题解析【下篇】-第9张图片-四季读书网
 点个小“赞” 你必上岸

抱歉,评论功能暂时关闭!