1、题目:医院病例数据库管理系统学 院 管理和经济学部专 业 工程管理 年 级 级 成 员 王艳旭 (一班) 需求分析,E-R图,数据修改,数据插入杨志东( 二班) 逻辑设计,物理设计,数据表、索引建立谢中仁 (二班) 视图建立,存放过程建立 12月16日目录: 一、需求分析31) 医生信息管理2) 病人病例和病房管理 (1)数据检索 (2)数据插入 (3)数据修改 (4)数据统计和查询二、概念设计4 (1)医生实体 (2)职位实体 (3)病人实体 (4)病房实体 (5)全局E-R图三、逻辑设计6四、物理设计6五、系统实现8 1、数据库建立 2、数据表建立 3、数据输入 4、索引创建 5、视图创建
2、 6、存放过程创建一、 需求分析实现某医院病例数据库管理系统,系统使用对象是系统管理员,医生和病人,要求完成以下工作:1) 医生信息管理,包含l 系统管理员进行新医生到岗、现有医生离职处理l 系统管理员能够修改任何医生全部信息,如姓名、年纪、职称、科室l 医生能够查阅自己信息并修改其中一些基础信息,如联络方法等2) 病人病例和病房管理l 医生能够添加新病人,修改或删除已经有病人信息l 医生能够添加新病例统计,形成病人诊疗日志。l 管理员能够任意查询全部医生或病人情况和病例l 管理员能够统计任意医生病人或任意病人病例l 病人能查看自己基础信息和病例信息(1) 数据检索i. 系统管理员查询全部医生
3、情况输入:医生编号输出:姓名、年纪、联络方法、职称、科室。ii. 系统管理员查询全部病人基础信息输入:病号输出:姓名、年纪、联络方法、地址。iii. 系统管理员查询全部病人病例输入:病号输出:姓名、诊疗结果、就诊日期、病房号、床号、入住日期、出院日期。iv. 医生查询自己信息输入:医生编号输出:姓名、年纪、联络方法、职称、科室。v. 医生查询病人病例输入:病号输出:姓名、诊疗结果、就诊日期、病房号、床号、入住日期。vi. 病人查询自己基础信息输入:病号输出:姓名、年纪、联络方法、地址。vii. 病人查询自己病例输入:病号输出:姓名、诊疗结果、就诊时间、病房号、床号、入住日期。(2) 数据插入i
4、. 系统管理员插入医生数据。ii. 医生插入病人数据。(3) 数据修改i. 系统管理员修改全部医生信息:医生编号、姓名、年纪、联络方法、职称、科室、任职时间。ii. 医生修改自己部分信息:联络方法。iii. 医生修改病人信息:姓名、年纪、联络方法、地址、诊疗结果、就诊日期、病房号、床号、入住日期。(4) 数据统计和查询i. 管理员:显示全部医生情况。ii. 管理员:显示全部病人情况。iii. 管理员:显示全部医生全部病人。iv. 管理员:显示全部病人全部病例。二、 概念设计概念设计任务是,在需求分析中产生需求说明基础上,抽象出满足应用需求用户信息结构,即概念模型。经需求分析,抽象出以下ER模型
5、。(1) 医生实体(图1)(2) 职位实体(图2)(3) 病人实体(图3)(4)病房实体(图4)(5)全局ER图(图5)三、逻辑设计逻辑设计阶段将概念设计阶段产生E-R图转换成RDBMS所支持数据模型,即关系模型。依据图5E-R图转换为以下关系模式:医生(医生编号,姓名,年纪,联络方法,职位编号,任职时间)职位(职位编号,职称,所属科室)病人(病人编号,姓名,年纪,联络方法,住址)病房(病房号,病床数,病房联络电话)入住(病人编号,病房号,床位号,入住时间),主键为(病人编号,病房号)就诊(病人编号,医生编号,诊疗结果,就诊日期),主键为(病人编号,医生号)查房(医生编号,病房号,值班时间),
6、主键为(医生编号,病房号)其中带有下划直线属性为主键,带有下划波浪线属性为外键。以上关系模式均满足3NF。四、物理设计物理设计阶段将关系模式设计为具体RDBMS中数据表。依据以上关系模式构建数据表结构如表17所表示。表1 医生表结构字段名 类型 特殊属性医生编号 char(4) PRIMARY KEY姓名 char(10) NOT NULL年纪 char(10) NOT NULL联络方法 char(20) NOT NULL职位编号 char(4) FOREIGN KEY任职时间 char(20) NOT NULL表2 职位表结构字段名 类型 特殊属性职位编号 char(4) PRIMARY K
7、EY职称 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) 表5 入住表结构字段名 类型 特殊属性病人编号 char(4) PRIMARY KEY,FOREIGN KEY病房号 char(4) PRIMARY KEY,F
8、OREIGN KEY床位号 char(4) NOT NULL入住时间 char(20) NOT NULL表6 就诊表结构字段名 类型 特殊属性病人编号 char(4) PRIMARY KEY,FOREIGN KEY医生编号 char(4) PRIMARY KEY,FOREIGN KEY诊疗结果 varchar(100) NOT NULL就诊时间 char(20)表7查房表结构字段名 类型 特殊属性医生编号 char(4) PRIMARY KEY,FOREIGN KEY病房号 char(4) PRIMARY KEY,FOREIGN KEY值班时间 char(20) NOT NULL五、 系统实现
9、1. 数据库建立Create database 医院病例On primary(name=医院病例_data,filename=E:医院病例data.mdf)Log on(name=医院病例_log,filename=E:医院病例log.ldf)2. 数据表建立Use 医院病例GoCreate table 职位( 职位编号 char(4) PRIMARY KEY,职称 char(10) NOT NULL,所属科室 char(10)Create table 医生(医生编号 char(4) PRIMARY KEY,姓名 char(10) NOT NULL,年纪 char(10) NOT NULL,联
10、络方法 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,病床数 int,病房联络方法 char(11)Create table 入住(病人编号 ch
11、ar(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(100) NOT NULL,就诊时间 char(20),PRIMARY KEY(病人编号, 医生编号),FOREIGN KEY(病人编号)references 病人(病人编号),
12、FOREIGN KEY(医生编号)references 医生(医生编号),)Create table 查房(医生编号 char(4),病房号 char(4),值班时间 char(20) NOT NULL,PRIMARY KEY(医生编号,病房号),FOREIGN KEY(医生编号)references 医生(医生编号),FOREIGN KEY(病房号)references 病房(病房号)3. 数据输入 Insert into 职位Values (J1, 眼科医生, 眼科室)Insert into 职位Values (J2, 内科医生, 内科室)Insert into 医生Values (D00
13、1,李明,45,139*1111, J1, .03.09)Insert into 医生Values (D002, 张强, 50, 139*2222, J2, .12.04)Insert into 医生Values (D003, 陈龙, 54, 139*3333, J1, .08.17)Insert into 医生Values (D004, 刘红, 36, 139*4444, J2, .06.13)Insert into 病人Values (P001, 张三, 30, 159*1111, 北京市)Insert into 病人Values (P002, 李四, 39, 159*2222, 天津市)
14、Insert into 病人Values (P003, 王五, 44, 159*3333, 廊坊市)Insert into 病人Values (P004, 赵六, 27, 159*4444, 唐山市)Insert into 病房Values (R101, 4, )Insert into 病房Values (R102, 2, )Insert into 入住Values (P003, R101, 1, .08.10)Insert into 入住Values (P004, R102, 2, .12.09)Insert into 就诊Values (P001, D001, 白内障, .06.11)In
15、sert into 就诊Values (P002, D003, 青光眼, .07.22)Insert into 就诊Values (P003, D002, 阑尾炎, .08.10)Insert into 就诊Values (P004, D004, 胃出血, .12.09)Insert into 查房Values (D001, R101,.12.09)Insert into 查房Values (D002, R102,.12.10)4. 索引创建(1)医生表:按医生任职时间降序排列Create index 医生_任职时间 on 医生(任职时间 desc)(2)病人表:按病人编号升序排列Create
16、 index 病人_病人编号 on 病人(病人编号)(3)职位表:按职位编号升序排列Create index 职位_职位编号 on 职位(职位编号)(4)病房表:按病房号升序排列Create index 病房_病房号 on 病房(病房号)5.视图创建医生情况视图:显示全部医生情况create view 医生情况视图as select 医生.医生编号,姓名,年纪,联络方法,职位.职称,所属科室from 医生 join 职位 on 医生.职位编号 = 职位.职位编号病人情况视图:显示全部病人情况Create view 病人情况视图asSelect *From 病人医生和病人视图:显示任意医生全部病
17、人Create view 医生和病人视图asSelect 医生.姓名 as 医生姓名,病人.姓名 as 病人姓名From 就诊 join 医生 on 医生.医生编号=就诊.医生编号Join 病人 on 病人.病人编号=就诊.病人编号病例视图:显示病人病例create view 病例视图asSelect 病人.姓名,就诊.*From 病人 join 就诊 on 病人.病人编号=就诊.病人编号6.存放过程创建(1)检索数据管理员对医生检索:输入医生编号,返回医生姓名年纪联络方法职称科室Create procedure 管理员对医生检索(yno int=null)AsIf yno is nullBe
18、ginPrint 请输入医生编号EndElse BeginSelect 医生.年纪,姓名,联络方法,职位.职称,所属科室From 医生 join 职位 on 医生.职位编号=职位.职位编号Where yno=医生.医生编号End管理员查询病人基础信息检索:输入病人编号,返回病人姓名、年纪、联络方法、地址Create procedure 管理员查询病人基础信息检索(Bno int=null)As If Bno is null Begin Print请输入病人编号End Else Begin Select 病人.姓名,年纪,联络方法,住址From 病人End病例检索:输入病人编号,返回姓名、诊疗结
19、果、就诊日期、病房号、床号、入住日期Create procedure 病例检索(Bno2 int=null)As If Bno2 is null BeginPrint请输入病人编号来查询病例EndElseBeginSelect 病人.病人编号,姓名,就诊.诊疗结果,就诊时间,入住.病房号,床位号,入住时间From 病人 join 就诊 on 病人.病人编号=就诊.病人编号 Join 入住 on 入住.病人编号=病人.病人编号End医生对个人信息检索:输入医生编号,返回医生姓名年纪联络方法职称科室Create procedure 医生对个人信息检索 (yno int=null)AsIf yno
20、is nullBeginPrint请输入医生编号EndElse BeginSelect 医生.年纪,姓名,联络方法,职位.职称,所属科室From 医生 join 职位 on 医生.职位编号=职位.职位编号Where yno=医生.医生编号End医生查询病人病例检索:输入病人编号,返回姓名、诊疗结果、就诊日期、病房号、床号、入住日期Create procedure 医生查询病人病例检索(Bno2 int=null)As If Bno2 is null BeginPrint请输入病人编号来查询病例EndElseBeginSelect 病人.病人编号,姓名,就诊.诊疗结果,就诊时间,入住.病房号,床
21、位号,入住时间From 病人 join 就诊 on 病人.病人编号=就诊.病人编号 Join 入住 on 入住.病人编号=病人.病人编号End病人查询病人基础信息检索:输入病人编号,返回病人姓名、年纪、联络方法、地址Create procedure 病人查询病人基础信息检索(Bno int=null)As If Bno is null Begin Print请输入病人编号End Else Begin Select 病人.姓名,年纪,联络方法,住址From 病人End病人查询病人病例检索:输入病人编号,返回姓名、诊疗结果、就诊日期、病房号、床号、入住日期Create procedure 病人查询
22、病人病例检索(Bno2 int=null)As If Bno2 is null BeginPrint请输入病人编号来查询病例EndElseBeginSelect 病人.病人编号,姓名,就诊.诊疗结果,就诊时间,入住.病房号,床位号,入住时间From 病人 join 就诊 on 病人.病人编号=就诊.病人编号 Join 入住 on 入住.病人编号=病人.病人编号End(2)插入数据系统管理员插入医生数据.Create procedure 系统管理员插入医生数据(医生编号 char(10),姓名 char(10),年纪 char(10),联络方法 char(20),职位编号 char(4),任职时
23、间 char(20),职称 char(10),所属科室 char(10)As Insert into 医生 Values(医生编号,姓名,年纪,联络方法,职位编号,任职时间) Insert into 职称 Values(职位编号,职称,所属科室)医生插入病人数据create procedure 医生插入病人数据(病人编号 char(4),姓名 char(10),年纪 char(10),联络方法 char(20),住址 char(30)As Insert into 病人 Values (病人编号,姓名,年纪,联络方法,住址)(3)数据修改a)医生信息修改Create procedure 医生信息
24、修改(医生编号 char(4),姓名 char(10)=姓名,年纪 char(10)=年纪,联络方法 char(20)=联络方法,职位编号 char(4)=职位编号,任职时间 char(20)=任职时间)As Update 医生Set 姓名=姓名, 年纪=年纪, 联络方法=联络方法, 职位编号=职位编号, 任职时间=任职时间Where 医生编号= 医生编号b)医生部分信息修改Create procedure 医生部分信息修改(医生编号 char(4), 联络方法 char(20)=联络方法)As Update 医生Set 联络方法=联络方法c)病人信息修改Create procedure 病人信息修改(病人编号 char(4),姓名 char(10)=姓名,年纪 char(10)=年纪,联络方法 char(20)=联络方法,住址 varchar(30)=住址)AsUpdate 病人Set 姓名=姓名, 年纪=年纪, 联络方法=联络方法, 住址=住址Where 病人编号=病人编号