首页   >   新闻   >   文章

软考 | 数据库系统工程师 第十章
- 2023 -
04/26
06:56
零号员工
发表时间:2023.04.26     作者:Jingyi     来源:ShoelessCai     阅读:41

上海临港 环湖西一路 Jingyi 拍摄


01 医疗护理信息系统

场景说明

某医疗护理机构为老年人或有护理需求者提供专业护理,现欲开发一基于 Web 的医疗管理系统,以改善医疗护理效率。

该系统的主要功能如下:

(1) 通用信息查询。客户提交通用信息查询请求,查询通用信息表,返回查询结果;

(2) 医生聘用。医生提出应聘/辞职申请,交由主管进行聘用/解聘审批,更新医生表并给医生反馈聘用/解聘结果;删除解聘医生的出诊安排。

(3) 预约处理。医生安排出诊时间,存入医生出诊时间表:根据客户提交的预约查询请求,查询在职医生及其出诊时间等预约所需数据并返回;创建预约,提交预约请求,在预约表中新增预约记录,更新所约医生出诊时间并给医生发送预约通知;给客户反馈预约结果。

(4) 药品管理。医生提交处方,根据药品名称从药品数据中查询相关药品库存信息,开出药品,更新对应药品的库存以及预约表中的治疗信息;给医生发送“药品已开出”反馈。

(5)报表创建。根据主管提交的报表查询请求(报表类型和时间段),从预约数据、通用信息、药品库存数据、医生以及医生出诊时间中进行查询,生成报表返回给主管。

现采用结构化方法对医疗管理系统进行分析与设计,获得如图 1-1 所示的上下文数据流图和图 1-2 所示的 0 层数据流图。 通用信息查询请求一 医生应聘中请/医生辞职中请/报表。

数据流图





答案

[问题1] El:客户 , E2:医生, E3:主管

[问题2] DI: 通用信息 , D2:预约数据, D3:医生, D4: 医生出诊时间, D5:药品

(注:名称后面可以带有“文件”或“表”)

数据流 起点 终点
更新的出诊时间 P3 预约处理 D4 医生出诊时间
删除的医生出诊安排 P2 医生聘用 D4 医生出诊时间
药品库存信息 D5 药品 P4 药品管理
治疗信息 P4 药品管理 D2 预约数据


讲解

问题


答案


分析




02 海外代购信息系统

场景说明

某海外代购公司为扩展公司业务,需要开发一个信息化管理系统。请根据公司现有业务及需求完成该系统的数据库设计。

需求描述:

(1) 记录公司员工信息。员工信息包括工号、身份证号、姓名、性别和一个手机号,工号唯一标识每位员工,员工分为代购员和配送员。

(2) 记录采购的商品信息。商品信息包括商品名称、所在超市名称、采购价格、销售价格和商品介绍,系统内部用商品条码唯一标识每种商品。一种商品只在一家超市代购。

(3) 记录顾客信息。顾客信息包括顾客真实姓名、身份证号(清关缴税用)、一个手机号和一个收货地址,系统自动生成唯一的顾客编号。

(4) 记录托运公司信息。托运公司信息包括托运公司名称、电话和地址,系统自动生唯一的托运公司编号。

(5) 顾客登录系统之后,可以下订单购买商品。订单支付成功后,系统记录唯一的支付凭证编号,顾客需要在订单里指定运送方式:空运或海运。

(6) 代购员根据顾客的订单在超市采购对应商品,一份订单所含的多个商品可能由多名代购员从不同超市采购。

(7) 采购完的商品交由配送员根据顾客订单组合装箱,然后交给托运公司运送。托运公司按顾客订单核对商品名称和数量,然后按顾客的地址进行运送。

概念模型设计:



答案





讲解

问题


答案


分析


03 医院信息系统

场景说明

某医院为了更好地为患者服务、提高医院管理水平,拟开发满足自身特点的信息系统其部分需求及设计如下:

需求描述:

(1) 患者到医院就诊,需提供本人医保卡或身份证,系统根据医保卡或身份证从外部医保信息库获取患者的其他详细信息,包括医保卡号、身份证号、姓名、性别、民族、出生日期等信息。

(2) 医生信息包括医生编号、姓名、性别、出生日期、职称等信息。

(3) 通过患者自述、化验结果分析等信息,医生对患者的病情进行诊断,开具处方,并填写病例。病例同时包含诊断和处方信息,包括编号、患者姓名、病情描述、诊断结论、主治医生、药品名称、药品数量、服用剂量等,处方中一般会有多种药品。

(4) 病人凭医生开具的处方可在医院购买药品。医院记录药品的条码、名称、价格、生产厂商等信息。

逻辑结构设计:

医生(编号,姓名,性别,出生日期,职称)

患者(身份证号,医保卡号,姓名,性别,民族,出生日期)

药品(条码,名称,价格,生产厂商)

病例(编号,药品条码患者身份证号,主治医生编号,病情描述,诊断结论,诊断日期,服用剂量,药品数量,购买日期)

下划线表示主键,斜体表示分解主键。

讲解

问题


答案


分析




04 汽车租赁信息系统

场景说明

某汽车租赁公司建立汽车租赁管理系统,其数据库的部分关系模式如下:

