医院住院部信息管理系统.docx
《医院住院部信息管理系统.docx》由会员分享,可在线阅读,更多相关《医院住院部信息管理系统.docx(18页珍藏版)》请在冰豆网上搜索。
医院住院部信息管理系统
医院住院部信息管理系统
1绪论
医院住院部信息管理系统方便医生和病人搜索相关住院信息,并且实现从住院、治疗到出院的全过程精确管理与监控,大幅度减少住院治疗事故,对于常出现医疗和财务纠纷的细节,可以极大地节约成本,提升医院整体效益,赢得长足发展。
医院住院部信息管理系统是现代化医院运营的必要技术支撑和基础设施,实现医院住院部信息管理系统的目的就是为了以更现代化、科学化、规范化的手段来加强医院的管理,提高医院的工作效率,改进医院质量,从而树立现代医院的新形象,这也是未来医院发展的必然方向。
2需求分析
作为医院住院部这样的的场所,其经济成分比重相对较多,对于患者来说来说主要有住院,缴费等情况。
而医院则是针对患者入院后对其进行治疗方面。
如何让这么多患者实行分类治疗信息管理正是医院住院部信息系统的目的所在。
本系统综合了经济的角度,建立了信息中心,可将来各自患者的信息集中管理,提高医院住院部管理的高效性和有序性,快速反馈了患者信息。
从系统开发及实施的可行性和灵活性考虑,本系统的软件开发环境主要选择了当前较为流行的功能强大的SQLsever2005数据库。
3总体设计
对数据库进行总体分析设计,掌握所要进行设计的数据库的基本框架,并考虑到数据库的安全完整型的设计。
3.1功能图
系统的核心是对住院信息的管理。
查询功能也是系统的基本功能。
为了实现医院住院部信息管理系统,方便用户和管理与需求,将医院住院部信息管理系统分为:
医生管理,病人管理,病房管理,系统维护四个功能模块,如下图3-1。
图3-1
3.2安全设计
给数据库中表创建不同的视图,保证数据的安全性,使得不想被人知道的部分信息能够较好地隐藏下来。
给数据库中表创建自定义约束,比如check约束、主键约束和唯一键约束,以此来保证数据库的完整性。
给数据库创建存储过程和触发器,防止工作人员由于误操作而删掉部分重要信息。
4概念结构设计
在需求分析阶段所得到的用户需求抽象为信息结构即概念结构模型的过程就是概念结构设计。
它是整个数据库设计的关键。
这个部分的关键是设计,一般根据系统要求,画出能反映本系统每个应用需求的E-R图。
其中包括五个实体即医生实体、病人实体、病房实体、治疗实体、入住实体,以及一些实体与属性之间的联系。
然后对初始的E-R图进行优化,消除冗余和可能存在的矛盾。
根据需要得到一个基本的E-R图,如下图4-1所示。
图4-1医院住院部信息管理系统整体E-R图
5逻辑结构设计
逻辑结构的设计的任务就是把概念结构设计阶段设计好的基本E-R模型转换为与选用DBMS产品所支持的数据模型相符合的逻辑结构。
5.1关系模型转化
医生表(医生编号,姓名,性别,出生日期,职称,科室)
病人表(病人编号,姓名,性别,出生日期,缴费情况,缴费金额,病症)
病房表(病房号,床位号,床位数)
治疗表(医生编号,病人编号,病人情况,医嘱类型,医嘱内容,治疗时间)
入住表(病人编号,病房号,床位号,住院时间,出院时间)
5.2确定函数依赖、属于第几范式
医生表:
医生编号→姓名,医生编号→姓别,医生编号→出生日期,医生编号→职称,医生编号→科室,没有传递依赖,没有部分依赖,则此范式属于第三范式。
病人表:
病人编号→姓名,病人编号→姓别,病人编号→出生日期,病人编号→缴费情况,病人编号→缴费金额,病人编号→病症,。
没有传递依赖,没有部分依赖,则此范式属于第三范式。
病房表:
(病房号,床位号)→床位数,没有传递依赖,没有部分依赖,则此范式属于第三范式。
治疗表:
(医生编号,病人编号)→病人情况,(医生编号,病人编号)→医嘱类型,(医生编号,病人编号)→遗嘱内容,(医生编号,病人编号)→治疗时间,有传递依赖,没有部分依赖,则此范式属于第三范式。
入住表:
(病人编号,病房号,床位号)→住院时间,(病人编号,病房号,床位号)→出院时间,有传递依赖,没有部分依赖,则此范式属于第三范式。
6物理结构设计
设计中所涉及的表有医生信息表doctor,病人信息表patinet,病房信息表sickroom,治疗情况信息表curecondition,入住信息表intake。
表6-1doctor表
列名
数据类型
宽度
允许空值
说明
列名含义
Did
Nchar
10
否
主键、唯一键
职工号
Dname
Nchar
16
是
姓名
Dsex
Nchar
1
是
男或女
性别
Dbirth
Datetime
是
出生日期
Title
Nchar
10
是
职称
Office
Nchar
10
是
科室
表6-2patinet表
列名
数据类型
宽度
允许空值
说明
列名含义
Pid
Nchar
10
否
主键、唯一键
病人编号
Pname
Char
16
是
姓名
Psex
Nchar
1
是
男或女
性别
Pbirth
Datetime
是
出生日期
Pmon
Text
是
缴费情况
Pmoney
Float
是
缴费金额
Illness
Text
是
病症
表6-3sickroom表
列名
数据类型
宽度
允许空值
说明
列名含义
Sid
Nchar
10
否
主键
病房号
Sroomid
Int
否
主键、check约束
床位号
Snum
Nchar
10
是
Check约束
床位数
表6-4curecondition表
列名
数据类型
宽度
允许空值
说明
列名含义
Did
Nchar
10
否
主键、外键
医生编号
Pid
Nchar
10
否
主键、外键
病人编号
Pcondition
Text
是
病人情况
Ordertype
Text
是
医嘱类型
Mcontent
Text
是
医嘱内容
Curetime
Datetime
是
治疗时间
表6-5intake表
列名
数据类型
宽度
允许空值
说明
列名含义
Pid
Nchar
10
否
主键、外键
病人编号
Sid
Nchar
10
否
主键、外键
病房号
Sroomid
Int
否
主键、外键
病床号
intaketime
datetime
是
入住时间
Outtime
datetime
是
Check约束
出院时间
7数据库的实施、运行
完成物理结构设计之后,就要用DBMS提供的数据定义语言和其他实用程序将数据库逻辑设计和物理设计结果严格描述出来,成为DBMS可以接受的源代码,再经过调试产生目标文件。
7.1创建数据库、建立表
经过以上结构设计,使用软件sqlserver2005,通过sql语句创建数据库以及以上5个表。
7.1.1创建数据库yygl
创建数据库所用到的sql语句:
CREATEDATABASE[yygl]ON
PRIMARY
(NAME=N’yygl’,FILENAME=N’D:
\库\yygl.mdf’,SIZE=3072KB,MAXSIZE=UNLIMITED,FILEGROWTH=1024KB)
LOGON
(NAME=N’yygl_log’,FILENAME=N’D:
\库\yygl_log.ldf’,SIZE=1024KB,MAXSIZE=2048GB,FILEGROWTH=10%)
COLLATEChinese_PRC_CI_AS
7.1.2创建医生表
在医生表中“医生编号”列建立主键约束,使每个医生编号只代表一名医生,“医生编号”不能为空值;在“性别”列上创建check约束,使“性别”属性的取值只能是‘男’或‘女’二者中的一个,不允许出现第三个;在“医生编号”列唯一性约束,保证职工号的唯一性。
创建医生信息表所用到的sql语句:
CREATETABLE[dbo].[doctor](
[did][nchar](10)NOTNULL,[dname][nchar](16)NULL,
[dsex][nchar]
(1)NULL,[dbirth][datetime]NULL,
[title][nchar](10)NULL,[office][nchar](10)NULL,
CONSTRAINT[PK_doctor]PRIMARYKEYCLUSTERED
([did]ASC)WITH(PAD_INDEX=OFF,STATISTICS_NORECOMPUTE=OFF,IGNORE_DUP_KEY=OFF,ALLOW_ROW_LOCKS=ON,ALLOW_PAGE_LOCKS=ON)ON[PRIMARY],CONSTRAINT[uq_key]UNIQUENONCLUSTERED
([did]ASC)WITH(PAD_INDEX=OFF,STATISTICS_NORECOMPUTE=OFF,IGNORE_DUP_KEY=OFF,ALLOW_ROW_LOCKS=ON,ALLOW_PAGE_LOCKS=ON)ON[PRIMARY])ON[PRIMARY]
GO
ALTERTABLE[dbo].[doctor]WITHCHECKADDCONSTRAINT[CK_doctor]CHECK(([dsex]=’女’OR[dsex]=’男’))
GO
ALTERTABLE[dbo].[doctor]CHECKCONSTRAINT[CK_doctor]
7.1.3创建病人表
在病人表中“病人编号”列建立主键约束,是每一个病人编号都代表着一个病人,“病人编号”不能为空值;在“性别”列上创建check约束,使“性别”属性的取值只能是‘男’或‘女’二者中的一个,不允许出现第三个;在“病人编号”列唯一性约束,保证职工号的唯一性。
创建病人信息表所用到的sql语句:
CREATETABLE[dbo].[patinet](
[pid][nchar](10)NOTNULL,[pname][nchar](10)NULL,
[psex][nchar]
(1)NULL,[pbirth][datetime]NULL,
[pmon][text]NULL,[pmoney][float]NULL,
[illness][text]NULL,
CONSTRAINT[PK_patinet_1]PRIMARYKEYCLUSTERED
([pid]ASC)WITH(PAD_INDEX=OFF,STATISTICS_NORECOMPUTE=OFF,IGNORE_DUP_KEY=OFF,ALLOW_ROW_LOCKS=ON,ALLOW_PAGE_LOCKS=ON)ON[PRIMARY],CONSTRAINT[un_p]UNIQUENONCLUSTERED
([pid]ASC)WITH(PAD_INDEX=OFF,STATISTICS_NORECOMPUTE=OFF,IGNORE_DUP_KEY=OFF,ALLOW_ROW_LOCKS=ON,ALLOW_PAGE_LOCKS=ON)ON[PRIMARY])ON[PRIMARY]TEXTIMAGE_ON[PRIMARY]
GO
ALTERTABLE[dbo].[patinet]WITHCHECKADDCONSTRAINT[CK_patinet]CHECK(([psex]=’女’OR[psex]=’男’))
GO
ALTERTABLE[dbo].[patinet]CHECKCONSTRAINT[CK_patinet]
7.1.4创建病房表
在病房表中“病房号”和“病床号”列建立联合主键约束,是每一个病房里的每一个床上只能住着一个病人,“病房号”和“病床号”不能为空值。
“病床号”列创建check约束,使得病床号只能在1到3之间,“床位数”列创建check约束,使得床位数只能在1到3之间。
创建病房信息表所用到的sql语句:
CREATETABLE[dbo].[sickroom](
[sid][nchar](10)COLLATEChinese_PRC_CI_ASNOTNULL,
[sroomid][int]NOTNULL,
[snum][nchar](10)COLLATEChinese_PRC_CI_ASNULL,
CONSTRAINT[PK_sickroom]PRIMARYKEYCLUSTERED
([sid]ASC,[sroomid]ASC)WITH(IGNORE_DUP_KEY=OFF)ON[PRIMARY])ON[PRIMARY]
GO
ALTERTABLE[dbo].[sickroom]WITHCHECKADDCONSTRAINT[CK_sickroom]CHECK(([snum]>=
(1)AND[snum]<=(3)))
ALTERTABLE[dbo].[sickroom]WITHCHECKADDCONSTRAINT[CK_sickroom_1]CHECK(([sroomid]>=
(1)AND[sroomid]<=(3)))
7.1.5创建治疗表
在治疗表中“医生编号”和“病人编号”列建立联合主键约束“病人编号”和“病人编号”不能为空值;“病人编号”列与doctor表中“病人编号”列建立外键关系,表示两个表之间的联系;“病人编号”列月patinet表中“病人编号”列建立外键关系,表示两表之间的联系。
创建治疗情况信息表所用到的sql语句:
CREATETABLE[dbo].[curecondition](
[did][nchar](10)NOTNULL,[pid][nchar](10)NOTNULL,
[pcondition][text]NULL,[ordertype][text]NULL,
[mcontent][text]NULL,[curetime][datetime]NULL,
CONSTRAINT[PK_curecondition]PRIMARYKEYCLUSTERED
([did]ASC,[pid]ASC)WITH(PAD_INDEX=OFF,STATISTICS_NORECOMPUTE=OFF,IGNORE_DUP_KEY=OFF,ALLOW_ROW_LOCKS=ON,ALLOW_PAGE_LOCKS=ON)ON[PRIMARY])、ON[PRIMARY]TEXTIMAGE_ON[PRIMARY]
GO
ALTERTABLE[dbo].[curecondition]WITHCHECKADDCONSTRAINT[FK_curecondition_doctor]FOREIGNKEY([did])
REFERENCES[dbo].[doctor]([did])
GO
ALTERTABLE[dbo].[curecondition]CHECKCONSTRAINT[FK_curecondition_doctor]
GO
ALTERTABLE[dbo].[curecondition]WITHCHECKADDCONSTRAINT[FK_curecondition_patinet]FOREIGNKEY([pid])
REFERENCES[dbo].[patinet]([pid])
GO
ALTERTABLE[dbo].[curecondition]CHECKCONSTRAINT[FK_curecondition_patinet]
7.1.6创建入住表
在入住表中“病人编号”、“病房号”和“病床号”列建立主键约束,使每位病人在同一时间内只能有一次入院和出院时间,“病人编号”、“病房号”和“病床号”不能为空值;“病房号”和“病床号”列与sickroom表中“病房号”和“病床号”列建立外键关系,表示两个表之间的联系;“病人编号”列月patinet表中“病人编号”列建立外键关系,表示两表之间的联系。
创建入住信息表所用到的sql语句:
CREATETABLE[dbo].[intake](
[pid][nchar](10)NOTNULL,[sid][nchar](10)NOTNULL,
[sroomid][int]NOTNULL,[intaketime][datetime]NULL,
[outtime][datetime]NULL,
CONSTRAINT[PK_intake]PRIMARYKEYCLUSTERED
([pid]ASC,[sid]ASC,[sroomid]ASC)
WITH(IGNORE_DUP_KEY=OFF)ON[PRIMARY])ON[PRIMARY]
GO
ALTERTABLE[dbo].[intake]WITHCHECKADDCONSTRAINT[FK_intake_patinet]FOREIGNKEY([pid])
REFERENCES[dbo].[patinet]([pid])
GO
ALTERTABLE[dbo].[intake]WITHCHECKADDCONSTRAINT[FK_intake_sickroom]FOREIGNKEY([sid],[sroomid])
REFERENCES[dbo].[sickroom]([sid],[sroomid])
GO
ALTERTABLE[dbo].[intake]WITHCHECKADDCONSTRAINT[CK_Time]CHECK(([intaketime]<=[outtime]))
在sqlserver2005中写入以上代码执行,得到如下图7-1中的表。
图7-1
7.2创建视图
视图被看成是虚拟表,它并不表示任何物理数据,只是用来查看数据的视窗而已。
视图作为一种数据库对象,为用户提供了一种检索数据表中数据的方式,用户可以通过视图浏览数据表中感兴趣的部分或全部数据。
7.2.1创建病人基本信息查询视图
为了方便查询病人的基本情况,比如查询病人的编号,姓名,性别,缴费情况,病症等,创建了一个基本视图。
创建视图所需要的sql语句:
CREATEVIEW[dbo].[View_pcontent]
AS
SELECTpid,pname,psex,pmon,illnessFROMdbo.patinet
7.2.2创建医生信息查询视图
为了方便查询医生信息,比如医生编号,姓名,所在科室,这位医生所治疗的病人编号,姓名,病人情况以及有有没有给他开医嘱等等,创建了一个基本视图。
创建视图所需要的sql语句:
CREATEVIEW[dbo].[View_dcontent]
AS
SELECTdbo.doctor.did,dbo.doctor.dname,dbo.patinet.pid,dbo.patinet.pname,dbo.doctor.office,dbo.curecondition.pcondition,dbo.curecondition.mcontent
FROMdbo.doctorINNERJOINdbo.curecondition
ONdbo.doctor.did=dbo.curecondition.did
INNERJOINdbo.patinet
ONdbo.curecondition.pid=dbo.patinet.pid
7.2.3创建病人入院后情况信息查询视图
为了方便了解医生所治疗的病人的基本情况及医生所在科室等,创建一个视图。
创建视图所用到的sql语句:
CREATEVIEW[dbo].[View_pincontent]
AS
SELECTdbo.patinet.pid,dbo.patinet.pname,dbo.sickroom.sid,dbo.sickroom.sroomid,dbo.intake.intaketime,dbo.intake.outtime
FROMdbo.patinetINNERJOINdbo.intake
ONdbo.patinet.pid=dbo.intake.pidINNERJOINdbo.sickroom
ONdbo.intake.sid=dbo.sickroom.sid
ANDdbo.intake.sroomid=dbo.sickroom.sroomid
7.3创建索引
在数据库中为curecondition表建立基于did列和pid列的符合索引did_pid_index。
创建索引所用到的sql语句:
createindexdid_pid_index
oncurecondition(pid,did)
图7-2did_pid_index索引
7.4创建和执行存储过程
存储过程预编译并存储在数据库中的特性,不仅能提高应用效率,确保一致性,更能提高系统执行速度。
7.4.1创建并执行插入数据存储过程
针对病人信息表patinet,创建一个存储过程p_proc2,执行该存储过程将向数据表patinet中插入一条数据,新纪录的值有参数提供。
创建存储过程所用到的sql语句:
createprocp_proc2
(@idnchar(10),@namnchar(10),@sexnchar
(1),@birthdatetime,@montext,@moneyfloat,@illtext)
as
insertintopatinetvalues(@id,@nam,@sex,@birth,@mon,@money,@ill)
创建完成后,插入一条数据:
executep_proc2@id=’0014’,@nam=’吴丽丽’,@sex=’女’,
@birth=’1985-5-14’,@mon=’已缴费’,@money=’1456’,@ill=’白血病’
得到数据已加入到数据库中。
图7-3插入数据结果
7.4.2创建并执行查询数据存储过程
针对病人信息表patinett,创建一个按照性别统计人数的存储过程p_proc3,要求输入性别值后,返回对应性别的病人数,但需保证其在每次被执行时都被重编译处理。
创建存储语句所用到的sql语句:
createprocp_proc3
(@in_sexnchar
(2),@out_numintoutput)