【数据库系统原理】图书信息管理系统数据查询与数据更新
【数据库系统原理】药店管理系统的数据库设计附件
目的与要求
原理与内容
数据库原理
1) 数据库设计的过程
熟悉数据库设计涉及的相关技术知识,包含数据库需求分析、数据库设计和数据库实现等。
2)关系数据库规范理论
能根据项目系统的具体业务流程,以及关系型数据库设计范式的理论,选择合适方法设计数据库表。如果有数据冗余的情况,阐述相关理由。
内容
1)分组并选择自选项目(可以选图书管理系统、学生管理系统等比较熟悉的,也可以选择一些感兴趣的项目)。
2)项目组可以采用角色扮演法,模拟需求调研的过程进行需求信息的收集,同时完成:选用项目的基本需求信息收集,并画出项目的系统功能图。
3)项目组根据项目的需求,将系统中的关键流程,用数据流图表达出来,要求每个项目组2-3个。根据需求和数据流图,描述系统中的重要数据存储和数据项
4)根据以上需求,进行系统的概念设计,要求:在数据流图中,组织者、数据存储作为实体对象,数据字典中的数据组成作为实体的属性。设计唯一标识符、属性的数据类型、是否可以为空等,分析实体之间的关系,化解多对多的关系
5)运用范式要求,规范化系统ER模型,要求:至少满足3NF,确定最终的项目ER图
6)使用概念模型转换规则,将ER模型转换为逻辑结构表,结构表的模板请参考课程内容。
7)以上过程中的画图和转换,建议使用Power Designer 16.5完成。
实验过程与结果
领取药品申请,药品售购管理员工发现某种药品需要使用或者缺货后,向药库发出领取药品的申请。
药店从药库调入药品后,药库管理员工对调入的药进行记录开单,将药品所对应单号录入到系统中。
药房对相应医院需求进行批量药品发出,药库管理员工对发出的药品进行记录开单,并将发出货品的信息录入到系统中。
药品售购管理员工根据病人就诊得出的处方进行药品配制,并对所选配制药品处方进行处理,以及对所使用到的药品使用进行记录开单,并录入到系统中。
药品售购管理员工会根据病人的取号顺序,将病人所对应的配药处方进行配制摆放,以达到病人有序取到适合自己病情的药品,同时取药工作人员会对已发药处方进行处理。
药品售购管理员工对病人的退药请求进行处理,并将退药记录退给药库,药库管理员通过退药记录对退回药品进行重新录入系统并进行二次入库开单。
买药者、医师、药品、药品仓库、仓库管理员、取药单、取药人共七类。
(1)买药者:
编号:01
数据项:买药人ID
名称:买药ID
别名:顾客身份证
简述:唯一标识一个买药者
数据类型:字符串
数据项长度:18
编号:02
数据项:买药人联系方式
名称:买药人联系方式
别名:顾客电话号码
简述:储存顾客信息
数据类型:字符串
数据项长度:11
编号:03
数据项:买药人年龄
名称:买药人年龄
别名:顾客年龄
简述:储存顾客信息
数据类型:字符串
数据项长度:2
编号:04
数据项:买药人名称
名称:买药人名称
别名:顾客名称
简述:储存顾客信息
数据类型:字符串
数据项长度:20
2)医师:
编号:05
数据项:医师工作号
名称:医师工作号
别名:无
简述:唯一标识一个药剂师
数据类型:字符串
数据项长度:20
编号:06
数据项:医师资格等级
名称:医师资格等级
别名:无
简述:储存药剂师信息
数据类型:字符串
数据项长度:20
编号:07
数据项:医师名称
名称:医师师名称
别名:无
简述:储存药剂师信息
数据类型:字符串
数据项长度:20
3)药品:
编号:08
数据项:药品序列号
名称:药品序列号
别名:无
简述:唯一标识一种药品
数据类型:字符串
数据项长度:18
编号:09
数据项:药品名称
名称:药品名称
别名:无
简述:储存药品信息
数据类型:字符串
数据项长度:20
编号:10
数据项:药品价格
名称:药品价格
别名:无
简述:药品的售卖价格
数据类型:字符串
数据项长度:20
编号:11
数据项:药品生产日期
名称:药品生产日期
别名:无
简述:储存药品信息
数据类型:字符串
数据项长度:20
编号:12
数据项:药品有效期
名称:药品有效期
别名:无
简述:药品使用期限
数据类型:字符串
数据项长度:20
编号:13
数据项:药品主治功能
名称:药品主治功能
别名:无
简述:储存药品信息
数据类型:字符串
数据项长度:100
4)药品仓库:
编号:14
数据项:药品仓库位置
名称: 药品仓库位置
别名: 无
简述: 唯二识别药品
数据类型:字符串
数据项长度: 50
编号:15
数据项:药品序列号
名称: 药品序列号
别名: 无
简述: 唯二识别药品
数据类型:字符串
数据项长度: 20
编号:16
数据项:药品名称
名称: 药品名称
别名: 无
简述: 药品储存信息
数据类型:字符串
数据项长度: 20
编号:17
数据项: 药品数量
名称:药品数量
别名: 无
简述: 储存药品库存信息
数据类型:字符串
数据项长度: 20
5)仓库管理员:
编号:18
数据项: 仓库管理员工工作号
名称: 仓库管理员工工作号
别名: 无
简述: 唯一可识别仓库管理员工
数据类型:字符串
数据项长度: 20
编号:19
数据项:仓库管理员姓名
名称: 仓库管理员姓名
别名: 无
简述: 储存仓库管理员信息
数据类型:字符串
数据项长度: 20
6)取药单:
编号:20
数据项:取药单号
名称: 取药单号
别名: 无
简述: 唯一可识别取药单
数据类型:字符串
数据项长度: 20
编号:21
数据项:药品单价
名称: 药品单价
别名: 无
简述: 储存取药药品单价信息
数据类型:字符串
数据项长度: 20
编号:22
数据项:药品数量(取药)
名称: 药品数量(取药)
别名: 无
简述: 储存取药单药品数量
数据类型:字符串
数据项长度: 20
7)取药人:
编号:23
数据项:取药人身份证
名称: 取药人身份证
别名: 无
简述:唯一可以识别取药人的身份
数据类型:字符串
数据项长度: 18
编号:24
数据项:取药人名称
名称: 取药人名称
别名: 无
简述: 储存取药人信息,方便与买药人对应
数据类型:字符串
数据项长度: 20
编号:25
数据项:取药人年龄
名称: 取药人年龄
别名: 无
简述: 储存取药人信息,方便与买药人对应
数据类型:字符串
数据项长度: 2
编号:26
数据项:取药人电话
名称: 取药人电话
别名: 无
简述: 储存取药人信息,方便与买药人对应
数据类型:字符串
数据项长度: 11
森林药房管理系统主要分为药品、仓库、员工、取药单、取药人和买药人,下面是森林药房管理系统的数据库E-R设计图。
实体名称 | 实体描述 |
---|---|
药品 | 用于存储药品信息 |
仓库 | 用于存储仓库信息 |
员工 | 用于存储人员信息 |
取药单 | 用于储存药品售卖情况 |
取药人 | 用于储存取药人信息 |
买药人 | 用于储存买药人信息 |
将E-R图转化为逻辑结构表药品表
表名:药品表 | |||||
---|---|---|---|---|---|
数据项名 | 数据类型 | 长度 | 约束 | 备注 | 是否为空 |
Medicine_name | varchar | 30 | 药品名称 | 是 | |
Medicine_mid | varchar | 12 | 主键 | 药品序列号 | 否 |
Medicine_price | numeric | (12,2) | >0 | 药品价格 | 是 |
Medicine_borndate | datetime | 药品生产日期 | 否 | ||
Medicine_outdate | datetime | 药品失效日期 | 否 | ||
Medicine_location | varchar | 12 | 外键(参考仓库表) | 药品仓库位置 | 否 |
仓库表
表名:仓库表 | |||||
---|---|---|---|---|---|
数据项名 | 数据类型 | 长度 | 约束 | 备注 | 是否为空 |
Warehouse_mdsite | varchar | 12 | 联合主键 | 药品仓库位置 | 否 |
Warehouse_mdname | varchar | 12 | 药品名称 | 是 | |
Warehouse_mdnum | int | 12 | 药品库存数量 | 是 | |
Warehouse_mdborn | datetime | 药品生产日期 | 否 | ||
Warehouse_mdover | datetime | 药品失效日期 | 否 | ||
Warehouse_mdID | varchar | 12 | 联合主键 | 药品序列号 | 否 |
员工表
表名:员工表 | |||||
---|---|---|---|---|---|
数据项名 | 数据类型 | 长度 | 约束 | 备注 | 是否为空 |
Employee_type | varchar | 12 | 药剂师或管理员 | 员工类型 | 是 |
Employee_ID | varchar | 12 | 主键 | 员工工作号 | 否 |
grade | varchar | 12 | 药剂师资格等级 | 是 | |
Enployee_birth | datetime | 员工生日 | 是 |
取药人表
表名:取药人表 | |||||
---|---|---|---|---|---|
数据项名 | 数据类型 | 长度 | 约束 | 备注 | 是否为空 |
Patient_name | varchar | 12 | 取药人名称 | 是 | |
Patient_ID | varchar | 12 | 主键 | 取药人身份证 | 否 |
Patient_birth | datetime | 取药人生日 | 是 | ||
Patient_tel | varchar | 12 | 取药人电话 | 是 | |
Order_ID | varchar | 12 | 外键(参考求药单表) | 取药人单号 | 否 |
取药单表
表名:取药单表 | |||||
---|---|---|---|---|---|
数据项名 | 数据类型 | 长度 | 约束 | 备注 | 是否为空 |
Order_ID | varchar | 12 | 联合主键 | 取药人单号 | 否 |
Medicine_name | varchar | 12 | 药品名称 | 是 | |
Medicine_num | int | 12 | 药品数量 | 是 | |
Medicine_price | numeric | (12,2) | >0 | 药品单价 | 是 |
Medicine_ID | varchar | 12 | 联合主键 | 药品序列号 | 否 |
Patient_ID | varchar | 12 | 联合主键 | 取药人身份证 | 否 |
药品(药品名称,药品序列号,药品价格,药品生产日期,药品失效时期,药品仓库位置),其中药品序列号是主键,药品仓库位置是仓库表的外键。
仓库(药品仓库位置,药品名称,药品数量,药品生产日期,药品失效日期,药品序列号),其中药品仓库位置和药品序列号为联合主键。
药剂师(药剂师名称,药剂师工作号,药剂师资格等级),其中药剂师工作号为主键。
取药人表(取药人名称,取药人身份证,取药人年龄,取药人电话,取药人取药单号),其中取药人身份证为主键,取药单号是取药单表的外键。
取药单(取药人单号,药品名称,药品数量,药品单价),其中取药人单号为主键。
一个或者多个药剂师可以服务一个或者多个咨询或者需要药品对的人,因此药剂师和取药人的关系是服务,关系式1或n对1或n。
一种药品可以存储在一个或者多个仓库的位置,因此药品和仓库的位置关系是存储,关系是1对n。
一个取药人只能有一张取药单,因此取药人和取药单的关系是拥有,关系是1对1.
一张取药单上会有多种或一种药品,因此取药单和药品的关系是包含,关系是1对n。
一个或多个仓库管理员可以管理一个仓库,因此仓库管理员和仓库的关系是管理,关系是1/n对1。
代码如下:
create table medicineInfo
(
mdId bigint primary key,
mdBirth datatime,
mdLose datatime,
mdBaseLoc varchar,
mdName varchar,
foreign key(mdBaseLoc) references medicineBase(mdBId)
)
create table medicineBase
(
mdBId varchar primary key,
mdBLoc varchar,
mdName varchar ,
mdBirth date,
mdCount int,
mdLive datatime
)
create table BaseManager
(
baseMangerId bigint,
baseMName varchar
)
create table medB
(
medBId bigint primary key,
medprice decimal(4,2),
medNum int,
medName varchar
)
create table customer
(
customerId bigint primary key,
customerBirth datatime,
customerName datatime,
customerTel varchar,
customerIDCord bigint,
customerMedId bigint,
foreign key (customerMedId) references medB(medBId)
)
create table worker
(
workerId bigint primary key,
workerType varchar,
grade varchar,
workerBirth datatime
)
create table Rider
(
riderId bigint primary key,
riderName varchar,
riderbirth datatime,
riderTel bigint,
riderCount bigint
foreign key (riderCount) references medB(medBId)
)