草庐IT

医院管理系统数据库,课程设计,SQLserver,纯代码设计

做一道光 2023-07-18 原文

首先创建数据库,并建立各个表之间的主外键约束等,并插入数据。

create database 医院信息管理系统
on(
 name=医院信息管理系统,
 filename='D:\数据库课程设计\医院信息管理系统\医院信息管理系统.mdf',
 size=5,
 filegrowth=1
 )
 log on
 ( name=医院信息管理系统_log,
  filename='D:\数据库课程设计\医院信息管理系统\医院信息管理系统_log.ldf',
  size=2,
  maxsize=30,
  filegrowth=10%
  )
  use 医院信息管理系统
  go
  create table 医生表
  (医生编号 char(15) not null primary key,
   姓名 char(10) not null unique,
   性别 char(5) null,
   年龄 int null,
   职称 char(11) null,
   科室号 char(20) null)
   go
   alter table 医生表
   add constraint ys_zc default '医师' for 职称
   go
   alter table 医生表
   add constraint fk_ks foreign key(科室号) references 科室表(科室号)
   go
   create table 科室表
   (科室号 char(20) not null primary key,
    科室名 char(10)  not null ,
    科室地址 char(20) null,
    科室电话 char(10) null,
    科室主任 char(10) null)
    go
    create table 病人表
    (病历号 char(15) not null primary key,
     姓名  char(10) not null,
     性别 char(5) null,
     年龄 int null,
     病房号 char(15) null,
     医生姓名 char(10) null,
     血型 char(4) null,
     确诊结果 char(10)null,
     科室号 char(20) null)
    go
    alter table 病人表
    add constraint fk_ksh foreign key(科室号) references 科室表(科室号)
    go
    create table 病房表
    (病房号 char(15)  not null primary key,
     床位数 int null, 
     病房地址 char(20) null,
     科室号 char(20) null)
    go
    alter table 病人表
    add constraint fk_bfh foreign key(病房号) references 病房表(病房号)
    go
    alter table 病房表
    add constraint fk_sk foreign key(科室号) references 科室表(科室号)
    go
    create table 护士表
    (护士编号 char(15) not null primary key,
     姓名  char(10) not null,
     性别 char(5) null,
     年龄 int null,
     科室号 char(20) null)
     go
     alter table 护士表
     add constraint fk_skh foreign key(科室号) references 科室表(科室号)
     go
     create table 分配表
     ( 病房号 char(15) not null,
       护士编号 char(15) not null,
       primary key (病房号,护士编号),
       foreign key(病房号) references 病房表(病房号),
       foreign key(护士编号) references 护士表(护士编号)) 
      go
insert into 科室表(科室号,科室名,科室地址,科室电话,科室主任)
values('101','内科','A1101','10001','高飞'),
('102','外科','A1102','10002','李想'),
('103','儿科','A1103','10003','邓杨'),
('104','妇科','A1104','10004','刘宇'),
('105','神经科','A1105','10005','白皓'),
('201','脑外科','A1201','20001','宋思琪'),
('202','泌尿科','A1202','20002','孙怡'),
('203','骨科','A1203','20003','杨子龙'),
('204','内分泌科','A1204','20004','张子怡'),
('205','口腔科','A1205','20005','郭易曼'),
('301','眼科','A1301','30001','王陆明'),
('302','耳喉鼻科','A1302','30002','韩子琦'),
('303','皮肤科','A1303','30003','徐若鸿'),
('304','心脏外科','A1304','30004','李丽'),
('305','胸外科','A1305','30005','陈若玉')
go
insert into 医生表(医生编号,姓名,性别,年龄,职称,科室号)
values('101001','高飞','男','30','主任医师','101'),
('101002','杨蕾','女','24','住院医师','101'),
('101003','齐风','男','27','主治医师','101'),
('101004','李想','女','45','主任医师','102'),
('101005','朱珠','女','30','主治医师','102'),
('101006','陆风','男','35','主治医师','102'),
('101007','邓杨','男','30','主治医师','103'),
('101008','程悦','女','28','副主治医师','103'),
('101009','刘宇','女','40','副主任医师','104'),
('101010','刘子怡','女','34','主治医师','104'),
('101011','白皓','男','58','主任医师','105'),
('101012','苏楠','女','32','主治医师','105'),
('101013','宋思琪','女','50','主任医师','201'),
('101014','陆大明','男','24','住院医师','201'),
('101015','孙怡','女','33','主治医师','202'),
('101016','刘楠','男','33','主治医师','202'),
('101017','杨子龙','男','35','主治医师','203'),
('101018','焦丹','女','23','住院医师','203'),
('101019','张子怡','女','38','副主任医师','204'),
('101020','李娟','女','32','主治医师','204'),
('101021','郭易曼','女','35','主治医师','205'),
('101022','刘晓','男','22','住院医师','205'),
('101023','王陆明','男','36','主治医师','301'),
('101024','张珍','女','29','副主治医师','301'),
('101025','韩子琦','男','31','主治医师','302'),
('101026','乔芳','女','31','主治医师','302'),
('101027','徐若鸿','男','49','主任医师','303'),
('101028','陆磊','男','31','主治医师','303'),
('101029','李丽','女','51','主任医师','304'),
('101030','高涛','男','31','主治医师','304'),
('101031','陈若玉','女','39','副主任医师','305'),
('101032','刘思雨','女','30','主治医师','305')
go
insert into 病房表(病房号,床位数,病房地址,科室号)
values('001','4','B1001','101'),
('002','5','B1002','101'),
('003','1','B1003','102'),
('004','2','B1004','102'),
('005','0','B1005','103'),
('006','3','B1006','103'),
('007','2','B1007','104'),
('008','3','B1008','105'),
('009','1','B1009','105'),
('010','2','B1010','201'),
('011','1','B1011','201'),
('012','3','B1012','202'),
('013','2','B1013','203'),
('014','2','B1014','204'),
('015','1','B1015','204'),
('016','5','B1016','205'),
('017','2','B1017','301'),
('018','1','B1018','302'),
('019','3','B1019','303'),
('020','1','B1020','303'),
('021','2','B1021','304'),
('022','1','B1022','304'),
('023','3','B1023','305'),
('024','2','B1024','305')
go
select *
from 科室表
go
select *
from 医生表
go
select 医生表.姓名 , 科室名
from 医生表 join 科室表
on 医生表.科室号=科室表.科室号
go



