1、内容摘要数据库的设计是指对一个给定的应用环境,构造数据库模式,建立数据库及其应用系统,满足各种用户需求。作为信息资源开发、管理和服务的一种有效的手段,数据库技术的应用已越来越广泛,从小型的单项事务处理系统到大型的信息系统大都用先进的数据库技术来保持系统数据的安全性、完整性和共享性。对一个实际的系统来说,数据库表的设计在遵循数据库理论的同时,必须能用开发工具来实现用户在各方面提出的功能要求。本医院管理系统是经过实地需求分析调查、通过概念机构设计与逻辑结构设计等过程后完成的一个小型管理系统,包括:对医生、护士、收费人员、病人、药品及检查的各种基本信息的查询功能,对病人病房、收费的管理功能等。同时对
2、不同的人员授予不同的权利,保证了数据库的安全性。关键词:医院管理 需求分析 查询 住院管理 收费管理目 录第一章 需求分析 51.1 信息要求 .51.2 处理要求 .51.3 安全性和完整性要求 .5第二章 概念结构设计 12.1 分 E-R 流程图 .12.2 总 E-R 流程图 .4第三章 逻辑结构设计 53.1 关系模型 .53.2 设计用户子模式 .5第四章 物理结构设计 6第五章 数据库实施 95.1 创建医院管理系统 .95.2 创建必要索引 105.3 建立视图 105.4 建立必要的存储过程及触发器 11第六章 数据库应用系统的实施和维护 .13总结 18致谢 19参考文献
3、20附录 20医院管理系统第一章 需求分析1.1信息要求本系统实现了以下信息:基本信息模块:包括行政人员信息、医生信息、护士信息、收费人员信息、病人信息、病房信息、药品信息。管理信息模块:人员管理(员工、病人)、药品管理、住院部管理、收费管理。1.2处理要求要求本系统能够投入实际的使用并且满足基本的功能要求。要求具有较高的可靠性、安全性和易维护性,具有较高的可移植性。具体要求如下:(1)基本信息查询该查询主要是指对医生、病人等信息的查询。(2)医患病人来医院看病,为其选择科室,进而选择医生,对病人挂号登陆就医信息。(3)收费病人通过自己的编号可以到收费窗口查询和缴纳自己的药费和检查费。(4)住
4、院对住院的病人在住院部登录信息,住院部确定病人病房病床,安排所属区域护士对病人进行辅助治疗和看护。1.3安全性和完整性要求该系统对不同人员进行了不同的权限设置:行政人员可以查看医院数据库中的任何信息、医生只能查询病人及病人住院的信息,收费人员只能查看收费信息。第二章 概念结构设计2.1分 E-R流程图图 2-1 行政人员概念模型图 2-2 医生概念模型图 2-3 护士概念模型行政人员编号姓名性别联系方式职务年龄医生编号姓名性别联系方式所属科室年龄护士编号姓名性别所属科室 年龄图 2-4 病人概念模型图 2-5 检查、药品概念模型图 2-6 收费人员概念模型图 2-7 病房病床概念模型病人编号姓
5、名性别联系方式所属科室年龄检查、药品编号 名称价格 位置收费人员编号 姓名性别 年龄病床信息编号所属科室 标志量图 2-8 医患关系概念模型图 2-9 病人住院概念模型图 2-10 收费信息概念模型病人住院医生编号病人编号护士编号住院时间 住院床位号收费信息收费员编号编号病人编号药品编号 总价格医患关系医生编号病人编号 看病时间2.2总 E-R流程图医生病人医患收费员住院部缴费住院护士属于图 2-11 总体 E-R 概念模型第三章 逻辑结构设计3.1关系模型系统中所涉及的关系如下:行政人员(行政人员编号,行政人员姓名,性别,年龄,职务,联系方式)医生(医生编号,医生姓名,性别,年龄,所属科室,
6、联系方式)病人(病人编号,病人姓名,性别,年龄,就医科室,联系方式)住院部(病房病床编号,所属科室,是否住人)护士(护士编号,护士姓名,性别,年龄,所属科室)检查及药品(检查或药品编号,检查或药品名称,单价,检查或存放地点)收费人员(收费人员编号,收费人员姓名,性别,年龄)医患(医生编号,病人编号,就医时间)收费(收费流水账号,收费人员编号,病人编号,药品或检查编号,数量,价格)住院管理(病床号,病人编号,医生编号,护士编号,入住时间)3.2设计用户子模式根据用户的需求,也为了保护系统的安全性,本系统设计了下面一些视图:病人基本信息查询表(病人编号,病人姓名,性别,年龄,就医科室,联系方式,主
7、治医生编号,主治医生姓名,就医时间) ;住院管理查询表(病床号,病人编号,病人姓名,所属区域,入住时间,所属区域护士编号,护士姓名) ;收费信息表(收费流水账号,收费人员编号,病人编号,药品或检查编号,数量,价格) 。第四章 物理结构设计表 4-1 行政人员表表 4-2 医生信息表表 4-3 护士信息表表 4-4 病人信息表字段名 字段类型 长度 主键或外键 字段值约束 对应中文属性名Ano varchar 10 Primary Key Not null 行政人员编号Aname varchar 20 Not null 行政人员姓名Asex char 2 行政人员性别Aage int 行政人员年
8、龄Adept varchar 30 行政人员职务Atel varchar 11 行政人员联系方式字段名 字段类型 长度 主键或外键 字段值约束 对应中文属性名Dno varchar 10 Primary Key Not null 医生编号Dname varchar 20 Not null 医生姓名Dsex char 2 医生性别Dage int 医生年龄Ddept varchar 30 医生所属科室Dtel varchar 11 医生联系方式字段名 字段类型 长度 主键或外键 字段值约束 对应中文属性名Nno varchar 10 Primary Key Not null 护士编号Nname
9、varchar 20 Not null 护士姓名Nsex char 2 护士性别Nage int 护士年龄Ndept varchar 30 Not null 护士所属科室字段名 字段类型 长度 主键或外键 字段值约束 对应中文属性名Pno varchar 10 Primary Key Not null 病人编号Pname varchar 20 Not null 病人姓名Psex char 2 病人性别表 4-5 收费人员信息表表 4-6 检查及药品信息表表 4-7 病房病床信息表表 4-8 医患关系表表 4-9 住院信息表Page int 病人年龄Pdept varchar 30 Not nu
10、ll 病人就医科室Ptel varchar 11 病人联系方式字段名 字段类型 长度 主键或外键 字段值约束 对应中文属性名Cno varchar 10 Primary Key Not null 收费人员编号Cname varchar 20 Not null 收费人员姓名Csex char 2 收费人员性别Cage int 收费人员年龄字段名 字段类型 长度 主键或外键 字段值约束 对应中文属性名Dnum varchar 10 Primary Key Not null 检查或药品编号Dnam varchar 20 Not null 检查或药品名称Dprice money 检查或药品价格Dsto
11、rage varchar 30 检查地点或药品存放处字段名 字段类型 长度 主键或外键 字段值约束 对应中文属性名Hbednumber char 6 Primary Key Not null 病床编号Hdept varchar 30 病床所属科室Hflag int Not null 病床是否住人字段名 字段类型 长度 主键或外键 字段值约束 对应中文属性名Dno char 6 Primary Key Not null 医生编号Pnot varchar 30 Primary Key Not null 病人编号DPTime int 看病时间字段名 字段类型 长度 主键或外键 字段值约束 对应中文属
12、性名Pno varchar 10 Foreign Key 病人编号Dno varchar 10 Foreign Key 医生编号Nno varchar 10 Foreign Key 护士编号HTime Date 入住时间Hbednumber char 6 Primary Key Not null 病床号表 4-10 收费信息表字段名 字段类型 长度 主键或外键 字段值约束 对应中文属性名Tno varchar 10 Primary Key Not null 收费流水账号Cno varchar 10 Foreign Key 收费人员编号Pno varchar 10 Foreign Key 病人编
13、号Dnum varchar 10 Foreign Key 药品或检查编号Tnumber int 数量Tprice money 6 价格第五章 数据库实施5.1创建医院管理系统-创建医院管理系统数据库CREATE DATABASE hospitalsystemON(NAME=hospital_data,FILENAME=e:05hospital_data.mdf,SIZE=10MB,MAXSIZE=300MB,FILEGROWTH=10%)LOG ON(NAME=hospital_log,FILENAME=e:05hospital_data.ldf,SIZE=5MB,MAXSIZE=200MB,
14、FILEGROWTH=2MB)-例举创建各类信息表创建医生信息表CREATE TABLE Doctor ( Dno VARCHAR(10) PRIMARY KEY,Dname VARCHAR(20),Dsex VARCHAR(2),Dage INT,Ddept VARCHAR(50),Dtel VARCHAR(11);创建病人信息表CREATE TABLE Patient(Pno VARCHAR(10) PRIMARY KEY,Pname VARCHAR(20),Psex VARCHAR(2),Page INT,Ptel VARCHAR(11),Pdept VARCHAR(50);创建医生病人
15、关系表CREATE TABLE Doctor_Patient(Dno VARCHAR(10),Pno VARCHAR(10),DPTime Date,PRIMARY KEY(Dno,Pno),FOREIGN KEY(Dno) REFERENCES Doctor(Dno),FOREIGN KEY(Pno) REFERENCES Patient(Pno);创建住院病人信息表create table PHouse(Pno VARCHAR(10),Dno VARCHAR(10),Nno VARCHAR(10),HTime Date,Hbednumber CHAR(6) PRIMARY KEY,FORE
16、IGN KEY(Dno) REFERENCES Doctor(Dno),FOREIGN KEY(Pno) REFERENCES Patient(Pno),FOREIGN KEY(Nno) REFERENCES Nurse(Nno);创建收费信息表CREATE TABLE Charge(Tno VARCHAR(10) PRIMARY KEY,Cno VARCHAR(10),Pno VARCHAR(10),Dnum VARCHAR(10),Tnumber INT,Tprice MONEY,FOREIGN KEY(Cno) REFERENCES Charger(Cno),FOREIGN KEY(Pn
17、o) REFERENCES Patient(Pno),FOREIGN KEY(Dnum) REFERENCES Drug(Dnum);5.2创建必要索引CREATE INDEX Administor_INDEX ON Administor(Ano);CREATE INDEX Doctor_INDEX ON Doctor(Dno);CREATE INDEX Nurse_INDEX ON Nurse(Nno) ;CREATE INDEX Patient_INDEX ON Patient(Pno);CREATE INDEX Drug_INDEX ON Drug(Dnum);CREATE INDEX
18、House_INDEX ON House(Hbednumber);5.3建立视图-创建医生信息视图CREATE VIEW 医生信息_VIEWASSELECT Dno 医生编号,Dname 医生姓名,Dsex 性别,Dage 年龄,Ddept 部门,Dtel 电话FROM Doctor;SELECT * FROM 医生信息_VIEWWHERE 医生编号=D001;-创建收费人员信息视图CREATE VIEW 收费人员信息_VIEWASSELECT Cno 收费人员编号,Cnam 收费人员姓名,Cage 年龄,Csex 性别FROM Charger;SELECT * FROM 收费人员信息_VIE
19、WWHERE 收费人员编号=C001;-创建病人信息视图CREATE VIEW 病人信息_VIEWASSELECT Patient.Pno 病人编号,Pname 病人姓名,Psex 性别,Page 年龄,Ptel 电话,Pdept 就诊科室,Doctor.Dno 主治医生编号,Dname 主治医生姓名,DPTime 就诊时间FROM Patient,Doctor,Doctor_PatientWHERE Patient.Pno=Doctor_Patient.Pno AND Doctor_Patient.Dno=Doctor.Dno;SELECT * FROM 病人信息_VIEWWHERE 病人编
20、号=P001;-创建住院部管理视图CREATE VIEW 住院部信息_VIEWASSELECT House.Hbednumber 病房床位编号,Patient.Pno 病人编号,Pname 病人姓名,Hdept 所属区域,Nurse.Nno 所属护士编号,Nname 所属护士姓名FROM House,Nurse,Patient,PHouseWHERE House.Hbednumber=PHouse.Hbednumber AND PHouse.Nno=Nurse.Nno AND PHouse.Pno=Patient.Pno;SELECT * FROM 住院部信息_VIEWWHERE 病房床位编号
21、=240902;-创建药品信息视图CREATE VIEW 检查及药品信息_VIEWASSELECT Dnum 编号,Dnam 名称,Dprice 单价,Dstorage 位置FROM Drug;-创建收费信息视图CREATE VIEW 收费信息_VIEWASSELECT Tno 收费编号,Cno 收费员编号,Pno 病人编号,Dnum 药品编号,Tnumber 数量,Tprice 价格FROM Charge;5.4建立必要的存储过程及触发器 触发器一 检查病人挂号与医生科目是否相同CREATE TRIGGER 病人医生ON Doctor_PatientFOR INSERTASDECLARE D
22、DEPT VARCHAR(20),PDEPT VARCHAR(20),DNO VARCHAR(20),PNO VARCHAR(20)BEGINSELECT DNO = Dno FROM INSERTEDSELECT PNO = Pno FROM INSERTEDSELECT DDEPT = Ddept FROM Doctor WHERE Dno = DNOSELECT PDEPT = Pdept FROM Patient WHERE Pno = PNOIF(DDEPT = PDEPT)PRINT 插入成功ELSE BEGINPRINT 无法插入ROLLBACKENDENDGO触发器二 检查病人
23、病房科目是否相,同病床是否有人CREATE TRIGGER 病人住院ON PHouseFOR INSERTASDECLARE BEDNUM VARCHAR(10),PNO VARCHAR(20),PDEPT VARCHAR(30),HDEPT VARCHAR(30),FLAG INTSELECT PNO = Pno FROM INSERTEDSELECT BEDNUM = Hbednumber FROM INSERTEDSELECT PDEPT = Pdept FROM Patient WHERE Pno = PNOSELECT HDEPT = Hdept FROM House WHERE H
24、bednumber = BEDNUMSELECT FLAG = Hflag FROM House WHERE Hbednumber = BEDNUMIF(FLAG = 1)BEGINPRINT 病房正在被使用!ROLLBACKEND ELSE BEGINIF(HDEPT != PDEPT)BEGIN PRINT 无法插入,病人居住科室不对!ROLLBACKENDELSEUPDATE House SET Hflag = 1 WHERE Hbednumber = BEDNUMENDGO插入收费信息表的存储过程CREATE PROC 收费 TNO VARCHAR(10),CNO VARCHAR(10
25、),PNO VARCHAR(10),DNUM VARCHAR(10),TNUMBER INTASDECLARE TPRICE MONEY,DPRICE MONEY SELECT DPRICE = Dprice FROM Drug WHERE Dnum = DNUMSET TPRICE = TNUMBER * DPRICEINSERT INTO Charge VALUES(TNO,CNO,PNO,DNUM,TNUMBER,TPRICE)GOEXEC 收费 1111111111,C001,P001,000123,4EXEC 收费1111111112,C001,P002,000127,3EXEC 收
26、费1111111113,C001,P003,000901,1SELECT * FROM Charge;第六章 数据库应用系统的实施和维护用户登陆界面请选择登陆身份行政领导 医生 收费员输入员工编号退出确认图 6-1 用户登录界面欢迎进入爱民医院管理系统请选择所需功能员工管理 病人管理住院部管理 收费管理检查及药品管理 返回上一级图 6-2 系统主界面员工管理系统请选择所需项医生管理 护士管理 收费人员管理返回上一级图 6-3 员工管理界面医生管理请输入医生编号确认 返回上一级图 6-4 医生信息查询窗口通过本窗体可以查询医生的基本信息。-创建医生信息视图CREATE VIEW 医生信息_VIE
27、WASSELECT Dno 医生编号,Dname 医生姓名,Dsex 性别,Dage 年龄,Ddept 部门,Dtel 电话FROM Doctor;SELECT * FROM 医生信息_VIEWWHERE 医生编号=D001;病人管理请输入病人编号确认 返回上一级图 6-5 病人信息查询窗口通过本窗口可以对病人的信息进行查询(包括:病人基本信息、主治医生及就医时间) 。-创建病人信息视图CREATE VIEW 病人信息_VIEWASSELECT Patient.Pno 病人编号,Pname 病人姓名,Psex 性别,Page 年龄,Ptel 电话,Pdept 就诊科室,Doctor.Dno 主
28、治医生编号,Dname 主治医生姓名,DPTime 就诊时间FROM Patient,Doctor,Doctor_PatientWHERE Patient.Pno=Doctor_Patient.Pno AND Doctor_Patient.Dno=Doctor.Dno;SELECT * FROM 病人信息_VIEWWHERE 病人编号=P001;住院部管理请输入所要查询的房间号确认 返回上一级图 6-6 住院信息查询窗口通过本窗口可以查询病房的信息(包括:病床基本信息、病人信息、所属护士信息) 。-创建住院部管理视图CREATE VIEW 住院部信息_VIEWASSELECT House.Hb
29、ednumber 病房床位编号,Patient.Pno 病人编号,Pname 病人姓名,Hdept 所属区域,Nurse.Nno 所属护士编号,Nname 所属护士姓名FROM House,Nurse,Patient,PHouseWHERE House.Hbednumber=PHouse.Hbednumber AND PHouse.Nno=Nurse.Nno AND PHouse.Pno=Patient.Pno;SELECT * FROM 住院部信息_VIEWWHERE 病房床位编号=240902;DROP VIEW 住院部信息_VIEW;收费管理返回上一级输入病人编号确认图 6-7 收费信息
30、查询窗口通过本窗口可以查到病人所要缴纳费用的具体信息(如具体检查费用、药品费用等) 。-创建收费信息视图CREATE VIEW 收费信息_VIEWASSELECT Tno 收费编号,Cno 收费员编号,Pno 病人编号,Dnum 药品编号,Tnumber 数量,Tprice 价格FROM Charge;SELECT * FROM 收费信息_VIEWWHERE 病人编号=P001;DROP VIEW 收费信息_VIEW;检查及药品管理输入编号返回上一级确认图 6-8 检查项目及药品信息查询窗口通过本窗口可以查询到药品的具体信息(如数量、编号、单价、存储位置等) ,还可以查到检查项目的具体信息。-
31、创建检查药品信息视图CREATE VIEW 检查及药品信息_VIEWASSELECT Dnum 编号,Dnam 名称,Dprice 单价,Dstorage 位置FROM Drug;SELECT * FROM 检查及药品信息_VIEWWHERE 编号=000123;总 结本次课程设计根据其具体情况,设计完成的是医院管理系统。通过本次课程设计巩固了刚学习的数据库理论知识,同时加强了对数据库应用方面的理解,深刻体会到了理论结合实践的学习方法。同时,在本次课程设计的完成过程中,学会了通过 Microsoft Office Excel 和 C#软件来画窗体,用 Word 画 E-R 图。并且对数据库设计
32、步骤更加熟悉,进一步学习了需求分析、概念结构设计、数据字典、系统功能模块、数据库完整性和安全性还有 SQL 语句的设计等的应用。当然,由于时间仓促和自身相关知识尚且不足,本次课程设计也存在不少不足之处。比如在考虑模块设计和各属性、实体间的关系时还不够完善,还有画出的图中可能存在不当的部分,编写的 SQL 语句也可能不够精准等。这些不足都是我在今后学习数据库相关知识时候需要加强的地方。本次课程设计学到了很多方面的知识,同时也在老师的帮助下顺利完成了。希望老师多多给予指导,在以后的学习、工作中,我会更加的努力致 谢本次数据库课程设计的题目是医院管理系统,在做需求分析时,我仔细思考了前一段时间我班同
33、学住院时的具体细节,同时也感谢多名同学的鼎力相助,他们的建议使我本次课设能够更好的完成。在编程过程中,我遇到了很多问题,能解决这些问题,是因为我获得了同学的帮助和老师的指导。我感谢你们,是你们帮助我将问题解决掉,让我完成了程序,收获了知识,也让我知道团队合作的重要性。在编写和调试的过程中,我们讨论和争辩的时刻是我这半年来最珍贵的记忆。通过这次课程设计,我知道了自己尚存在很多的不足,专业知识的欠缺。在今后的学习生活里,我会向你们学习,向你们看齐,继续努力。参考文献1 王珊,萨师煊.数据库系统概论M.北京:高等教育出版社,1997:91-1322 陈慧娟.数据库原理与应用北京:科学出版社,2006
34、3 狄文辉数据库原理与应用:SQL Server北京:清华大学出版社,20084 张龙祥等.数据库原理与设计.北京:人民邮电出版社,20025 陈志泊等.数据库原理及应用教程.北京:人民邮电出版社,20026 David J.Kruglinski 潘爱民、王国印译.Visual C+技术内幕(第四版). 清华大学出版社.19997 魏亮,李春葆编著.Visual C#程序设计例学与实践.清华大学出版社 .20068 启明工作室.VISUAL C# SQL SERVER 数据库应用系统开发与实例.人民邮电出版社 20059 Paul J.Fortier 等著.数据库技术大全.林瑶等译.北京:电子
35、工业出版社,199910 C.J.Date 著.数据库系统导论.孟小峰等译.北京:机械工业出版社,2000附 录USE MASTERGOCREATE DATABASE hospitalsystemON(NAME=hospital_data,FILENAME=e:05hospital_data.mdf,SIZE=10MB,MAXSIZE=300MB,FILEGROWTH=10%)LOG ON(NAME=hospital_log,FILENAME=e:05hospital_data.ldf,SIZE=5MB,MAXSIZE=200MB,FILEGROWTH=2MB)USE hospitalsyst
36、emGO-1.创建行政人员信息表CREATE TABLE Administor(Ano VARCHAR(10) PRIMARY KEY,Aname VARCHAR(20),Asex VARCHAR(2),Aage INT,Adept VARCHAR(50),Atel VARCHAR(11);-2.创建医生信息表CREATE TABLE Doctor ( Dno VARCHAR(10) PRIMARY KEY,Dname VARCHAR(20),Dsex VARCHAR(2),Dage INT,Ddept VARCHAR(50),Dtel VARCHAR(11);-3.创建护士信息表CREATE
37、 TABLE Nurse(Nno VARCHAR(10) PRIMARY KEY,Nname VARCHAR(20),Nsex VARCHAR(2),Nage INT,Ndept VARCHAR(30);-4.创建病人信息表CREATE TABLE Patient(Pno VARCHAR(10) PRIMARY KEY,Pname VARCHAR(20),Psex VARCHAR(2),Page INT,Ptel VARCHAR(11),Pdept VARCHAR(50);-5.创建各项检查及药品信息表CREATE TABLE Drug(Dnum VARCHAR(10) PRIMARY KEY
38、,Dnam VARCHAR(20),Dprice MONEY,Dstorage VARCHAR(30);-6.创建住院部病房类型信息表(病房病床号/所属区域/标识量)CREATE TABLE House(Hbednumber CHAR(6) PRIMARY KEY,Hdept VARCHAR(30),Hflag INT NOT NULL);-7.创建医生病人关系表CREATE TABLE Doctor_Patient(Dno VARCHAR(10),Pno VARCHAR(10),DPTime Date,PRIMARY KEY(Dno,Pno),FOREIGN KEY(Dno) REFEREN
39、CES Doctor(Dno),FOREIGN KEY(Pno) REFERENCES Patient(Pno);-触发器一 检查病人挂号与医生科目是否相同CREATE TRIGGER 病人医生ON Doctor_PatientFOR INSERTASDECLARE DDEPT VARCHAR(20),PDEPT VARCHAR(20),DNO VARCHAR(20),PNO VARCHAR(20)BEGINSELECT DNO = Dno FROM INSERTEDSELECT PNO = Pno FROM INSERTEDSELECT DDEPT = Ddept FROM Doctor W
40、HERE Dno = DNOSELECT PDEPT = Pdept FROM Patient WHERE Pno = PNOIF(DDEPT = PDEPT)PRINT 插入成功ELSE BEGINPRINT 无法插入ROLLBACKENDENDGO-8.创建住院病人信息表create table PHouse(Pno VARCHAR(10),Dno VARCHAR(10),Nno VARCHAR(10),HTime Date,Hbednumber CHAR(6) PRIMARY KEY,FOREIGN KEY(Dno) REFERENCES Doctor(Dno),FOREIGN KEY(
41、Pno) REFERENCES Patient(Pno),FOREIGN KEY(Nno) REFERENCES Nurse(Nno);CREATE TRIGGER 病人住院ON PHouseFOR INSERTASDECLARE BEDNUM VARCHAR(10),PNO VARCHAR(20),PDEPT VARCHAR(30),HDEPT VARCHAR(30),FLAG INTSELECT PNO = Pno FROM INSERTEDSELECT BEDNUM = Hbednumber FROM INSERTEDSELECT PDEPT = Pdept FROM Patient W
42、HERE Pno = PNOSELECT HDEPT = Hdept FROM House WHERE Hbednumber = BEDNUMSELECT FLAG = Hflag FROM House WHERE Hbednumber = BEDNUMIF(FLAG = 1)BEGINPRINT 病房正在被使用!ROLLBACKEND ELSE BEGINIF(HDEPT != PDEPT)BEGIN PRINT 无法插入,病人居住科室不对!ROLLBACKENDELSEUPDATE House SET Hflag = 1 WHERE Hbednumber = BEDNUMENDGOINSE
43、RT INTO PHouse VALUES(P001,D001,N003,2011-5-12,240902);INSERT INTO PHouse VALUES(P001,D001,N003,2011-6-20,241002);SELECT * FROM House ;SELECT * FROM PHouse ;-9.创建收费人员信息表CREATE TABLE Charger(Cno VARCHAR(10)PRIMARY KEY,Cnam VARCHAR(20),Cage INT,Csex CHAR(2);-10.创建收费信息表CREATE TABLE Charge(Tno VARCHAR(1
44、0) PRIMARY KEY,Cno VARCHAR(10),Pno VARCHAR(10),Dnum VARCHAR(10),Tnumber INT,Tprice MONEY,FOREIGN KEY(Cno) REFERENCES Charger(Cno),FOREIGN KEY(Pno) REFERENCES Patient(Pno),FOREIGN KEY(Dnum) REFERENCES Drug(Dnum);-插入收费信息表的存储过程CREATE PROC 收费 TNO VARCHAR(10),CNO VARCHAR(10),PNO VARCHAR(10),DNUM VARCHAR(
45、10),TNUMBER INTASDECLARE TPRICE MONEY,DPRICE MONEY SELECT DPRICE = Dprice FROM Drug WHERE Dnum = DNUMSET TPRICE = TNUMBER * DPRICEINSERT INTO Charge VALUES(TNO,CNO,PNO,DNUM,TNUMBER,TPRICE)GOEXEC 收费 1111111111,C001,P001,000123,4EXEC 收费1111111112,C001,P002,000127,3EXEC 收费1111111113,C001,P003,000901,1S
46、ELECT * FROM Charge;/*创建索引*/CREATE INDEX Administor_INDEX ON Administor(Ano);CREATE INDEX Doctor_INDEX ON Doctor(Dno);CREATE INDEX Nurse_INDEX ON Nurse(Nno) ;CREATE INDEX Patient_INDEX ON Patient(Pno);CREATE INDEX Drug_INDEX ON Drug(Dnum);CREATE INDEX House_INDEX ON House(Hbednumber);/*创建视图*/-创建医生信息
47、视图CREATE VIEW 医生信息_VIEWASSELECT Dno 医生编号,Dname 医生姓名,Dsex 性别,Dage 年龄,Ddept 部门,Dtel 电话FROM Doctor;SELECT * FROM 医生信息_VIEWWHERE 医生编号=D001;-创建护士信息视图CREATE VIEW 护士信息_VIEWASSELECT Nno 护士编号,Nname 护士姓名,Nsex 性别,Nage 年龄,Ndept 部门FROM Nurse;SELECT * FROM 护士信息_VIEWWHERE 护士编号=N001;-创建收费人员信息视图CREATE VIEW 收费人员信息_VI
48、EWASSELECT Cno 收费人员编号,Cnam 收费人员姓名,Cage 年龄,Csex 性别FROM Charger;SELECT * FROM 收费人员信息_VIEWWHERE 收费人员编号=C001;-创建病人信息视图CREATE VIEW 病人信息_VIEWASSELECT Patient.Pno 病人编号,Pname 病人姓名 ,Psex 性别 ,Page 年龄,Ptel 电话,Pdept 就诊科室,Doctor.Dno 主治医生编号,Dname 主治医生姓名,DPTime 就诊时间FROM Patient,Doctor,Doctor_PatientWHERE Patient.Pno=Doctor_Patient.Pno AND Doctor_Patient.Dno=Doctor.Dno;SELECT * FROM 病人信息_VIEWWHERE 病人编号=P001;-创建住院部管理视图CREATE VIEW 住院部信息_VIEWASSELECT House.Hbednumber 病房床位编号,Patient.Pno 病人编号,Pname 病人姓名,Hdept 所属区域,Nurse.Nno 所属护士编号 ,Nname 所属护士姓名FROM House,Nurse,Patient,PHouseWHERE House.Hbednumber=PHouse.Hbednum