用户:USERS(UserId,Name,Balance),各属性分别表示用户编号、姓名、余额;

汽车:CARS(CId,Ctype,CPrice,CStatus),各属性分别表示汽车编号、型号、价格(日租金)、状态;

租用记录:BORROWS(BRId,UserId,CId,STime,ETime),各属性分别表示租用编号、用户编号、汽车编号、租用时间、归还时间;

不良记录:BADS(Bid,_UserId,BRId,BTme),各属性分别表示不良记录编号、用户编号、租用编号、不良记录时间。

关系模式的属性及说明:

(1) 用户租用汽车时,其用户表中的余额不能小于 500,否则不能租用。

(2) 汽车状态为待租和已租,待租汽车可以被用户租用,已租汽车不能租用。

(3) 用户每租用一次汽车,向租用记录中添加一条租用记录,租用时间默认为系统当前时间,归还时间为空值,并将所租汽车状态变为已租。用户还车时,修改归还时间为系统当前时间,并将该汽车状态改为待租。要求用户不能同时租用两辆及以上汽车。

(4)租金从租用时间起按日自动扣除。

答案

问题1 - 创建租用记录表:

create table BORROWS (
BRId, char(20) primary key,
UserId char(10) references users(UserId),
CId char(10) references cars(CId),
STime DATETIME default getDate(),
ETime DATETIME,
);


问题2 - 从用户余额中扣除租金时候,触发器 Bad_TRG 执行:

create trigger Bad_TRG after update of balance ON users
referencing new row as nrow
for each row
when nrow.balance < 0
BEGIN
ROLLBACK;
insert into BADS
select concat(BORROWS.UserId, convert(varchar(100), getDate(), 10)),
    BORROWS.UserId,
    BRId,
    getDate()
from BORROWS
WHERE BORROWS.UserId = nrow.UserId AND ETime IS NULL;
END


问题3 - 创建视图 BADS_Detail

create VIEW BADS_Detail( UserId, Name, BRId, CId, STime, ETime, Total ) AS
select BADS.UserId, USERS.Name, BADS.BRId, CARS.CId, STime, ETime, sum(Price) as Total
from BORROWS, BADS, CARS, USERS
where BORROWS.BRId = BADS.BRId
    and BORROWS.CId = CARS.CId
    and USERS.UserId = BADS.UserId
group by BADS.UserId, USERS.Name, BADS.BRId, CARS.CId, STime, ETime
having sum(CPrice) > 200;


问题4 - 查询汽车型号“A8”且不良记录次数大于等于2的用户,输出部分属性。

select USERS.UserId, Name
from USERS, BORROWS, CARS
where USERS.UserId = BORROWS.UserId
    and BORROWS.CId = CARS.CId
    and CARS.Ctype = 'A8'
    and exists (
select *
from BADS
where BADS.UserId = BORROWS.UserId
    and BADS.BRId = BORROWS.BRId
group by UserId
having count(*) >= 2
)
order by name desc;


讲解

问题


答案


分析


05 销售信息系统

场景说明

某超市销售系统的部分关系模式如下:

商品表: Commodity(Ccode,Cname,price,qty),其中属性含义分别为: 商品编号、商品名称、价格、库存量。有专门的事务保证库存量足够大,销售时无须检测。

销售表:Sale(Sno,Ccode,amount,Stime),其中属性含义分别为: 销售编号、商品编号数量、时间。

其销售业务规则如下:顾客在超市挑选好商品后,携带商品到结算处结算付款,结算处有多名结算员使用多台机器进行结算。结算员负责扫描顾客购买商品的条码和数量,由系统后台结算程序计算出顾客购买商品的总金额,修改商品表的商品库存量,并将销售信息写入销售表。

问题

问题1:




引入独占锁指令 Xlock0 和解锁指令 Unlock0,对[问题1]中的调度进行重写,要求满足两段锁协议,且事务 T1、T2首条指令的相对请求时间与[问题 1]中的相同。

问题3:

写一段 SQL,要求在保证销售信息不丢失的前提下,达到最大的系统并发度。

答案

问题1 - 问题2:



问题3:

create procedure buy( IN: CommNo varchar(20), IN: AmountBuy INT )
BEGIN
  // 验证合法性
if( :AmountBuy < 1 ) return -1;
set transaction isolation level read uncommited;
BEGIN transaction;
  // 插入销售记录
insert into Sale
values( getGUID(), :CommNo, :AmountBuy, getDATETIME() );
  // 函数 getGUID(): 获取唯一值
  // 函数 getDATETIME(): 获取当前系统日期时间
if error
BRGIN
ROLLBACK; return -2;
END

  // 修改库存数量
update Commodity
set qty=qty-:AmountBuy
where Ccode =: CommNo;

if error
BEGIN
ROLLBACK; return -3;
END

COMMIT; return 0;
END


讲解

问题


答案


分析






原文链接

长按/扫码,有您的支持,我们会更加努力!







TOP 5 精选
回到顶部   回上一级
写文章

最新资讯




直播笔记


热点话题


精品论文


有你的鼓励
ShoelessCai 将更努力





文档免费。保护知识产权,保护创新。