use 医院信息管理系统
go
insert into 病人表(病历号,姓名,性别,年龄,病房号,医生姓名,血型,确诊结果,科室号)
values('21101','王胜安','男','31','001','齐风','A','肺炎','101'),
('21102','蔡壮保','男','54','002','高飞','B','慢性气管炎','101'),
('21103','易江伟','男','28','003','陆风','O','自发性气胸','102'),
('21104','张顺谷','男','32','004','朱珠','AB','胆道结石','102'),
('21105','李鑫灏','男','8','006','邓杨','A','细菌性痢疾','103'),
('21106','梁澄静','女','8','006','程悦','A','诺如腹泻','103'),
('21107','时党舒','女','26','007','刘宇','B','宫颈炎','104'),
('21108','何刚名','男','66','008','白皓','O','脑梗塞','105'),
('21109','严席华','男','58','008','苏楠','B','脑出血','105'),
('21110','刘鲜发','男','32','010','宋思琪','A','脑积水','201'),
('21111','何毅','男','35','010','陆大明','O','脑脓肿','201'),
('21112','唐宸禹','男','38','011','宋思琪','B','颅脑外伤','201'),
('21113','张顺联','男','50','012','刘楠','A','泌尿结石','202'),
('21114','汤青','女','29','012','孙怡','B','急性肾炎','202'),
('21115','柯纤栩','女','34','013','焦丹','AB','腰间盘突出','203'),
('21116','夏莱','女','30','014','张子怡','B','电解质紊乱','204'),
('21117','杜鹃','女','28','015','李娟','A','内分泌紊乱','204'),
('21118','张洪赫','男','25','016','郭易曼','B','慢性牙周炎','205'),
('21119','池慕颖','女','26','016','刘晓','AB','口腔白斑','205'),
('21120','齐芬霞','女','69','017','王陆明','O','白内障','301'),
('21121','卢全旭','男','66','017','张珍','A','青光眼','301'),
('21122','卓互知','男','45','018','韩子琦','AB','中耳炎','302'),
('21123','元感奇','男','16','019','徐若鸿','O','扁平疣','303'),
('21124','秦长乐','男','32','020','陆磊','B','皮肤癣','303'),
('21125','丘寸心','男','48','021','李丽','O','血胸','304'),
('21126','路从风','男','18','022','高涛','B','漏斗胸','304'),
('21127','王浩','男','29','023','陈若玉','A','胸部异物','305'),
('21128','潘奕','女','30','024','刘思雨','AB','胸腔积液','305')
go
insert into 护士表(护士编号,姓名,性别,年龄,科室号)
values('110101','夏一柳','女','25','101'),
('110102','席梦荣','女','28','101'),
('110103','李文倩','女','22','102'),
('110104','绕詹林','男','24','102'),
('110105','吴申萌','女','29','103'),
('110106','田甜','女','23','103'),
('110107','高悦然','女','25','104'),
('110108','刘子诺','女','21','104'),
('110109','张以诺','女','22','105'),
('110110','赵佳宇','女','22','105'),
('110111','张怡铭','女','35','201'),
('110112','蒋欣芹','女','26','201'),
('110113','马航钰','女','30','202'),
('110114','苏芷璇','女','25','202'),
('110115','王晓甜','女','24','203'),
('110116','陈子媛','女','26','203'),
('110117','董璇','女','21','204'),
('110118','孙玉','女','23','204'),
('110119','李婉婷','女','28','205'),
('110120','宋雨涵','女','31','205'),
('110121','邓梦琪','女','24','301'),
('110122','崔佳玉','女','26','301'),
('110123','郭星瞳','女','24','302'),
('110124','郭思羽','女','23','302'),
('110125','王雨橙','女','28','303'),
('110126','刘子琳','女','27','303'),
('110127','李雨霏','女','29','304'),
('110128','陆嘉晨','女','24','304'),
('110129','张馨予','女','23','305'),
('110130','刘欣悦','女','27','305')
go
insert into 分配表(病房号,护士编号)
values('001','110101'),
('002','110102'),
('003','110103'),
('004','110104'),
('005','110105'),
('006','110106'),
('007','110107'),
('007','110108'),
('008','110109'),
('009','110110'),
('010','110111'),
('011','110112'),
('012','110113'),
('012','110114'),
('013','110115'),
('013','110116'),
('014','110117'),
('015','110118'),
('016','110119'),
('016','110120'),
('017','110121'),
('017','110122'),
('018','110123'),
('018','110124'),
('019','110125'),
('020','110126'),
('021','110127'),
('022','110128'),
('023','110129'),
('024','110130')
go

此时数据库已经建立好了,下面进行数据库的基本操作。

