题目:医院病例数据库管理系统学院管理与经济学部专业工程管理年级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、数据的输入4、索引的创建5、视图的创建6、存储过程的创建一、需求分析实现某医院病例数据库管理系统,系统使用对象是系统管理员,医生和病人,要求完成以下工作:1)医生信息管理,包括系统管理员进行新医生到岗、现有医生离职处理系统管理员可以修改任何医生的所有信息,如姓名、年龄、职称、科室医生可以查阅自己的信息并修改其中某些基本信息,如联系方式等2)病人病例和病房管理医生可以添加新病人,修改或删除已有病人的信息医生可以添加新的病例记录,形成病人治疗日志。管理员可以任意查询所有医生或病人的情况和病例管理员可以统计任意医生的病人或者任意病人的病例病人能查看自己的基本信息和病例信息(1)数据检索i.系统管理员查询所有医生的情况输入:医生编号输出:姓名、年龄、联系方式、职称、科室。ii.系统管理员查询所有病人的基本信息输入:病号输出:姓名、年龄、联系方式、地址。iii.系统管理员查询所有病人的病例输入:病号输出:姓名、诊断结果、就诊日期、病房号、床号、入住日期、出院日期。iv.医生查询自己的信息输入:医生编号输出:姓名、年龄、联系方式、职称、科室。v.医生查询病人的病例输入:病号输出:姓名、诊断结果、就诊日期、病房号、床号、入住日期。vi.病人查询自己的基本信息输入:病号输出:姓名、年龄、联系方式、地址。vii.病人查询自己的病例输入:病号输出:姓名、诊断结果、就诊时间、病房号、床号、入住日期。(2)数据插入i.系统管理员插入医生数据。ii.医生插入病人数据。(3)数据修改i.系统管理员修改所有医生的信息:医生编号、姓名、年龄、联系方式、职称、科室、任职时间。ii.医生修改自己的部分信息:联系方式。iii.医生修改病人的信息:姓名、年龄、联系方式、地址、诊断结果、就诊日期、病房号、床号、入住日期。(4)数据统计与查询i.管理员:显示所有医生的情况。ii.管理员:显示所有病人的情况。iii.管理员:显示所有医生的全部病人。iv.管理员:显示所有病人的全部病例。二、概念设计概念设计的任务是,在需求分析中产生的需求说明的基础上,抽象出满足应用需求的用户的信息结构,即概念模型。经需求分析,抽象出以下E—R模型。(1)医生实体(图1)(2)职位实体(图2)(3)病人实体(图3)(4)病房实体(图4)(5)全局E—R图(图5)三、逻辑设计逻辑设计阶段将概念设计阶段产生的E-R图转换成RDBMS所支持的数据模型,即关系模型。根据图5的E-R图转换为以下关系模式:医生(医生编号,姓名,年龄,联系方式,职位编号,任职时间)职位(职位编号,职称,所属科室)病人(病人编号,姓名,年龄,联系方式,住址)病房(病房号,病床数,病房联系电话)入住(病人编号,病房号,床位号,入住时间),主键为(病人编号,病房号)就诊(病人编号,医生编号,诊断结果,就诊日期),主键为(病人编号,医生号)查房(医生编号,病房号,值班时间),主键为(医生编号,病房号)其中带有下划直线的属性为主键,带有下划波浪线的属性为外键。以上关系模式均满足3NF。四、物理设计物理设计阶段将关系模式设计为具体的RDBMS中的数据表。根据以上关系模式构建的数据表结构如表1~7所示。表1医生表结构字段名类型特殊属性五、系统实现1.数据库的建立Create病例database医院Onprimary例(name=医院病_data,filename='E:\\医院病例data.mdf')Logon(name=医院病例_log,filename='E:\\医院病例log.ldf')2.数据表的建立Use医院病例GoCreatetable职位(职位编号char(4)PRIMARYKEY,职称char(10)NOTNULL,所属科室char(10))Createtable医生(医生编号char(4)PRIMARYKEY,医生编号char(4)PRIMARYKEY姓名char(10)NOTNULL年龄char(10)NOTNULL联系方式char(20)NOTNULL职位编号char(4)FOREIGNKEY任职时间char(20)NOTNULL表2职位表结构字段名类型特殊属性职位编号char(4)PRIMARYKEY职称char(10)NOTNULL所属科室char(10)表3病人表结构字段名类型特殊属性病人编号char(4)PRIMARYKEY姓名char(10)NOTNULL年龄char(10)NOTNULL联系方式char(20)NOTNULL住址varchar(30)表4病房表结构字段名类型特殊属性病房号char(4)PRIMARYKEY病床数int病房联系方式char(11)表5入住表结构字段名类型特殊属性病人编号char(4)PRIMARYKEY,FOREIGNKEY病房号char(4)PRIMARYKEY,FOREIGNKEY床位号char(4)NOTNULL入住时间char(20)NOTNULL表6就诊表结构字段名类型特殊属性病人编号char(4)PRIMARYKEY,FOREIGNKEY医生编号char(4)PRIMARYKEY,FOREIGNKEY诊断结果varchar(100)NOTNULL就诊时间char(20)表7查房表结构字段名类型特殊属性医生编号char(4)PRIMARYKEY,FOREIGNKEY病房号char(4)PRIMARYKEY,FOREIGNKEY值班时间char(20)NOTNULL姓名char(10)NOTNULL,年龄char(10)NOTNULL,联系方式char(20)NOTNULL,职位编号char(4),任职时间char(20)NOTNULL,FOREIGNKEY(职位编号)references职位(职位编号))Createtable病人(病人编号char(4)PRIMARYKEY,姓名char(10)NOTNULL,年龄char(10)NOTNULL,联系方式char(20)NOTNULL,住址varchar(30))Createtable病房(病房号char(4)PRIMARYKEY,病床数int,病房联系方式char(11))Createtable入住(病人编号char(4),病房号char(4),床位号char(4)NOTNULL,入住时间char(20)NOTNULL,PRIMARYKEY(病人编号,病房号),FOREIGNKEY(病人编号)references病人(病人编号),FOREIGNKEY(病房号)references病房(病房号))Createtable就诊(病人编号char(4),医生编号char(4),诊断结果varchar(100)NOTNULL,就诊时间char(20),PRIMARYKEY(病人编号,医生编号),FOREIGNKEY(病人编号)references病人(病人编号),FOREIGNKEY(医生编号)references医生(医生编号),)Createtable查房(医生编号char(4),病房号char(4),值班时间char(20)NOTNULL,PRIMARYKEY(医生编号,病房号),FOREIGNKEY(医生编号)references医生(医生编号),FOREIGNKEY(病房号)references病房(病房号))3.数据的输入Insertinto职位Values('J1','眼科医生','眼科室')Insertinto职位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('D004','刘红','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',)Insertinto入住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','R102',)4.索引的创建(1)医生表:按医生任职时间降序排列Createindex医生_任职时间on医生(任职时间desc)(2)病人表:按病人编号升序排列Createindex病人_病人编号on病人(病人编号)(3)职位表:按职位编号升序排列Createindex职位_职位编号on职位(职位编号)(4)病房表:按病房号升序排列Createindex病房_病房号on病房(病房号)5.视图的创建①医生情况视图:显示所有医生的情况createview医生情况视图asselect医生.医生编号,姓名,年龄,联系方式,职位.职称,所属科室from医生join职位on医生.职位编号=职位.职位编号②病人情况视图:显示所有病人的情况Createview病人情况视图asSelect*From病人③医生与病人视图:显示任意医生的全部病人Createview医生与病人视图asSelect医生.姓名as医生姓名,病人.姓名as病人姓名From就诊join医生on医生.医生编号=就诊.医生编号Join病人on病人.病人编号=就诊.病人编号④病例视图:显示病人病例createview病例视图asSelect病人.姓名,就诊.*From病人join就诊on病人.病人编号=就诊.病人编号6.存储过程的创建(1)检索数据①管理员