__大学软件学院实验报告课程:数据库原理与实用技术实验学期: 2012-2013学年第二学期任课教师:薛专业:网络工程学号:姓名:成绩:期末大作业:医院住院病人管理数据库设计一、实验目的(1)掌握数据库设计的基本方法(2)掌握各种数据库对象的设计方法二、实验内容1.数据库概要设计:用文字简要描述实体之间的联系,画出E-R图(标出各联系中实体的基数)。
E-R图提供了表示实体型、属性和联系的方法。
1)实体型:用矩形表示,矩形框内写明实体名;2)属性:用椭圆形表示,并用无向边将其与相应的实体连接起来;3)联系:用菱形表示,菱形框内写明联系名,并用无向边分别与有关实体型连接起来,同时在无向边旁标上联系的类型。
注意:如果一个联系也具有属性,则这些属性也要用无向边与该联系连接起来。
下面将根据要设计的住院数据库对其中涉及到的实体、实体属性和实体间的联系进行分析和设计。
(1)实体及其属性分析根据本次课程设计所给出的初始条件,目前有以下实体:病人实体、病房实体、病床实体、医生实体、科室信息实体和住院登记实体。
对于这些实体,它们的实体及属性图如图4-7所示:住院数据库实体及其属性如下图:(2) 分E-R 图设计在本次设计中,根据任务书所提供的业务规则,实体和实体之间可以有以下几种联系: 1) 医生与病人之间的联系,它们之间的联系图如图1所示;2) 病人与病房以及病房与病床之间的联系,它们之间的联系图如图2所示; 3) 医生与科室信息之间的联系,它们之间的联系图如图3所示;1:病人与医生联系图2:病人与病房及病房与病床联系图3: 医生与科室信息之间的联系(一般来说,一个医生拥有一个办公科室)(3)基本E-R图设计对于分E-R图,它们之间往往存在一些不一致的地方,即冲突。
合并时不能简单的将上述的各个分E-R图画在一起,必须要消除各个分E-R图中的不一致,以形成一个能为全系统所有用户所共同理解和接受的统一的概念模型。
在上述分E-R图上可以做出修改,最终形成的基本E-R图如下图所示:医院住院数据库基本E-R图:2、数据表设计:将E-R图转换为数据表,给出创建各表的SQL 语句。
一:关系模型设计关系模型的逻辑结构是一组关系模式的集合。
将E-R图转换为关系模型实际上就是将实体型、实体型的属性和实体之间的联系转换为一组关系模式,这种转换需要遵守以下原则:1. 一个实体型转换为一个关系模式。
实体的属性就是关系的属性,实体的码就是关系的码。
2. 对于实体之间的联系有以下几种情况:(1)一个1:1的联系可以转换为一个独立的关系模式,也可以与任意一端对应的关系模式合并。
(2)一个1:n的联系可以转换成为一个独立的关系模式,也可以与n端对应的关系模式合并。
(3)一个m: n的联系转换为一个关系模式。
(4) 3个或者3个以上的实体之间的一个多元联系可以转换为一个关系模式。
(5)具有相同码的关系模式可以合并。
按照上述的原则,根据设计好的E-R图,可以将其转换为以下一组关系模式,其中关系模式的码用下横线标出。
1病人(病案号,姓名,性别,电话号码,病房编号)此为病人实体型所对应的关系模式。
其中病案号为次关系模式的码,而病房编号为该关系模式的外码。
2病房(病房编号,收费标准,所属科室,病床号)此为病房实体型所对应的关系模式。
其中病房编号唯一确定一个病房,所以为该关系模式的码。
3医生(医生编号,姓名,性别,职称,电话号码,部门)此为医生实体型所对应的关系模式。
其中医生编号唯一确定一个医生,所以为该关系模式的码。
4科室信息(科室编号,科室名,电话,主治医生姓名)此为科室实体型所对应的关系模式。
其中科室编号唯一确定一个科室,所以为该关系模式的码。
一:数据字典:1病人信息的数据项描述:2病房信息的数据项描述:3医生信息的数据项描述:4科室信息的数据项描述:关系图如下:表的详细列名:基本表的设计完成数据库的逻辑和物理设计后,需要运用SQL语言对数据库中所涉及的表进行定义,同时要考虑与表有关的完整性约束条件。
1. 建立病人表:CREATE TABLE 病人(病案号 VARCHAR(15) PRIMARY KEY,姓名 VARCHAR(20) NOT NULL,性别 CHAR(2) CHECK(性别 IN('男','女')),年龄 VARCHAR(100) NOT NULL,电话 VARCHAR(12),病房编号 CHAR(50) NOT NULL,病床号 INT,主治医生姓名 CHAR(50),FOREIGN KEY (病房编号) REFERENCES 病房(病房编号)); Foreign key (主治医生姓名)references 医生(医生姓名),2.建立医生表:create table 医生(医生编号 VARCHAR(50) not null,医生姓名 CHAR(10) ,性别 CHAR(5) ,年龄 CHAR(20),职称 VARCHAR(50),电话 VARCHAR(50),科室编号 VARCHAR(50),primary key(医生编号),Foreign key (科室编号)references 科室(科室编号), );3.建立病房表:create table 病房(病房编号 CHAR(50) not null,收费标准 INT ,所属科室 VARCHAR(50) ,病房情况 CHAR(50),primary key(病房编号),);4 .简历科室表create table 科室(编号 VARCHAR(50) not null,科室名 CHAR(10) ,主治医生姓名 CHAR(5) ,电话CHAR(20),primary key(科室编号),);1.插入病人信息insert into 病人 values('001','阿一','男','18','333333','101','1','陈一'); insert into 病人 values('002','阿二','男','18','433333','102','1','陈二'); insert into 病人 values('003','阿三','男','18','533333','103','1','陈三'); insert into 病人 values('004','阿四','男','18','633333','104','1','陈四');插入病房基本信息insert into 病房 values('101','300','外科','3床位');insert into 病房 values('102','400','内科','3床位');insert into 病房 values('103','500','儿科','3床位');insert into 病房 values('104','600','妇科','3床位');插入医生基本信息insert into 医生 values('001','陈一','男','30','中级','1111','1'); insert into 医生 values('002','陈二','女','50','高级','2111','2'); insert into 医生 values('003','陈三','男','30','中级','3111','3'); insert into 医生 values('004','陈四','女','40','高级','4111','4');插入科室基本信息insert into 科室 values('101','外科','陈一','1111');insert into 科室 values('102','内科','陈二','2111');insert into 科室 values('103','儿科','陈三','3111');insert into 科室 values('104','妇科','陈四','4111');3、完整性约束:根据需要给数据表添加数据完整性,并说明添加的理由。
建立完整性约束:保证医生的真实性,和医生编号的正确性建立完整性约束:保证病人的真实性,和病人编号的正确性建立完整性约束:保证科室的真实性,和科室编号的正确性建立完整性约束:保证病房的真实性,和病房编号的正确性create rule d_ruleas @Wno like '[w][0-9]';exec Sp_bindrule d_rule, '病房.Wno';验证存入的信息:插入:查看是否存入:查找功能:4、存储过程、触发器和视图:根据需要给数据库添加几个实用的存储过程、触发器和视图,并说明它们各自的功能。
一:建立触发器:用企业管理器为表病人创建一个级联更新触发器trrigger_c。
要求:若修改病人表中一病人的编号,则表病房中与该病人相关的编号自动修改。
1、启动企业管理器,选择数据库---医院管理,将其展开,单击“表”对象。