use 医院信息管理系统
insert into 病人表(病历号,姓名,性别,年龄,病房号,医生姓名,血型,确诊结果)
values('21129','张淦','男','25','024','刘思雨','O','胸腔积液')
go
delete
from 病人表
where 病历号='21129'
go
update 护士表
set 年龄='26'
where 姓名='夏一柳'
go
select 病历号,病人表.姓名,病人表.性别,病人表.年龄,病房号,血型,医生姓名,职称,医生表.科室号
from 病人表 join 医生表
on 病人表.医生姓名=医生表.姓名
where 确诊结果='脑积水'
go
select 科室号,COUNT(护士编号) as '护士人数'
from 护士表
group by 科室号
go
select 科室号,COUNT(病房号) as '病房数'
from 病房表
group by 科室号
having(COUNT(病房号))>1
go
select AVG(年龄) as '全体医生平均年龄'
from 医生表
go
select  姓名,年龄
from 病人表
order by 年龄 desc
go
select 护士编号,姓名,YEAR(GETDATE())-年龄 as '出生日期'
from 护士表
go
select 护士表.护士编号,病房号,姓名
from 护士表 join 分配表
on 护士表.护士编号=分配表.护士编号
go
select  病历号,病人表.姓名,病人表.性别,血型,病房号,医生姓名,职称,医生表.科室号,科室表.科室名,科室表.科室地址
from 病人表 join 医生表
on 病人表.医生姓名=医生表.姓名
join 科室表
on 医生表.科室号=科室表.科室号
go
create view v_pyk
as
select  病历号,病人表.姓名,病人表.性别,血型,病房号,医生姓名,职称,医生表.科室号,科室表.科室名,科室表.科室地址
from 病人表 join 医生表
on 病人表.医生姓名=医生表.姓名
join 科室表
on 医生表.科室号=科室表.科室号
go
select *
from v_pyk
go
update v_pyk
set 病房号='021'
where 病历号='21126'
go
create proc pr_inf @pr varchar(20)
as
select 病人表.姓名,病人表.性别,血型,医生姓名,医生编号,确诊结果
from 病人表 join 医生表
on 病人表.医生姓名=医生表.姓名
where 病人表.姓名 like @pr 
go
exec pr_inf '张%'
use 医院信息管理系统
go
alter proc hs_bf @hno char(6),@bno char(10) output ,@bed varchar(10) output 
as
select @bno=分配表.病房号,@bed=床位数
from 分配表 join 病房表
on 病房表.病房号=分配表.病房号
where 护士编号 =@hno
set @bed=convert(varchar,@bed)
go
declare @bno1 char(10),@bed1 varchar(10)
exec hs_bf '110101',@bno1 output ,@bed1 output
print '病房号'+@bno1
print '床位数'+@bed1
go
use 医院信息管理系统
go
alter trigger tri_br 
on 病人表
after delete,update
as
declare @sno char(10) ,@cno char (10)
select @sno =病历号 from deleted
select @cno=病房号 from deleted
delete from 病人表 where 病历号=@sno
update  病房表
set 床位数=床位数+1
where @cno = 病房表.病房号
go
delete from 病人表 where 病历号='21102'
go



下面是各个表的实体图

 

 

 

 下面是数据流图

 下面是医院管理E-R图

下面是医院功能结构图

1.设计任务 

1.1系统开发背景概述

随着计算机技术的飞速发展,计算机在医院管理中应用的普及,利用计算机实现医院管理势在必行。对于大中型医院来说,利用计算机支持医院高效率完成劳动医院管理的日常事务,就是适应现代医院管理制度要求、推动医院管理走向科学化、规范化的必要条件。

目前市面上流行的信息管理系统不少。但就是,对于中型医院的医院管理系统来说,不需要大型的数据库系统。只需要一个操作方便,功能实用,能满足本中心对数据的管理及需求的系统。我们的目标就就是在于开发一个功能实用、操作方便,简单明了的医院管理系统。能够录入医院的基本资料,在操作上能够完成诸如添加、修改、删除、按各种条件进行查询、新用户的设置及密码修改等方面的工作,基本满足人事日常业务的需要。团队完成了此课题的研究与开发,包括分析、设计、编码、测试、文档编写等内容。

1.2系统开发的目的与意义

随着现代化社会的发展,为了抓住机遇,在竞争中占得先机,作为管理企业的一个必不可少的重要环节—在线管理的信息化、计算机化也就迫在眉捷了。开发在线管理信息系统即有宏观上的意义,那就就是顺应时代信息化、现代化潮流,提高效益,促进国民经济管理的结构优化;也有微观上的意义,那就就是可以提高管理的现代化程序,加强管理的信息化手段,提高工作效率,增加单位效益。

电子计算机与通信技术的快速发展使人类已经逐渐地进入信息化社会。信息与材料、能源一样成为一种社会的基本生产资料,在人类的社会生产活动中发挥着重要的作用。当前,医院还面临着越来越激烈的市场竞争、要想在竞争中取胜,也必须采用先进的管理方法与手段。一个规划周详、设计先进的计算机信息管理网络系统就是取得竞争胜利的必备手段。通过实现先进的计算机网络化管理,能为领导层的管理与决策及时提供可靠的数字依据,使管理更合理、更先进;减少人力、物力资源的浪费,降低成本;提高工作效率,提高管理效率;提高经济效益,从而提高医院的整体竞争力。建立以人事管理为中心的医院信息网络管理系统,以适应医院长期快速发展的需要,更重要的就是能使患者在医院得到更加满意的治疗。

2 需求分析

2.1信息要求

 图2-1医院信息系统的功能模块图

本课程设计模拟一般医院的信息管理情况,方便对医院信息的查询。经过充分的调研,确定本系统应对病人基本信息、科室基本信息、医生基本信息、病房基本信息、护士基本信息、护士的分配情况进行管理,本系统主要要求为:

  • 能够全面的管理病人基本信息、科室基本信息、医生基本信息、病房基本信息、护士基本信息以及护士分配信息。
  • 本系统可以方便维护各种信息。
  • 本系统能够方便查询各个信息表的基本信息。
  • 能够方便实现多个信息表的连接查询、嵌套查询。
  • 本系统能够实现有用信息的查询统计。
  • 本系统能够实现有用信息的输出。

2.2数据流图

 

    图2-2医院信息管理数据流图

2.3数据字典

数据字典是指对数据的数据项、数据结构、数据流、数据存储、处理逻辑、外部实体等五个部分进行定义和描述,其目的是对数据流程图中的各个元素做出详细的说明。本次实验主要对数据字典的数据项进行分析。如表2所示:

表2数据项

序号

数据项

数据类型

长度

备注

1

医生编号

CHAR

6

医生的工作编号

2

姓名

VARCHAR

20

医生的姓名

3

性别

CHAR

2

医生的性别

4

年龄

INT

医生的年龄

5

职称

VARCHAR

20

医生的职称

6

科室号

CHAR

3

医生的科室号

7

病历号

CHAR

5

病人的病历号

8

