草庐IT

数据库课程设计 医院管理系统 SQL

硝酸童不酸 2023-12-02 原文

文章目录


一、背景资料(需求分析)

某医院希望建立数据库来管理其主要业务信息,业务规则如下:
(1)一个科室有多个病房,多个医生;
(2)一个病房属于一个科室;
(3)一个医生只能属于一个科室,但可负责多个病人的诊治;
(4)一个病人的主管医生只有一人;

二、功能模块

1、基本信息管理模块
(1)科室基本信息的录入,删除,修改,查询。
其中基本信息包括:科名,科地址,科电话,主任医生姓名等信息
(2)病房基本信息的录入,删除,修改,查询。
其中基本信息包括:病房号,床位号,所属科室名等信息
(3)医生基本信息的录入,删除,修改,查询。
其中基本信息包括:姓名,职称,所属科室名,年龄,工作证号等信息
(4)病人基本信息的录入,删除,修改,查询。
其中基本信息包括:病历号,姓名,性别,诊断,主管医生,病房号等信息。
2、业务功能模块
(1)信息查询模块
病人信息查询
医生工作情况查询
查询负责病人最多的前 10 个的医生信息及其负责病人的个数
查询负责病人最多的前 10 个的科室信息及其负责病人的个数
(2)费用计算模块
住院所需费用计算

