1、医院病例数据库管理系统设计题目:医院病例数据库管理系统学 院 管理与经济学部专 业 工程管理年 级 2012 级成 员 王艳旭 (一班) 54需求分析, E-R图,数据修改,数据插入杨志东( 二班)逻辑设计,物理设计,数据表、索引建立谢中仁 (二班)视图建立,存储过程的建立2013年 12月 16日目录:一、需求分析 31)医生信息管理2)病人病例和病房管理( 1)数据检索( 2)数据插入( 3)数据修改( 4)数据统计与查询二、概念设计 4( 1)医生实体( 2)职位实体( 3)病人实体( 4)病房实体( 5)全局 E-R图 6 6五、系统实现 81、数据库的建立2、数据表的建立3、数据的输
2、入4、索引的创建5、视图的创建6、存储过程的创建一、 需求分析实现某医院病例数据库管理系统,系统使用对象是系统管理员,医生和病人,要求完成以下工作:1)医生信息管理,包括系统管理员进行新医生到岗、现有医生离职处理系统管理员可以修改任何医生的所有信息,如姓名、年龄、职称、科室医生可以查阅自己的信息并修改其中某些基本信息,如联系方式等2)病人病例和病房管理医生可以添加新病人,修改或删除已有病人的信息医生可以添加新的病例记录,形成病人治疗日志。管理员可以任意查询所有医生或病人的情况和病例管理员可以统计任意医生的病人或者任意病人的病例病人能查看自己的基本信息和病例信息( 1) 数据检索i.系统管理员查
3、询所有医生的情况输入:医生编号输出:姓名、年龄、联系方式、职称、科室。ii.系统管理员查询所有病人的基本信息输入:病号输出:姓名、年龄、联系方式、地址。iii.系统管理员查询所有病人的病例输入:病号输出:姓名、诊断结果、就诊日期、病房号、床号、入住日期、出院日期。iv.医生查询自己的信息输入:医生编号输出:姓名、年龄、联系方式、职称、科室。v.医生查询病人的病例输入:病号输出:姓名、诊断结果、就诊日期、病房号、床号、入住日期。vi.病人查询自己的基本信息输入:病号输出:姓名、年龄、联系方式、地址。vii.病人查询自己的病例输入:病号输出:姓名、诊断结果、就诊时间、病房号、床号、入住日期。( 2
4、)数据插入i.系统管理员插入医生数据。ii.医生插入病人数据。( 3)数据修改i.系统管理员修改所有医生的信息:医生编号、姓名、年龄、联系方式、职称、科室、任职时间。ii.医生修改自己的部分信息:联系方式。iii.医生修改病人的信息: 姓名、 年龄、 联系方式、 地址、 诊断结果、 就诊日期、 病房号、床号、入住日期。( 4)数据统计与查询i.管理员:显示所有医生的情况。ii.管理员:显示所有病人的情况。iii.管理员:显示所有医生的全部病人。iv.管理员:显示所有病人的全部病例。二、 概念设计概念设计的任务是, 在需求分析中产生的需求说明的基础上, 抽象出满足应用需求的用户的信息结构,即概念
5、模型。经需求分析,抽象出以下 E R 模型。( 1)医生实体(图 1)( 2)职位实体(图 2)( 3)病人实体(图 3)( 4)病房实体(图 4)( 5)全局 E R图(图 5)三、逻辑设计逻辑设计阶段将概念设计阶段产生的 E-R图转换成 RDBMS所支持的数据模型,即关系模型。根据图 5 的 E-R图转换为以下关系模式:医生(医生编号,姓名,年龄,联系方式,职位编号,任职时间)职位(职位编号,职称,所属科室)病人(病人编号,姓名,年龄,联系方式,住址)病房(病房号,病床数,病房联系电话)入住(病人编号,病房号,床位号,入住时间) ,主键为(病人编号,病房号)就诊(病人编号,医生编号,诊断结
6、果,就诊日期) ,主键为(病人编号,医生号)查房(医生编号,病房号,值班时间) ,主键为(医生编号,病房号)其中带有下划直线的属性为主键,带有下划波浪线的属性为外键。以上关系模式均满足 3NF。四、物理设计物理设计阶段将关系模式设计为具体的 RDBMS中的数据表。 根据以上关系模式构建的数据表结构如表 17所示。表 1 医生表结构字段名 类型 特殊属性五、系统实医生编号char(4)PRIMARY KEY姓名char(10) NOT NULL1.数据库的建年龄char(10) NOT NULLCreate联系方式char(20)NOT NULLdatabase 医院职位编号char(4)FOR
7、EIGN KEYOn primary任职时间char(20)NOT NULL( name =医院病表 2 职位表结构字段名类型特殊属性职位编号char(4)PRIMARY KEY职称char(10)NOT NULL所属科室char(10)表 3 病人表结构字段名类型特殊属性病人编号char(4)PRIMARY KEY姓名char(10)NOT NULL年龄char(10)NOT NULL联系方式char(20)NOT NULL住址varchar( 30)表 4 病房表结构字段名类型特殊属性病房号char(4)PRIMARY KEY病床数int病例例病房联系方式 char(11)_data ,
8、filenam表 5 入住表结构e= 医院病例字段名类型 特殊属性data.mdf )病人编号char(4) PRIMARYKEY,FOREIGNK EYLog on病房号char(4) PRIMARYKEY,FOREIGNK EY( name =医院病例床位号char(4) NOT NULL_log , filename入住时间char(20) NOT NULL= 医院病例表 6 就诊表结构log.ldf )字段名类型特殊属性2.数据表的建立病人编号char(4) PRIMARYKEY,FOREIGNK EYUse 医院病例Go医生编号char(4) PRIMARYKEY,FOREIGNK
9、EY诊断结果varchar(100) NOT NULLCreate table 职 位就诊时间char(20)表 7查房表结构( 职位编号char ( 4)PRIMARY KEY,字段名类型特殊属性医生编号char(4) PRIMARYKEY,FOREIGNK EY职称 char ( 10 )NOT NULL,所属科室 char ( 10 )病房号char(4) PRIMARYKEY,FOREIGNK EY值班时间char(20) NOT NULLPRIMARYKEY,)Create table 医生( 医生编号 char ( 4)姓名 char ( 10) NOT NULL,年龄 char
10、( 10) NOT NULL,联系方式 char ( 20 ) NOT NULL,职位编号 char ( 4),任职时间 char ( 20 ) NOT NULL,FOREIGN KEY( 职位编号 ) references 职位 ( 职位编号 )Create table 病人( 病人编号 char ( 4) PRIMARY KEY,姓名 char ( 10) NOT NULL,年龄 char ( 10) NOT NULL,联系方式 char ( 20 ) NOT NULL,住址 varchar ( 30 )Create table 病房( 病房号 char ( 4) PRIMARY KEY,
11、病床数 int ,病房联系方式 char ( 11 )Create table 入住( 病人编号 char ( 4), 病房号 char ( 4 ),床位号 char ( 4 ) NOT NULL,入住时间 char ( 20 ) NOT NULL,PRIMARY KEY( 病人编号 , 病房号 ),FOREIGN KEY( 病人编号 ) references 病人 ( 病人编号 ),FOREIGN KEY( 病房号 ) references 病房 ( 病房号 ) ) Create table 就诊 ( 病人编号 char ( 4), 医生编号 char ( 4 ),诊断结果 varchar
12、( 100 ) NOT NULL,就诊时间 char ( 20 ),PRIMARY KEY( 病人编号 , 医生编号 ),FOREIGN KEY( 病人编号 ) references 病人 ( 病人编号 ),FOREIGN KEY( 医生编号 ) references 医生 ( 医生编号 ),)Create table 查房( 医生编号 char ( 4), 病房号 char ( 4 ),值班时间 char ( 20 ) NOT NULL,PRIMARY KEY( 医生编号 , 病房号 ),FOREIGN KEY( 医生编号 ) references 医生 ( 医生编号 ),FOREIGN K
13、EY( 病房号 ) references 病房 ( 病房号 ) )3.数据的输入Insert into 职位Values ( J1 , 眼科医生 , 眼科室 )Insert into 职位Values( J2 , 内科医生 , 内科室 )Insertinto 医生Values( D001 , 李明 , 45 , 139*1111, J1 , )Insertinto 医生Values( D002 , 张强 ,50 , 139*2222, J2 ,)Insertinto 医生Values( D003 , 陈龙 ,54 , 139*3333, J1 ,)Insertinto 医生Values( D0
14、04 , 刘红 ,36 , 139*4444, J2 ,)Insertinto 病人Values( P001 , 张三 ,30 , 159*1111, 北京市)Insertinto 病人Values( P002 , 李四 ,39 , 159*2222, 天津市)Insertinto 病人Values( P003 , 王五 ,44 , 159*3333, 廊坊市)Insertinto 病人Values( P004 , 赵六 ,27 , 159*4444, 唐山市)Insertinto 病房Values( R101 , 4 , )Insertinto 病房Values( R102 , 2 , )I
15、nsertinto 入住Values( P003 , R101, 1 , )Insertinto 入住Values( P004 , R102, 2 , )Insertinto 就诊Values( P001 , D001, 白内障 , )Insertinto 就诊Values( P002 , D003, 青光眼 , )Insertinto 就诊Values( P003 , D002, 阑尾炎 , )Insertinto 就诊Values( P004 , D004, 胃出血 , )Insertinto 查房Values( D001 , R101,)Insertinto 查房Values( D002
16、 , R102,)4.索引的创建( 1)医生表:按医生任职时间降序排列Createindex 医生 _任职时间 on 医生 ( 任职时间desc )( 2)病人表:按病人编号升序排列Createindex 病人 _病人编号on 病人 ( 病人编号)( 3)职位表:按职位编号升序排列Create( 4)病房表:按病房号升序排列index 职位 _职位编号 on 职位 ( 职位编号)Createindex 病房 _病房号on 病房 ( 病房号 )5.视图的创建医生情况视图:显示所有医生的情况create view 医生情况视图asselect 医生 . 医生编号 , 姓名 , 年龄 , 联系方式
17、, 职位 . 职称 , 所属科室from 医生 join 职位 on 医生 . 职位编号 = 职位 . 职位编号病人情况视图 :显示所有病人的情况Create view 病人情况视图asSelect *From 病人医生与病人视图 :显示任意医生的全部病人Create view 医生与病人视图asSelect 医生 . 姓名 as 医生姓名 , 病人 . 姓名 as 病人姓名From就诊 join 医生 on 医生 . 医生编号 =就诊 . 医生编号Join 病人 on 病人 . 病人编号 =就诊 . 病人编号病例视图 :显示病人病例create view 病例视图asSelect 病人 .
18、姓名 , 就诊 .*From 病人 join 就诊 on 病人 . 病人编号 =就诊 . 病人编号6.存储过程的创建( 1)检索数据1管理员对医生检索 :输入医生编号 ,返回医生的姓名 年龄 联系方式 职称 科室Create procedure 管理员对医生检索 ( yno int =null)AsIf yno is nullBeginPrint 请输入医生编号 EndElseBeginSelect 医生 . 年龄 , 姓名 , 联系方式 , 职位 . 职称 , 所属科室From 医生 join 职位 on 医生 . 职位编号 =职位 . 职位编号Where yno=医生 . 医生编号End2
19、管理员查询病人基本信息检索 :输入病人编号 ,返回病人的姓名、年龄、联系方式、地址Create procedure 管理员查询病人基本信息检索 ( Bno int =null)AsIf Bno is nullBeginPrint 请输入病人编号 EndElseBeginSelect 病人 . 姓名 , 年龄 , 联系方式 , 住址From 病人End3病例检索 :输入病人编号 ,返回姓名、诊断结果、就诊日期、病房号、床号、入住日期Create procedure 病例检索 ( Bno2 int =null)AsIf Bno2 is nullBeginPrint 请输入病人编号来查询病例 End
20、ElseBeginSelect 病人 . 病人编号 , 姓名 , 就诊 . 诊断结果 , 就诊时间 , 入住 . 病房号 , 床位号 , 入住时间From 病人 join 就诊 on 病人 . 病人编号 =就诊 . 病人编号Join 入住 on 入住 . 病人编号 =病人 . 病人编号End4医生对个人信息检索 : 输入医生编号 ,返回医生的姓名 年龄 联系方式 职称 科室Create procedure 医生对个人信息检索 ( yno int =null)AsIf yno is nullBeginPrint 请输入医生编号 EndElseBeginSelect 医生 . 年龄 , 姓名 ,
21、联系方式 , 职位 . 职称 , 所属科室From 医生 join 职位 on 医生 . 职位编号 =职位 . 职位编号Where yno=医生 . 医生编号End5医生查询病人病例检索 :输入病人编号 ,返回姓名、 诊断结果、 就诊日期、 病房号、 床号、入住日期Create procedure 医生查询病人病例检索 ( Bno2 int =null)AsIf Bno2 is nullBeginPrint 请输入病人编号来查询病例 EndElseBeginSelect 病人 . 病人编号 , 姓名 , 就诊 . 诊断结果 , 就诊时间 , 入住 . 病房号 , 床位号 , 入住时间From
22、病人 join 就诊 on 病人 . 病人编号 =就诊 . 病人编号Join 入住 on 入住 . 病人编号 =病人 . 病人编号End6病人查询病人基本信息检索 : 输入病人编号 ,返回病人的姓名、年龄、联系方式、地址Create procedure 病人查询病人基本信息检索 ( Bno int =null)AsIf Bno is nullBeginPrint 请输入病人编号 EndElseBeginSelect 病人 . 姓名 , 年龄 , 联系方式 , 住址From 病人End7病人查询病人病例检索 :输入病人编号 ,返回姓名、 诊断结果、 就诊日期、 病房号、 床号、入住日期Creat
23、e procedure 病人查询病人病例检索 ( Bno2 int =null)AsIf Bno2 is nullBeginPrint 请输入病人编号来查询病例 EndElseBeginSelect 病人 . 病人编号 , 姓名 , 就诊 . 诊断结果 , 就诊时间 , 入住 . 病房号 , 床位号 , 入住时间From 病人 join 就诊 on 病人 . 病人编号 =就诊 . 病人编号Join 入住 on 入住 . 病人编号 =病人 . 病人编号End( 2)插入数据1系统管理员插入医生数据 .Create procedure 系统管理员插入医生数据 ( 医生编号 char ( 10),
24、姓名 char ( 10 ), 年龄char ( 10 ), 联系方式 char ( 20 ), 职位编号 char ( 4), 任职时间 char ( 20 ), 职称 char ( 10 ), 所属科室 char ( 10 )AsInsert into 医生Values ( 医生编号 , 姓名 , 年龄 , 联系方式 , 职位编号 , 任职时间 )Insert into 职称Values ( 职位编号 , 职称 , 所属科室 )2医生插入病人数据create procedure 医生插入病人数据 ( 病人编号 char ( 4), 姓名 char ( 10 ), 年龄 char ( 10
25、), 联系方式 char ( 20 ), 住址 char ( 30 )AsInsert into 病人Values ( 病人编号 , 姓名 , 年龄 , 联系方式 , 住址 )(3)数据修改a)医生信息修改Create procedure 医生信息修改 ( 医生编号 char ( 4 ), 姓名 char ( 10 )= 姓名 , 年龄 char ( 10 )= 年龄 , 联系方式 char ( 20 )= 联系方式 , 职位编号 char ( 4)= 职位编号 , 任职时间 char ( 20 )= 任职时间 )AsUpdate 医生Set 姓名 =姓名 , 年龄 =年龄 , 联系方式 = 联系方式 , 职位编号 = 职位编号 , 任职时间 =任职时间Where 医生编号 = 医生编号b)医生部分信息修改Create procedure 医生部分信息修改 ( 医生编号 char ( 4), 联系方式 char ( 20 )= 联系方式 )AsUpdate 医生Set 联系方式 = 联系方式c)病人信息修改Create procedure 病人信息修改 ( 病人编号 char ( 4), 姓名 char ( 10 )= 姓名 , 年龄 char ( 10 )= 年龄 , 联系方式 char ( 20 )= 联系方式 , 住址 varchar ( 30 )= 住址 )AsUpda