一、数据库的背景及功能需求
进入21世纪以来,计算机的普及应用和信息技术、网络技术的发展给人们的工作和生活带来了极大的便利和高效,信息化、电子化已经成为节约运营成本,提高工作效率的首选。
相比之下,国内的相当数量的中小型医院的病人资料工作流程还采用相对保守的人工工作方式,数据信息的查询和存储的成本较高,而且效率还很低下。所以需要一种对于医院的病人资料管理系统来高效、低成本、便捷的进行医院病人信息数据的查询和存储。
1. 病人的相关信息应该由医院数据库管理员进行添加、删除、修改、查询等维护操作。
2. 需通过病人所患的疾病来确定病人的治疗
3. 对病人的编号、出生日期、性别、工作、住址信息进行查询。
4. 对病人的治疗进程,缴费情况等进行及时的更新与统一管理。
5. 医院需通过治疗结果来查看病人是否结束治疗,以进行必要的及时续约等行为。
6. 病人可通过数据库进行对所交费用,治疗情况的相关信息进行查看。
7. 病人信息的更新等等由数据库管理员进行维护。
系统功能的基本功能:
1病人信息包含编号,姓名,性别,出生日期,工作单位及地址,住址,工作,保险,医保号,电话,邮箱,死亡日期。
2交费项目信息包含项目序号,项目类型,缴费金额等
3回访记录包含住院号,病人编号,回访日期,回访人,记录,生命体征。
4 可通过对数据库的查询了解病人的相关信息,以及病情,并确定治疗方案。
所有关系模式都属于BC范式
(1)在关系模式patient中patientID是主键,所以在包含属性patientID的函数依赖是一个superkey。
(2)在关系模式中inpatient中number为主键,所以在所包含属性number的函数依赖是一个superkey。
(3)在关系模式outpatient中patientID为主键,所以包含patientID的函数依赖是一个superkey。
(4)在关系模式bed中number是主键,所以包含patientID的函数依赖是一个superkey。
(5)在关系模式department中depname是主键,所以在包含属性depname的函数依赖是一个superkey。
(6)在关系模式中re_call中number为主键,所以在所包含属性number的函数依赖是一个superkey。
(7)在关系模式case中caseID为主键,所以包含caseID的函数依赖是一个superkey。
(8)在关系模式charge1中chargeID是主键,所以包含chargeID的函数依赖是一个superkey。
(9)在关系模式charge2中chargeID是主键,所以在包含属性chargeID的函数依赖是一个superkey。
(10)在关系模式中inotice中inoticeID为主键,所以在所包含属性inoticeID的函数依赖是一个superkey。所以一定属于BCNF。
二、数据库的概念结构设计
病人资料管理系统的E-R模型
三、数据库的物理结构设计
住院病人inpatient
列名 数据类型 字段长度 字段描述 备注
Number Bigint 住院号 主键
patientID bigint 病人编号 非空,外码
Name Bigint 姓名
Inday Datetime 入院时间
Bedroom char 4 床号
Sort varchar 20 入院科别
病人信息表patient
列名 数据类型 长度 字段描述 备注
patientID bigint 病人编号 主键
Name varchar 20 姓名 不能为空
Sex char 4 性别
Birth datetime 出生日期
Dep varchar 40 单位
Depadd varchar 60 单位地址
address varchar 60 住址
Work varchar 10 工作 在职、离休、退休
Insure char 4 医保
insnumb varchar 30 医保号 有、无,不为空
Tel varchar 10 电话
Email varchar 50 E-mail
deathday varchar 20 死亡日期
门诊病人表outpatient
列名 数据类型 字段长度 字段描述 备注
patientID Bigint 病人编号 主键
Jz_date Varchar 20 就诊时间
Pay varchar 10 缴费情况 病人就诊花费
Name varchar 20 姓名 非空
Sex char 10 性别
Age Int 年龄
床位bed
列名 数据类型 字段长度 字段描述 备注
Number Bigint 住院号 主键
Name Varchar( 20 姓名 非空
Bedroom bigint 床号
Doctor Varchar 20 主治医生 主管本床位的医生姓名
Result Varchar 20 治疗结果
Department varchar 20 所属病区
病区department
列名 数据类型 字段长度 字段描述 备注
Depname varchar 10 病区名称 主键
Bedamount bigint 病床数
Responsor varchar 20 负责人姓名 非空
Inpeople bigint 入住人数
Wellpor real 好转率
Death real 、 死亡率
回访re_call
列名 数据类型 长度 字段描述 备注
Number bigint 序号 主键,自动产生
patientID bigint 病人编号 不为空
Callday varchar 20 回访时间
Callbody varchar 20 回访人
Record varchar 500 回访记录
Life char 8 生命特征 死亡
门诊病历ccase
列名 数据类型 字段长度 字段描述 备注
caesID Bigint 病历号 主键
Name Varchar 20 姓名 非空
Context Varchar 60 病例内容
Diadate datetime 诊断时间
Doctor Varchar 20 主治医生
联系 支付2pay2
列名 数据类型 字段长度 字段描述 备注
PatientID bigint 病人编号 主键
chargeID Bigint 支付项目号 主键
Amount varchar 20
payDate datetime 支付时间
收费项目2charge2
列名 数据类型 字段长度 字段描述 备注
chargeID bigint 项目序号 主键
Chargesort Varchar 20 项目类型
Amount Varchar 10 收费金额
Name Varchar 20 病人姓名
Operator Varchar 20 收款员
收费项目1charge1
列名 数据类型 字段长度 字段描述 备注
chargeID bigint 项目序号 主键
Name Varchar 20 病人姓名
number bigint 住院号 外码
category Varchar 10 收费类型
chargeday datetime 收费日期
opertor varchar 20 收款人
Amount Varchar 10 应收金额
payamount Char 10 交费金额
入院通知单inotice
列名 数据类型 字段长度 字段描述 备注
inoticeID bigint 通知单号 主键
doctor varchar 20 医师姓名 非空
Name varchar 20 病人姓名 非空
PatientID bigint 病人编号 外码
Diagadvice varchar 40 诊断建议
Pay varchar 20 收费情况
Pass Char 4 是否批准 是 否。非空
关系及各属性
Patient(patientID,name,sex,birth,dep,depadd,address,work,insure,insnumb,tel,email,deathday)
Inpatient(number,patientID,name,inday,sort,bedroom)
Outpatient(patientID,name ,sex,age,jz_date,pay)
Bed(number,name,bedroom,doctor,result,department,empty)
Department(depname,bedamount,responsor,inpeople,wellpor,,deathpor)
Re_call(number,patientID,callday,life,record,callbody)
Case(caseID,name,context,diadate,doctor)
Charge2(chargeID,chargesort,amount,name,operator)
Charge1(chargeID,category,name ,number,chargeday,payamount,amount)
inotice(inoticeID,doctor,name,patientID,diaadvice,pay,pass)
联系
Pay2(patientID,amount,paydate,chargeID)
触发器
1提醒触发器
create trigger reminder
on patient
after insert,update
as raiserror('你在插入或修改病人的数据',16,10);
2.更新操作的触发器
create trigger hehe on outpatient for update
as
begin
update outpatient set pay=pay*0.9
end
存储过程
1病人信息插入的存储过程
create procedure patientInsert (
@patientID bigint,
@name varchar(20),
@sex char(4),
@birth datetime,
@dep varchar(40),
@depadd varchar(60),
@address varchar(60),
@work varchar(10),
@insure char(4),
@insnumb varchar(30),
@tel varchar(15),
@email varchar(50),
@deathday datetime
)
as insert into
patient( name,sex ,birth ,dep,depadd ,address ,work ,insure,insnumb ,tel ,email ,deathday )
values(@name,@sex ,@birth ,@dep,@depadd ,@address ,@work ,@insure,@insnumb ,@tel ,@email ,@deathday )
2 住院病人信息插入的存储过程
create procedure inpatientInsert (
@number bigint,
@patientID bigint,
@name varchar(20),
@inday datetime,
@sort char(20),
@bedroom char(4)
)
as insert into inpatient(
number,patientID ,name ,inday ,sort ,bedroom )
values(
@number ,@patientID ,@name ,@inday ,@sort ,@bedroom )
索引
1
use hospital_patient
create unique nonclustered index inpatient_name on inpatient
(
name
)
2
use hospital_patient
create nonclustered index charge_amount on charge1
(
amount desc
)