三、功能设计说明书(要求详细描述各模块功能,给出模块结构图(SC图)


业务功能模块设计说明:
(1)信息查询模块
病人信息查询:设计一个存储过程,以病历号作为输入参数,检索病人的情况,包括病人病历号,病人姓名、主治医生姓名,诊断结果,病房号和病床号。
医生工作情况查询:设计一个存储过程,检索每一位医生的工作情况,包括医生工作证号,负责的病人姓名,没有治疗过任何病人的医生也应出现在结果中。
查询医生负责的病人人数:查询负责病人最多的前 10 个的医生信息及其负责的病人个数
查询科室负责的病人人数:查询负责病人最多的前 10 个的科室信息及其负责病人的个数
(2)费用计算模块
住院费用:(出院日期-入院日期)* 病房收费标准。
设置存储过程,输入病人病历号和出院日期,计算住院费用。显示病历号,病人姓名,住院时间,病房收费标准,住院费用。

四、数据库设计

1、概念模型(ER图)

2、逻辑模型

(1) 基础逻辑模型(实体-联系转换的对应表,写出关系模式,标出主码)
实体表(ER图中的方块)
1-1 病人表(病历号,姓名,性别,诊断结果,病房号,病床号,入院日期,主治医师)
1-2 医生表(工作证号,姓名,职称,所属科室名,年龄)
1-3 科室表(科名,科电话,科地址,主任医生姓名)
1-4 病房表(病房号,所属科室名,收费标准,床位总数,已使用床位数)
联系表(ER图中的菱形)
2-1 属于表(工作证号,科名)
2-2 包含表(病房号,科名)
2-3 入住表(病历号,病房号)
2-4 诊治(病历号,工作证号)
(2)数据库优化分析和说明(包括关系模式的合并和范式检查)
2.1关系模式合并:
1.病人表和入住表和诊治表的主码相同,可以将三个表进行合并
合并后的复合表:
3-1病人表(病历号,姓名,性别,诊断结果,病房号,病床号,入院日期,主治医生)
2.医生表和属于表的主码相同,将两个表进行合并
合并后的复合表:
3-2 医生表(工作证号,姓名,职称,所属科室名,年龄)
3.病房表和包含表的主码相同,将两个表进行合并
合并后的复合表:
3-3 病房表(病房号,所属科室名,收费标准,床位总数,已使用床位数)

五、建表以及sql语句

(1)病人表

(病历号,姓名,性别,诊断结果,病房号,病床号,入院日期,出院日期,工作证号)

表语句:

create table patient(
	Patient_no varchar(50) primary key,
	Patient_name varchar(50) NULL,
	Patient_sex varchar(50) NULL,
	Patient_result varchar(50),
	Patient_roomno varchar(50),
	Patient_bedno varchar(50),
	Patient_intime date,
	Patient_doctor varchar(50),
	foreign key (Patient_doctor) references doctor(doctor_no),
	foreign key (Patient_roomno) references room(room_no));

(2)医生表

(工作证号,姓名,职称,所属科室名,年龄)

表语句:

create table doctor(
	doctor_no varchar(50) primary key,
	doctor_name varchar(50),
	doctor_post varchar(50),
	doctor_office varchar(50),
	doctor_age int,
	foreign key (doctor_office) references office(office_name));

(3)科室表

(科名,科电话,科地址,主任医生姓名)

表语句:

create table office (
	office_name varchar(50) primary key,
	office_phone varchar(50),
	office_address varchar(50),
	office_leader varchar(50));

(4)病房表

(病房号,所属科室名,收费标准, 总床位数,已使用床位数)

表语句:

create table room(
	room_no varchar(50) primary key,
	room_office varchar(50),
	room_money varchar(50),
	room_bed int,
	room_usebed int,
	foreign key (room_office) references office(office_name));

六、功能模块详细设计

1、存储过程1:病人信息查询

Create procedure patient_info(no varchar(50))
Begin
Select patient.panient_no,patient.patient_name,doctor.doctor_name,patient.patient_result,patient.patient_roomno,patient.patient_bedno 
from patient,doctor 
where patient.patient_no=no and patient.patient_doctor=doctor.doctor_no;
End

2、 存储过程2:医生工作情况查询

Create procedure doctor_work()
Begin
Select doctor.doctor_no,doctor.doctor_name,patient.patient_name from doctor left join patient on patient.patient_doctor=doctor.doctor_no;
End

3、 存储过程3:查询医生负责的病人人数

Create procedure doctor_front10()
Begin
Select doctor.*,count(doctor.doctor_no) from patient,doctor where patient.patient_doctor=doctor.doctor_no
Group by doctor.doctor_no
Order by count(doctor.doctor_no) desc
Limit 0,10;
End

4、 存储过程4:查询科室负责的病人人数

Create procedure office_front10()
Begin
Select office.*,countn(doctor.doctor_no)
From office,doctor,patient
Where patient.patient.doctor=doctor.doctor_no and office.office_name=doctor.doctor_office
Group by office.office_name
Order by count(doctor.doctor_no) desc
Limit 0,10;
End

5、存储过程5:费用计算

Create procedure cost(no varchar(50),out_time date)
Begin
Declare cost int;
Declare in_time date;
Declare days int;
Declare name varchar(50);
Declare value int;

Select patient_name into name from patient where patient_no=no;
Select patient_intime into in_time from patient where patient_no=no;
Select room.room_money into value from patient,room 
where patient.patient_no=no and patient.patient_roomno=room.room_no;

set days=datediff(out_time,in_time);
set cost=days*value;

select no,name,days,value,cost;
end

触发器1:当有新病人入住时,相应病房的已使用床位数加一

Create trigger in_hospital
After insert on patient
For each row

Begin
Update room set room_usebed=room_usebed+1 where room_no=new.patient_roomno;
End

触发器2:当有病人出院时,相应病房的已使用床位数减一

Create trigger out_hospital
After delete on patient
For each row

Begin
Update room set room_usebed=room_usebed-1 where room_no=old.patient_roomno;
End

七、测试结果

稍微放两个
调用存储过程4:查询科室负责的病人人数

调用存储过程5:费用计算


总结

实现的功能相对简单,有待完善
基本上只要ER图画好,后续功能的实现还是比较容易的

有关数据库课程设计 医院管理系统 SQL的更多相关文章

  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 - 解析 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

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

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

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

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

  6. ruby-on-rails - 获取 inf-ruby 以使用 ruby​​ 版本管理器 (rvm) - 2

    我安装了ruby​​版本管理器,并将RVM安装的ruby​​实现设置为默认值,这样'哪个ruby'显示'~/.rvm/ruby-1.8.6-p383/bin/ruby'但是当我在emacs中打开inf-ruby缓冲区时,它使用安装在/usr/bin中的ruby​​。有没有办法让emacs像shell一样尊重ruby​​的路径?谢谢! 最佳答案 我创建了一个emacs扩展来将rvm集成到emacs中。如果您有兴趣,可以在这里获取:http://github.com/senny/rvm.el

  7. ruby-on-rails - 事件管理员日期过滤器日期格式自定义 - 2

    是否有简单的方法来更改默认ISO格式(yyyy-mm-dd)的ActiveAdmin日期过滤器显示格式? 最佳答案 您可以像这样为日期选择器提供额外的选项,而不是覆盖js:=f.input:my_date,as::datepicker,datepicker_options:{dateFormat:"mm/dd/yy"} 关于ruby-on-rails-事件管理员日期过滤器日期格式自定义,我们在StackOverflow上找到一个类似的问题: https://s

  8. ruby - 我如何添加二进制数据来遏制 POST - 2

    我正在尝试使用Curbgem执行以下POST以解析云curl-XPOST\-H"X-Parse-Application-Id:PARSE_APP_ID"\-H"X-Parse-REST-API-Key:PARSE_API_KEY"\-H"Content-Type:image/jpeg"\--data-binary'@myPicture.jpg'\https://api.parse.com/1/files/pic.jpg用这个:curl=Curl::Easy.new("https://api.parse.com/1/files/lion.jpg")curl.multipart_form_

  9. 世界前沿3D开发引擎HOOPS全面讲解——集3D数据读取、3D图形渲染、3D数据发布于一体的全新3D应用开发工具 - 2

    无论您是想搭建桌面端、WEB端或者移动端APP应用,HOOPSPlatform组件都可以为您提供弹性的3D集成架构,同时,由工业领域3D技术专家组成的HOOPS技术团队也能为您提供技术支持服务。如果您的客户期望有一种在多个平台(桌面/WEB/APP,而且某些客户端是“瘦”客户端)快速、方便地将数据接入到3D应用系统的解决方案,并且当访问数据时,在各个平台上的性能和用户体验保持一致,HOOPSPlatform将帮助您完成。利用HOOPSPlatform,您可以开发在任何环境下的3D基础应用架构。HOOPSPlatform可以帮您打造3D创新型产品,HOOPSSDK包含的技术有:快速且准确的CAD

  10. 电脑0x0000001A蓝屏错误怎么U盘重装系统教学 - 2

      电脑0x0000001A蓝屏错误怎么U盘重装系统教学分享。有用户电脑开机之后遇到了系统蓝屏的情况。系统蓝屏问题很多时候都是系统bug,只有通过重装系统来进行解决。那么蓝屏问题如何通过U盘重装新系统来解决呢?来看看以下的详细操作方法教学吧。  准备工作:  1、U盘一个(尽量使用8G以上的U盘)。  2、一台正常联网可使用的电脑。  3、ghost或ISO系统镜像文件(Win10系统下载_Win10专业版_windows10正式版下载-系统之家)。  4、在本页面下载U盘启动盘制作工具:系统之家U盘启动工具。  U盘启动盘制作步骤:  注意:制作期间,U盘会被格式化,因此U盘中的重要文件请注

随机推荐