合肥工业大学
学生课程设计报告书
课程名称:数据库系统概论
题 目:
编程语言:
院 系:
专 业:
班 级:
姓 名:
学 号:
指导老师:
医院管理信息系统 SQL 数学系 信息与计算科学 08-2班 陈天富 20086021 何蕾 日期 2010-12-20
一 系统分析
1.1 业务系统描述及流程分析
1.2 医院管理信息系统 HIS (Hospital Information System)
系统的目标
二 系统总体结构设计
2.1 数据库设计
2.2 E-R图
2. 3 转换规则
2. 4 数据库的实现
三 小结
四 源程序代码
五 源程序运行截图
一 系统分析
1.1 业务系统描述及流程分析
对一个住院病人来讲,他到医院看病的过程及医院的处理流程,简单
的讲是:病人先要到住院处登记并交纳住院押金,床位紧张的医院登记后要等待床位。然后,到病区接受主治医生的检查和询问,接受入院常规检查,接受临时治疗或按主治医生制定的长期治疗方案接受长期治疗。治疗过程中医生给病人下医嘱,医嘱产生药品和治疗项目两种申请单,药房根据病区的发药申请单给病人发药,在此之前药房要向药库申请进货,如果药库有库存则发给药房没有则列入采购计划。治疗过程中因为押金不够或医生的判断,需要退药,则会向药房申请退药。治疗项目在功检科室做完后直接收费。治疗结束后护士让病人出区,出入院处再给病人办理出院手术。 同时,对医院管理者来讲,还要将上述过程中发生的各类数据信息由医院各职能部门和其下属部门的工作人员把各种单据归类、统计、汇总、计算形成各类报表。并将这些报表,报送相应的管理职能科室,再由这些科室将这些报表制单、汇总、计算形成医院总体的人事、财务、备、医疗等各类报表和管理分析图表。
1.2 HIS系统的目标
HIS的目的就是支持医院的行政管理与事务处理业务,使医院的业务
操作流程和日常管理规范化。采集、分析处理、存储各种基础数据并使之标准化,通过网络在院内各科室之间传递,简化信息流程,为医院查询、分类汇总、统计、决策分析提供及时准确的数据,杜绝以前手工操作带来的差错,减少工作流程,提高工作效率。为了实现以上功能,我们必须做好以下几点:基础数据标准化,重视系统的实用性、经济性、安全性,顺应管理扁平化的管理趋势。
二 系统总体结构设计
2.1 数据库设计
系统总体结构功能模块设计后,就要对数据库进行设计了。支持管理
信息系统的数据库系统由模式、子模式、应用程序、数据库和数据库管理系统等几部分组成,其中除数据库管理系统可以从现有产品中选购外,外模式、子模式、应用程序、数据库等则必须根据用户的具体要求进行分析和设计,这项工作称为数据库设计,它的核心问题是如何从系统的观点出发建立一个数据模式,使其满足以下几个条件:
(1)符合用户的要求,即能正确地反映用户的工作环境,该环境包
括拥护需处理的所有”数据”,并支持用户需进行的所有“加工”。
(2)与所选用的数据库管理系统所支持的数据模式相匹配。
(3)数据组织合理,应易于操作,易于维护,易于理解。
2.2 E—R图(部分)
2.3转换规则
1)实体集的转换
每个实体集用一个关系表示,其中实体集的属性被转换成关系的属性。实体集的主键,在满足唯一标识的无冗余等性质的条件下,将作为对应关系的主键。在实体的对应关系上,由于加入了联系,可能还要增加一些属性。
2)联系的转换
(1)1:1的联系
如果实体集E1与实体集E2的联系为1:1,应根据需要把E2的主键放入关系模式E1中,或反之。
(2)1:N的联系
如果实体集E1与实体集E2的联系为1:N,将E1的主键包含在E2的关系模式中。
(3)M:N的联系
如果实体集E1与实体集E2繁荣联系为M:N,则它们之间的联系由另一个关系模式表示,这个关系模式由每个参加的实体集的主键及这个联系的任何属性一起组成。
2.4 数据库的实现
通过对转换后所得到关系模式的分析,结合本系统的功能及所选开发工具和数据库系统的特点,对系统数据库进行设计,建立一个具有良好的数据组织结构的数据库,应遵循的原则有:
(1)可能减少数据冗余和重复
(2)结构设计和操作设计相结合
4
(3) 数据结构具有相对的稳定性
由于数据库中所保存的数据是系统中非常重要的资源,所以在数据库
设计时一定要注意数据结构的安全性、完整性,并发控制与恢复,而一般的数据库管理系统都提供了一定的数据保护功能,如:
1.医生信息表(doctor)
2.费用明细表
三 小结
作为一名学习信息与计算科学的学生,我们得以有机会在课设中锻炼自己, 数据库课程设计使我系统地,完整的接触信息系统管理的全过程。我的题目是“医院病例管理系统”的设计。在这次课程设计之前,我对数据库的实际应用不是特别的熟悉,在这次的课程设计中,我伴着课本,在各位同学和朋友的帮助下努力理解并消化所学。在设计的过程中,突然发现一直以来令自己颇为头疼的计算机课程变的不再那么僵硬束缚,而且真正较为理解了数据库的实际用途。
在某种程度上说是自己实践旅途上迈出的第一步!通过这次的课程设
计,我对数据库有了切身的体会。它并不像我原来所想的那样十分神秘,而是有着一个相对固定的模式和流程。我们只要按照这个模式和流程,就能够比较规范的完成一个系统的设计。当然这也需要我们掌握多方面的知识。在这次课程设计
中,我觉得自己的知识面还是有欠缺的。需要在以后的学习中加以注意,要全面的提高自己的知识面与知识层次。
课程设计我获得了另外一种意义的最大的收获。那就是有时候在自己
对事物不感兴趣,对目的不甚明了的前提下,不应该尽早放弃,而是应该进最大努力去主动了解,想来自己曾经对计算机完全不感冒的情况下,也是可以利用短暂的时间来搞定一个看似很困难的事情,事在人为,要在自己思想和行为一致懒惰的时候“逼迫”自己做一些本该做好的事情。再有就是在课程设计中,自己也是意识到无论做什么事情,都应该用心,用力,细心,而又耐心!赶早不赶晚!把工程缩小成块,耐心而又细致的处理每一个部分,既挑战了自己的知识基础,又挑战了自己的耐心和韧性!无疑这是对自己的一次历练!
四 源程序代码
数据库的创建代码:
create database HIS
go
-------------------------------------------------------- --职称表
create table call_job(C_id char(8) primary key,
C_name char(20) not null unique,
get_job_time smalldatetime,
base_job_money int,);
----------------------------------------------------
------科室表
create table doc_room(dr_id char(5) primary key,
dr_name char(20) not null unique,
get_job_time smalldatetime,
n_Master_ID char(8) not null,
base_job_money int,);
----------------------------------------------------
------医生信息表
create table doctor(id char(8) primary key,
name varchar(20) not null,
sex char(2) default '男' not null ,
nation char(10)not null ,
call_job_id char(8) not null,
get_at_hos_time smalldatetime,
doc_room_id char(5) not null,
phone varchar(15),
photo image,
constraint fk_doctor_call_job foreign key(call_job_id) references call_job(c_id),
constraint fk_doctor_DOC_room foreign key(doc_room_id) references doc_room(dr_id),
constraint ck_2 check(sex in('男','女')))
-----------------------------------------------------
-------病区
create table sick_room(id char(5) primary key,
name varchar(20) not null,
doc_room_id char(5) not null,
constraint fk_sick_DOC_room foreign key(doc_room_id) references doc_room(dr_id),
)
------------------------------------------------------
-------护士信息
create table nurse(id char(8) primary key,
name varchar(20) not null,
sex char(2) default '女' not null ,
nation char(10)not null ,
call_job_id char(8) not null,
get_at_hos_time smalldatetime,
sick_room_id char(5) not null,
phone varchar(15),
photo image,
constraint fk_nurse_call_job foreign key(call_job_id) references call_job(c_id),
constraint fk_nurse_DOC_room foreign key(sick_room_id) references sick_room(id),
constraint ck_3 check(sex in('男','女'))
)
-------------------------------------------------------- ------病房信息
create table sick_bed_room(id char(5) primary key,
name varchar(20) not null)
-------------------------------------------------------- ------病床信息
create table sick_bed(id char(5) primary key,
name varchar(20) not null,
sick_room_id char(5) not null,
sick_bed_room_id char(5),
flag char(2)default'0'not null,
constraint fk_sick_bed_sick_room foreign key(sick_room_id) references sick_room(id),
constraint fk_sick_bed_sick_bed_room foreign key(sick_bed_room_id) references sick_bed_room(id),
constraint ck_sick_bed_flag check(flag in('0','1')) )
------------------------------------------------------- ------功能检测
create table fun_check(id char(5) primary key,
name varchar(20) not null,
check_end char(50) ,
check_doc_id char(8)not null,
check_date smalldatetime,
doc_room_id char(5),
constraint fk_fun_check_doctor foreign key (check_doc_id) references doctor(id)
)
----------------------------------------------------
------病人信息
create table sick_person(reg_num char(8) primary key,--流水号
name varchar(20) not null,
sex char(2) default '男'not null,
age smallint not null,
addr char(30),
realdate smalldatetime,
flag char(4) default '专家' not null,
constraint ck_age check(age>0 and age<150),
constraint ck_flag check (flag in('一般','专家')), constraint ck_person_sex check (sex in('男','女'))
)
-----------------------------------------------------
-----特殊病人(住院)
create table sick_stand_person(reg_num char(8) not null unique,--流水号
stan_in_num char(5) primary key,--住院号
person_ID char(18) not null,
sick_bed_id char(5)not null,
in_realdate smalldatetime,
out_realdate smalldatetime,
constraint fk_sick_stand_person_sick_person foreign key(reg_num) references sick_person(reg_num),
constraint fk_sick_stand_person_sick_bed foreign key(sick_bed_id) references sick_bed(id)
)
-----------------------------------------------------
-----付费方式
create table fee_way(fee_id char(5) primary key,
fee_name char(20) not null,
fee_wipe_out_scale smallint not null,
start_date smalldatetime,
constraint ck_fee_wipe_out_scale check(fee_wipe_out_scale>0 and fee_wipe_out_scale<100)
)
------------------------------------------------------- ----药库
create table big_drug_store(drug_id char(5) primary key, drug_name char(20) not null,
)
-------------------------------------------------------- ----药房
create table drug_store(drug_id char(5) primary key,
drug_name char(20) not null,
big_drug_store_id char(5) not null,
constraint fk_drug_store_big_drug_store foreign key(big_drug_store_id) references big_drug_store(drug_id)
)
-------------------------------------------------------- -----医生工资
create table doctor_wage(
doc_id char(8) primary key,
operation_time smallint default'0',
sum_money int,
constraint Ck_operation_time check(operation_time>=0)
)
-------------------------------------------------------- -----护士工资
create table nurse_wage(
n_id char(8) primary key,
add_time smallint default'0',
sum_money int,
constraint Ck_add_time check(add_time>=0)
)
--------------------------------------------------------- -----管理员
create table admin_person(
a_id char(8) primary key,
admin_name char(20) not null,
sex char(2) default '男' not null ,
add_time smallint default'0',
person_ID char(18)not null,
call_job_id char(8),
addr char(50),
sum_money int,
phone char(15),
photo image,
constraint fk_admin_call_job foreign key(call_job_id) references call_job(c_id),
constraint Ck_admin_add_time check(add_time>=0),
constraint ck_sex check(sex in('男
','女'))
)
------------------------------------------------------------
------帐号密码
create table account_password(acc_id char(16) primary key, password char(20)default'666666' not null )
-------------------------------------------------------------
-----手术类型
create table operation_way(opera_id char(5)primary key, opera_name char(25) not null, fee_for_op int
)
----------------------------------------------------------------
-----病人-手术
create table doc_sick(sick_id char(5),
doctor_id char(8),
real_date smalldatetime,
opera_way_id char(5),
constraint Fk_doc_sick_sick_stand_person foreign key(sick_id)references sick_stand_person(stan_in_num),
constraint Fk_doc_sick_doctor foreign key(doctor_id)references doctor(id),
constraint Fk_doc_sick_operation_way foreign key(opera_way_id)references operation_way(opera_id)
)
------------------------------------------------------------
-----药品类型
create table drug_type(dy_id char(5) primary key,
dy_name char(20)not null,
)
------------------------------------------------------------
------药品信息
create table drug(d_id char(15) primary key,
d_name char(30) not null,
make_datetime smalldatetime not null, valid int not null,
manufacturer char(30) not null,
drug_manage_person_id char(8),
drug_store_id char(5),
d_type_id char(5),
d_price smallint not null,
d_number smallint not null,
constraint Fk_drug_admin_person foreign key(drug_manage_person_id)references admin_person(a_id),
constraint Fk_drug_drug_store foreign key(drug_store_id)references drug_store(drug_id),
constraint Fk_drug_drug_type foreign key(d_type_id)references drug_type(dy_id)
)
------------------------------------------------------------
------付费
create table fee(stan_in_num char(5) primary key,
ought_fee int not null,
fact_fee int not null,
fee_wipe_out_scale_id char(5),
stored_fee int not null,
cur_time smalldatetime,
stop_drug char(2)default'停',
constraint Ck_stop_drug check(stop_drug in('停','用')) ,
constraint Fk_fee_sick_stand_person foreign key(stan_in_num)references sick_stand_person(stan_in_num),
constraint Fk_fee_fee_way foreign key(fee_wipe_out_scale_id)references fee_way(fee_id)
)
----------------------------------------------------------- -------病人-药
create table drug_sick_person
(reg_num char(8),
d_id char(15),
num smallint,
real_date smalldatetime,
doc_id char(8),
constraint Fk_drug_sick_person_sick_person foreign key(reg_num) references sick_person(reg_num),
constraint Fk_drug_sick_person_drug foreign key(d_id) references drug(d_id),
constraint Fk_drug_sick_person_doctor foreign key(doc_id) references doctor(id),
constraint Ck_num check(num>0),
)
Go
--------------------------------------------------------------
go
create trigger doc_time_add
on doc_sick
after insert
as
declare
@doc_id char(8)
--@sick_id char(5)
select @doc_id=doc_id from inserted i join doctor_wage dw on i.doctor_id=dw.doc_id
update doctor_wage set operation_time=operation_time+1 where doc_id=@doc_id
---------------------------------------------------------- go
create trigger call_job_delete
on call_job
after delete
as
begin
if exists(select *from deleted D join doctor doc on d.c_id=doc.id
where C_id not in (select distinct id from doctor)) begin
print'还有人使用这个职称类型,删除不成功!' rollback transaction
end
else
print'删除成功!' end