姓名

VARCHAR

20

病人的姓名

9

性别

CHAR

2

病人的性别

10

年龄

INT

病人的年龄

11

病房号

CHAR

3

病人的病房号

13

血型

VARCHAR

2

病人的血型

14

科室号

CHAR

3

病人的所属科室

15

确诊结果

VARCHAR

20

病人的诊断报告

16

科室号

CHAR

3

科室的编号

17

科室名

VARCHAR

20

科室的名字

18

科室地址

VARCHAR

20

科室的地址

19

科室电话

VARCHAR

10

科室的电话

20

科室主任

VARCHAR

20

科室的主任

21

病房号

CHAR

3

病房的编号

22

床位数

INT

病房的床位数

23

科室号

CHAR

3

病房的所属科室

24

病房地址

VARCHAR

20

病房的地址

25

护士编号

CHAR

6

护士的编号

26

姓名

VARCHAR

20

护士的姓名

27

性别

CHAR

2

护士的性别

28

年龄

INT

护士的年龄

29

科室号

CHAR

3

护士的所属科室

3 概念结构设计

3.1医院信息系统实体属性

医院医生的实体属性,主要包括医生的医生编号,姓名,性别,年龄,科室号,职称。如图3-1医生实体属性图所示:

  图3-1医生实体属性图

医院科室的实体属性,主要包括科室的科室号,科室名,科室地址,科室电话,科室主任;如图3-2科室实体属性图所示:

 图3-3病房实体属性图

医院护士的实体属性,主要包括护士编号,姓名,性别,年龄,科室号。如图3-4护士实体属性图所示: 

医院病人的实体属性图,主要包括病历号,姓名,性别,年龄,确诊结果,医生姓名,病房号,血型,科室号。如图3-5病人实体属性图所示: 

3.2总E-R图

医院信息管理总E-R图,如图3-6总E-R图所示:

4 逻辑结构设计

4.1关系模式:

医生(医生编号、姓名、性别、年龄、职称、所属科室号)

病人(病历号、姓名、性别、年龄、病房号、医生姓名、血型、所属科室号、诊断)

科室(科室号、科室名、科室地址、科室电话、科室主任)

病房(病房号、床位号、所属科室号、病房地址)

护士(护士编号、姓名、性别、年龄、所属病房号)

5 物理结构设计

5.1数据关系模式的优化:

对于1对N关系的挂号,可以在病人模式中加入科室号属性。

对于1对N关系的属于,可以在医生模式中加入科室号属性。

对于1对N关系的拥有,可以在病房模式中加入科室号属性。

这样得到优化的关系模式:

病人(病历号、姓名、性别、年龄、病房号、医生姓名、血型、确诊结果、科室号

医生(医生编号、姓名、性别、年龄、职称、科室号

病房(病房号床位号、病房地址、科室号

对于N对M的关系模式,可以生成一个新的模式:

分配(病房号护士编号

对于优化后的关系模式:

医生(医生编号、姓名、性别、年龄、职称、科室号

病人(病历号、姓名、性别、年龄、病房号、医生姓名、血型、确诊结果、科室号

科室(科室号、科室名、科室地址、科室电话、科室主任)

病房(病房号、床位号、病房地址、科室号

护士(护士编号、姓名、性别、年龄、科室号

分配(病房号护士编号

分析,关系模式的每个关系都是不可再分的原子值,即为第一范式,又因为每个非主属性都不传递依赖于模式的候选键,因此该模式集为第三范式。

通过优化后关系模式得出医生表:

表4.1医生基本信息表

列名

数据类型

字段大小

是否为空

备注

医生编号

CHAR

6

NOT

主键

姓名

VARCHAR

20

NOT

性别

CHAR

2

NOT

年龄

INT

NOT

职称

VARCHAR

20

YES

科室号

CHAR

3

YES

外键

通过优化后关系模式得出病人表:

表4.2病人基本信息表

列名

数据类型

字段大小

是否为空

备注

病历号

CHAR

5

NOT

主键

姓名

VARCHAR

20

NOT

性别

CHAR

2

NOT

年龄

INT

NOT

病房号

CHAR

3

YES

医生姓名

VARCHAR

      20

YES

血型

CHAR

2

YES

确诊结果

VARCHAR

20

YES

科室号

CHAR

3

YES

外键

通过优化后关系模式得出科室表:

表4.3科室基本信息表

列名

数据类型

字段大小

是否为空

备注

科室号

CHAR

3

NOT

主键

科室名

VARCHAR

20

NOT

科室地址

VARCHAR

20

YES

科室电话

VARCHAR

10

YES

科室主任

VARCHAR

20

YES

通过优化后关系模式得出病房表:

表4.4病房基本信息表

列名

数据类型

字段大小

是否为空

备注

病房号

CHAR

3

NOT

主键

床位数

INT

YES

病房地址

VARCHAR

20

YES

科室号

CHAR

3

YES

外键

通过优化后关系模式得出护士表:

表4.5护士基本信息表

列名

数据类型

字段大小

是否为空

备注

护士编号

CHAR

6

NOT

主键

姓名

VARCHAR

20

NOT

性别

CHAR

2

NOT

年龄

INT

NOT

科室号

CHAR

3

YES

外键

通过优化后关系模式得出分配表:

表4.6护士分配表

列名

数据类型

字段大小

是否为空

备注

病房号

CHAR

3

NOT

主键、外键

护士编号

CHAR

6

NOT

主键、外键

5.2设计结构的内容

  由于用户最终通过某一特定的DBMS使用数据库,因此数据的物理结构设计必须结合具体的DBMS进行,主要包括选择数据库的存储结构和存取方法两个方面。

5.2.1确定存储结构

 数据库物理结构设计与特定的硬件环境、DBMS及实施环境密切相关,数据库的配置也是确定物理结构的重要内容,包括数据库空间的分配、日志文件大小、数据字典空间的确定以及相关参数的设置等。

5.2.2选择存取方法

数据库的存取方法有索引、聚簇等方法。

1.索引的选择

 一般来说对下列的情况的属性列建立索引:

查询频繁的属性列。

经常出现在链接操作中的属性列。

WHERE、ORDER、GROUP  BYD等句子中的属性列。

不宜建立索引的属性列:

不出现或很少在查询条件出现的属性列。

属性值很少的列。

经常需要更新的列。

经常需要更新或含有记录较少的数据表的属性列。

2.聚簇的选择

聚簇是改进系统性能的另一种技术,聚簇分为以下3种情况:

分段。按属性分组,将文件在垂直方向进行分解。

分区。将文件进行水平分解,按照记录存取频度进行分组。

聚簇。从不同的关系中取出某些属性物理地存储在一起,以改变连接查询的效率。

5.3 评价物理结构

  物理结构满足设计的需求,在时间和空间方面有很大的效率,可以进入数据库实施阶段,数据库的物理结构设计都需要经过反复测试、不断优化。

6 数据库实施

完成分析与结构优化以后,开始数据库的实施阶段,本章主要以数据库的创建,数据表的增、删、改、查,视图的创建以及存储过程的创建为内容。

6.1数据库的创建

create database 医院信息管理系统

on(

 name=医院信息管理系统,

 filename='D:\数据库课程设计\医院信息管理系统\医院信息管理系统.mdf',

 size=5,

 filegrowth=1

 )

 log on

 ( name=医院信息管理系统_log,

  filename='D:\数据库课程设计\医院信息管理系统\医院信息管理系统_log.ldf',

  size=2,

  maxsize=30,

  filegrowth=10%

  )

6.2表的创建

6.2.1科室表的创建

use 医院信息管理系统

create table 科室表

   (科室号 char(3) not null primary key,

    科室名 varchar(20)  not null ,

    科室地址 varchar (20) null,

    科室电话 varchar (10) null,

    科室主任 varchar (10) null)

    go

6.2.2医生表的创建

create table 医生表

  (医生编号 char(6) not null primary key,

   姓名 varchar (20) not null unique,

   性别 char(2)  not null,

   年龄 int not null,

   职称 varchar (20) null,

   科室号 char(3) null)

   go

   alter table 医生表

   add constraint ys_zc default '医师' for 职称

   go

   alter table 医生表

   add constraint fk_ks foreign key(科室号) references 科室表(科室号)

   go

6.2.3病人表的创建

create table 病人表

    (病历号 char(5) not null primary key,

     姓名  varchar (20) not null,

     性别 char(2) not null,

     年龄 int not null,

     病房号 char(3) null,

     医生姓名 varchar (20) null,

     血型 char(2) null,

     确诊结果 varchar (20)null,

     科室号 char(3) null)

    go

    alter table 病人表

    add constraint fk_ksh foreign key(科室号) references 科室表(科室号)

go

  alter table 病人表

    add constraint fk_bfh foreign key(病房号) references 病房表(病房号)

    go

6.2.4病房表的创建

create table 病房表

    (病房号 char(3)  not null primary key,

     床位数 int null, 

     病房地址 varchar (20) null,

     科室号 char(3) null)

    go

    alter table 病房表

    add constraint fk_sk foreign key(科室号) references 科室表(科室号)

go

6.2.5护士表的创建

create table 护士表

    (护士编号 char(6) not null primary key,

     姓名  varchar (20) not null,

     性别 char(2) not null,

     年龄 int not null,

     科室号 char(3) null)

     go

     alter table 护士表

     add constraint fk_skh foreign key(科室号) references 科室表(科室号)

     go

6.2.6分配表的创建

create table 分配表

     ( 病房号 char(3) not null,

       护士编号 char(6) not null,

       primary key (病房号,护士编号),

       foreign key(病房号) references 病房表(病房号),

       foreign key(护士编号) references 护士表(护士编号)) 

      go

6.3表的数据插入

6.3.1科室表插入数据

insert into 科室表(科室号,科室名,科室地址,科室电话,科室主任)

values('101','内科','A1101','A1-10001','高飞'),

('102','外科','A1102',' A1-10002','李想'),

('103','儿科','A1103',' A1-10003','邓杨'),

('104','妇科','A1104',' A1-10004','刘宇'),

('105','神经科','A1105',' A1-10005','白皓'),

('201','脑外科','A1201',' A1-20001','宋思琪'),

('202','泌尿科','A1202',' A1-20002','孙怡'),

('203','骨科','A1203',' A1-20003','杨子龙'),

('204','内分泌科','A1204',' A1-20004','张子怡'),

('205','口腔科','A1205',' A1-20005','郭易曼'),

('301','眼科','A1301',' A1-30001','王陆明'),

('302','耳喉鼻科','A1302',' A1-30002','韩子琦'),

('303','皮肤科','A1303',' A1-30003','徐若鸿'),

('304','心脏外科','A1304',' A1-30004','李丽'),

('305','胸外科','A1305',' A1-30005','陈若玉')

Go

6.3.2医生表插入数据

insert into 医生表(医生编号,姓名,性别,年龄,职称,科室号)

values('101001','高飞','男',30,'主任医师','101'),

('101002','杨蕾','女',24,'住院医师','101'),

('101003','齐风','男',27,'主治医师','101'),

('101004','李想','女',45,'主任医师','102'),

('101005','朱珠','女',30,'主治医师','102'),

('101006','陆风','男',35,'主治医师','102'),

('101007','邓杨','男',30,'主治医师','103'),

('101008','程悦','女',28,'副主治医师','103'),

('101009','刘宇','女',40,'副主任医师','104'),

('101010','刘子怡','女',34,'主治医师','104'),

('101011','白皓','男',58,'主任医师','105'),

('101012','苏楠','女',32,'主治医师','105'),

('101013','宋思琪','女',50,'主任医师','201'),

('101014','陆大明','男',24,'住院医师','201'),

('101015','孙怡','女',33,'主治医师','202'),

('101016','刘楠','男',33,'主治医师','202'),

('101017','杨子龙','男',35,'主治医师','203'),

('101018','焦丹','女',23,'住院医师','203'),

('101019','张子怡','女',38,'副主任医师','204'),

('101020','李娟','女',32,'主治医师','204'),

('101021','郭易曼','女',35,'主治医师','205'),

('101022','刘晓','男',22,'住院医师','205'),

('101023','王陆明','男',36,'主治医师','301'),

('101024','张珍','女',29,'副主治医师','301'),

('101025','韩子琦','男',31,'主治医师','302'),

('101026','乔芳','女',31,'主治医师','302'),

('101027','徐若鸿','男',49,'主任医师','303'),

('101028','陆磊','男',31,'主治医师','303'),

('101029','李丽','女',51,'主任医师','304'),

('101030','高涛','男',31,'主治医师','304'),

('101031','陈若玉','女',39,'副主任医师','305'),

('101032','刘思雨','女',30,'主治医师','305')

Go

6.3.3病房表插入数据

insert into 病房表(病房号,床位数,病房地址,科室号)

values('001',4,'B1001','101'),

('002',5,'B1002','101'),

('003',1,'B1003','102'),

('004',2,'B1004','102'),

('005',0,'B1005','103'),

('006',3,'B1006','103'),

('007',2,'B1007','104'),

('008',3,'B1008','105'),

('009',1,'B1009','105'),

('010',2,'B1010','201'),

('011',1,'B1011','201'),

('012',3,'B1012','202'),

('013',2,'B1013','203'),

('014',2,'B1014','204'),

('015',1,'B1015','204'),

('016',5,'B1016','205'),

('017',2,'B1017','301'),

('018',1,'B1018','302'),

('019',3,'B1019','303'),

('020',1,'B1020','303'),

('021',2,'B1021','304'),

('022',1,'B1022','304'),

('023',3,'B1023','305'),

('024',2,'B1024','305')

go

6.3.4病人表插入数据

insert into 病人表(病历号,姓名,性别,年龄,病房号,医生姓名,血型,确诊结果,科室号)

values('21101','王胜安','男',31,'001','齐风','A','肺炎','101'),

('21102','蔡壮保','男',54,'002','高飞','B','慢性气管炎','101'),

('21103','易江伟','男',28,'003','陆风','O','自发性气胸','102'),

('21104','张顺谷','男',32,'004','朱珠','AB','胆道结石','102'),

('21105','李鑫灏','男',8,'006','邓杨','A','细菌性痢疾','103'),

('21106','梁澄静','女',8,'006','程悦','A','诺如腹泻','103'),

('21107','时党舒','女',26,'007','刘宇','B','宫颈炎','104'),

('21108','何刚名','男',66,'008','白皓','O','脑梗塞','105'),

('21109','严席华','男',58,'008','苏楠','B','脑出血','105'),

('21110','刘鲜发','男',32,'010','宋思琪','A','脑积水','201'),

('21111','何毅','男',35,'010','陆大明','O','脑脓肿','201'),

('21112','唐宸禹','男',38,'011','宋思琪','B','颅脑外伤','201'),

('21113','张顺联','男',50,'012','刘楠','A','泌尿结石','202'),

('21114','汤青','女',29,'012','孙怡','B','急性肾炎','202'),

('21115','柯纤栩','女',34,'013','焦丹','AB','腰间盘突出','203'),

('21116','夏莱','女',30,'014','张子怡','B','电解质紊乱','204'),

('21117','杜鹃','女',28,'015','李娟','A','内分泌紊乱','204'),

('21118','张洪赫','男',25,'016','郭易曼','B','慢性牙周炎','205'),

('21119','池慕颖','女',26,'016','刘晓','AB','口腔白斑','205'),

('21120','齐芬霞','女',69,'017','王陆明','O','白内障','301'),

('21121','卢全旭','男',66,'017','张珍','A','青光眼','301'),

('21122','卓互知','男',45,'018','韩子琦','AB','中耳炎','302'),

('21123','元感奇','男',16,'019','徐若鸿','O','扁平疣','303'),

('21124','秦长乐','男',32,'020','陆磊','B','皮肤癣','303'),

('21125','丘寸心','男',48,'021','李丽','O','血胸','304'),

('21126','路从风','男',18,'022','高涛','B','漏斗胸','304'),

('21127','王浩','男',29,'023','陈若玉','A','胸部异物','305'),

('21128','潘奕','女',30,'024','刘思雨','AB','胸腔积液','305')

Go

6.3.5护士表插入数据

insert into 护士表(护士编号,姓名,性别,年龄,科室号)

values('110101','夏一柳','女',25,'101'),

('110102','席梦荣','女',28,'101'),

('110103','李文倩','女',22,'102'),

('110104','绕詹林','男',24,'102'),

('110105','吴申萌','女',29,'103'),

('110106','田甜','女',23,'103'),

('110107','高悦然','女',25,'104'),

('110108','刘子诺','女',21,'104'),

('110109','张以诺','女',22,'105'),

('110110','赵佳宇','女',22,'105'),

('110111','张怡铭','女',35,'201'),

('110112','蒋欣芹','女',26,'201'),

('110113','马航钰','女',30,'202'),

('110114','苏芷璇','女',25,'202'),

('110115','王晓甜','女',24,'203'),

('110116','陈子媛','女',26,'203'),

('110117','董璇','女',21,'204'),

('110118','孙玉','女',23,'204'),

('110119','李婉婷','女',28,'205'),

('110120','宋雨涵','女',31,'205'),

('110121','邓梦琪','女',24,'301'),

('110122','崔佳玉','女',26,'301'),

('110123','郭星瞳','女',24,'302'),

('110124','郭思羽','女',23,'302'),

('110125','王雨橙','女',28,'303'),

('110126','刘子琳','女',27,'303'),

('110127','李雨霏','女',29,'304'),

('110128','陆嘉晨','女',24,'304'),

('110129','张馨予','女',23,'305'),

('110130','刘欣悦','女',27,'305')

Go

6.3.6分配表插入数据

insert into 分配表(病房号,护士编号)

values('001','110101'),

('002','110102'),

('003','110103'),

('004','110104'),

('005','110105'),

('006','110106'),

('007','110107'),

('007','110108'),

('008','110109'),

('009','110110'),

('010','110111'),

('011','110112'),

('012','110113'),

('012','110114'),

('013','110115'),

('013','110116'),

('014','110117'),

('015','110118'),

('016','110119'),

('016','110120'),

('017','110121'),

('017','110122'),

('018','110123'),

('018','110124'),

('019','110125'),

('020','110126'),

('021','110127'),

('022','110128'),

('023','110129'),

('024','110130')

Go

7 数据库操作

7.1数据表查询

7.1.1科室表数据查询

go

select *

from 科室表

go

7.1.2医生表数据查询

go

select *

from 医生表

go

 

7.1.3医生表科室表内连接查询

select 医生表.姓名 , 科室名

from 医生表 join 科室表

on 医生表.科室号=科室表.科室号

go

 

 7.1.4在病人表中插入一条信息

(’21129’,’张淦’,’男’,’25’,’024’,’刘思雨’,’O’,’胸腔积液’)。

use 医院信息管理系统

insert into 病人表(病历号,姓名,性别,年龄,病房号,医生姓名,血型,确诊结果)

values('21129','张淦','男','25','024','刘思雨','O','胸腔积液')

go

7.1.5删除病人表中最后一条记录

(’21129’,’张淦’,’男’,’25’,’024’,’刘思雨’,’O’,’胸腔积液’)。

go

delete

from 病人表

where 病历号='21129'

go

7.1.6将护士表中夏一柳的年龄修改为26。

update 护士表

set 年龄='26'

where 姓名='夏一柳'

go

7.1.7查询患有脑积水病人

他的病历号,姓名,性别,年龄,病房号,血型以及所对应的医生姓名,职称,所属科室号。

select 病历号,病人表.姓名,病人表.性别,病人表.年龄,病房号,血型,医生姓名,职称,医生表.科室号

from 病人表 join 医生表

on 病人表.医生姓名=医生表.姓名

where 确诊结果='脑积水'

go

7.1.8查询每个科室拥有多少名护士。

select 科室号,COUNT(护士编号) as '护士人数'

from 护士表

group by 科室号

 

7.1.9查询拥有多于一个病房的科室。

select 科室号,COUNT(病房号) as '病房数'

from 病房表

group by 科室号

having(COUNT(病房号))>1

go

7.1.10查询全体医生的平均年龄。

select AVG(年龄) as '全体医生平均年龄'

from 医生表

go 

 

7.1.11查询病人的年龄,并按降序排列。

select  姓名,年龄

from 病人表

order by 年龄 desc

go

7.1.12查询护士的出生年月。

select 护士编号,姓名,YEAR(GETDATE())-年龄 as '出生日期'

from 护士表

go

7.1.13查询每个护士所负责的病房号。

select 护士表.护士编号,病房号,姓名

from 护士表 join 分配表

on 护士表.护士编号=分配表.护士编号

go 

 

7.1.14查询病人所对应的病历号

他的姓名,性别,血型,病房号,医生姓名,职称,所属科室号,科室名,科室地址。

select  病历号,病人表.姓名,病人表.性别,血型,病房号,医生姓名,职称,医生表.科室号,科室表.科室名,科室表.科室地址

from 病人表 join 医生表

on 病人表.医生姓名=医生表.姓名

join 科室表

on 医生表.科室号=科室表.科室号

go

7.1.15创建一个视图v_pyk

查询病人所对应的病历号,姓名,性别,血型,病房号,医生姓名,职称,所属科室号,科室名,科室地址。

create view v_pyk

as

select  病历号,病人表.姓名,病人表.性别,血型,病房号,医生姓名,职称,医生表.科室号,科室表.科室名,科室表.科室地址

from 病人表 join 医生表

on 病人表.医生姓名=医生表.姓名

join 科室表

on 医生表.科室号=科室表.科室号

go

select *

from v_pyk

go

7.1.16将视图v_pyk中数据更改

将病历号为21126的病人的病房号改为021

update v_pyk

set 病房号='021'

where 病历号='21126'

go

7.1.17创建一个存储过程pr_inf

输出指定病人的姓名,性别,血型,主治医生,医生编号,确诊结果。

create proc pr_inf @pr varchar(20)

as

select 病人表.姓名,病人表.性别,血型,医生姓名,医生编号,确诊结果

from 病人表 join 医生表

on 病人表.医生姓名=医生表.姓名

where 病人表.姓名 like @pr 

go

exec pr_inf '张%'

7.1.18创建一个存储过程hs_bf

输入一个护士编号,输出该护士所对应的病房号以及剩余床位数。

create proc hs_bf @hno char(6),@bno char(10) output ,@bed varchar(10) output 

as

select @bno=分配表.病房号,@bed=床位数

from 分配表 join 病房表

on 病房表.病房号=分配表.病房号

where 护士编号 =@hno

set @bed=convert(varchar,@bed)

go

declare @bno1 char(10),@bed1 varchar(10)

exec hs_bf '110101',@bno1 output ,@bed1 output

print '病房号'+@bno1

print '床位数'+@bed1

go

 

7.1.19创建一个触发器

在删除病人表的一条记录时,所对应的病房表的床位数要实现及时更新。

create trigger tri_br 

on 病人表

instead of delete,update

as

declare @sno char(10) ,@cno char (10)

select @sno =病历号 from deleted

select @cno=病房号 from deleted

delete from 病人表 where 病历号=@sno

update  病房表

set 床位数=床位数+1

where @cno = 病房表.病房号

go

delete from 病人表 where 病历号='21102'

go

有关医院管理系统数据库,课程设计,SQLserver,纯代码设计的更多相关文章

  1. ruby - i18n Assets 管理/翻译 UI - 2

    我正在使用i18n从头开始​​构建一个多语言网络应用程序,虽然我自己可以处理一大堆yml文件,但我说的语言(非常)有限,最终我想寻求外部帮助帮助。我想知道这里是否有人在使用UI插件/gem(与django上的django-rosetta不同)来处理多个翻译器,其中一些翻译器不愿意或无法处理存储库中的100多个文件,处理语言数据。谢谢&问候,安德拉斯(如果您已经在ruby​​onrails-talk上遇到了这个问题,我们深表歉意) 最佳答案 有一个rails3branchofthetolkgem在github上。您可以通过在Gemfi

  2. ruby-on-rails - Rails - 子类化模型的设计模式是什么? - 2

    我有一个模型:classItem项目有一个属性“商店”基于存储的值,我希望Item对象对特定方法具有不同的行为。Rails中是否有针对此的通用设计模式?如果方法中没有大的if-else语句,这是如何干净利落地完成的? 最佳答案 通常通过Single-TableInheritance. 关于ruby-on-rails-Rails-子类化模型的设计模式是什么?,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.co

  3. ruby - 如何在 buildr 项目中使用 Ruby 代码? - 2

    如何在buildr项目中使用Ruby?我在很多不同的项目中使用过Ruby、JRuby、Java和Clojure。我目前正在使用我的标准Ruby开发一个模拟应用程序,我想尝试使用Clojure后端(我确实喜欢功能代码)以及JRubygui和测试套件。我还可以看到在未来的不同项目中使用Scala作为后端。我想我要为我的项目尝试一下buildr(http://buildr.apache.org/),但我注意到buildr似乎没有设置为在项目中使用JRuby代码本身!这看起来有点傻,因为该工具旨在统一通用的JVM语言并且是在ruby中构建的。除了将输出的jar包含在一个独特的、仅限ruby​​

  4. ruby - 解析 RDFa、微数据等的最佳方式是什么,使用统一的模式/词汇(例如 schema.org)存储和显示信息 - 2

    我主要使用Ruby来执行此操作,但到目前为止我的攻击计划如下:使用gemsrdf、rdf-rdfa和rdf-microdata或mida来解析给定任何URI的数据。我认为最好映射到像schema.org这样的统一模式,例如使用这个yaml文件,它试图描述数据词汇表和opengraph到schema.org之间的转换:#SchemaXtoschema.orgconversion#data-vocabularyDV:name:namestreet-address:streetAddressregion:addressRegionlocality:addressLocalityphoto:i

  5. ruby-on-rails - Rails 源代码 : initialize hash in a weird way? - 2

    在rails源中:https://github.com/rails/rails/blob/master/activesupport/lib/active_support/lazy_load_hooks.rb可以看到以下内容@load_hooks=Hash.new{|h,k|h[k]=[]}在IRB中,它只是初始化一个空哈希。和做有什么区别@load_hooks=Hash.new 最佳答案 查看rubydocumentationforHashnew→new_hashclicktotogglesourcenew(obj)→new_has

  6. ruby-on-rails - 使用 rails 4 设计而不更新用户 - 2

    我将应用程序升级到Rails4,一切正常。我可以登录并转到我的编辑页面。也更新了观点。使用标准View时,用户会更新。但是当我添加例如字段:name时,它​​不会在表单中更新。使用devise3.1.1和gem'protected_attributes'我需要在设备或数据库上运行某种更新命令吗?我也搜索过这个地方,找到了许多不同的解决方案,但没有一个会更新我的用户字段。我没有添加任何自定义字段。 最佳答案 如果您想允许额外的参数,您可以在ApplicationController中使用beforefilter,因为Rails4将参数

  7. ruby-on-rails - 浏览 Ruby 源代码 - 2

    我的主要目标是能够完全理解我正在使用的库/gem。我尝试在Github上从头到尾阅读源代码,但这真的很难。我认为更有趣、更温和的踏脚石就是在使用时阅读每个库/gem方法的源代码。例如,我想知道RubyonRails中的redirect_to方法是如何工作的:如何查找redirect_to方法的源代码?我知道在pry中我可以执行类似show-methodmethod的操作,但我如何才能对Rails框架中的方法执行此操作?您对我如何更好地理解Gem及其API有什么建议吗?仅仅阅读源代码似乎真的很难,尤其是对于框架。谢谢! 最佳答案 Ru

  8. ruby - Ruby 有 `Pair` 数据类型吗? - 2

    有时我需要处理键/值数据。我不喜欢使用数组,因为它们在大小上没有限制(很容易不小心添加超过2个项目,而且您最终需要稍后验证大小)。此外,0和1的索引变成了魔数(MagicNumber),并且在传达含义方面做得很差(“当我说0时,我的意思是head...”)。散列也不合适,因为可能会不小心添加额外的条目。我写了下面的类来解决这个问题:classPairattr_accessor:head,:taildefinitialize(h,t)@head,@tail=h,tendend它工作得很好并且解决了问题,但我很想知道:Ruby标准库是否已经带有这样一个类? 最佳

  9. ruby - 模块嵌套代码风格偏好 - 2

    我的假设是moduleAmoduleBendend和moduleA::Bend是一样的。我能够从thisblog找到解决方案,thisSOthread和andthisSOthread.为什么以及什么时候应该更喜欢紧凑语法A::B而不是另一个,因为它显然有一个缺点?我有一种直觉,它可能与性能有关,因为在更多命名空间中查找常量需要更多计算。但是我无法通过对普通类进行基准测试来验证这一点。 最佳答案 这两种写作方法经常被混淆。首先要说的是,据我所知,没有可衡量的性能差异。(在下面的书面示例中不断查找)最明显的区别,可能也是最著名的,是你的

  10. ruby - 寻找通过阅读代码确定编程语言的ruby gem? - 2

    几个月前,我读了一篇关于ruby​​gem的博客文章,它可以通过阅读代码本身来确定编程语言。对于我的生活,我不记得博客或gem的名称。谷歌搜索“ruby编程语言猜测”及其变体也无济于事。有人碰巧知道相关gem的名称吗? 最佳答案 是这个吗:http://github.com/chrislo/sourceclassifier/tree/master 关于ruby-寻找通过阅读代码确定编程语言的rubygem?,我们在StackOverflow上找到一个类似的问题:

随机推荐