GaussDB(for MySQL) 搭建医院人事数据库管理系统

举报
瑜希 发表于 2023/11/29 23:08:50 2023/11/29
【摘要】 本次实验主要以医院人事为场景,设计数据库模型,体验华为云GaussDB(for MySQL)构建医院人事场景下的数据库,掌握数据库中的基本操作。

一、业务背景

每个科室有多名医生,每名医生只能在一个科室中工作。每名医生可以参加多个医药科研项目,每个医药科研项目可以由多名医生参加。每个医药科研项目由一名医生担任总负责人,一名医生可以负责多个医药科研项目。每名医生参加某医药科研项目,都有“项目职责”和“每年投入几个月”这两个信息。其他相关信息包括:

科室:科室编号、科室描述

医生:工号、姓名、性别、出生日期、进入医院工作日期、职称

医药科研项目:项目编号、项目名称、项目简述

二、E-R图

1.png


三、关系模式

department(ID,desc) 主键ID

doctor(ID,name,sex,birth,start_date,title,dep_id) 主键ID,外键dept_id引用department表的ID

project(ID,name,desc) 主键ID

participation(p_id,doc_id,pro_id,duty,time) 主键p_id,外键doc_id引用doctor表的ID,pro_id引用project表的ID

四、数据字典

在华为云gaussdb数据库中,在根据上述关系模式创建表之后,使用“库管理”->“数据字典”->“导出PDF”,即可获得可视化的数据结构以检查数据定义的正确性。

以下为本次设计导出的结果

0 (1).png

五、使用华为云GaussDB

首先进入华为云官网进行用户登陆

其次,点击服务列表->云数据库 GaussDB(for MySQL)。

进入云数据库 GaussDB信息页面,没有资源,则选择右上方"购买数据库实例"。

通过个人账号按需购买GaussDB数据库,然后等待数据库初始化后登陆,测试连接成功后进入数据库。

六、设计业务需求并在GaussDB数据库查看结果

业务需求一:

视图:医生中各个科室人数的分布

CREATE VIEW dept_doc_number AS 

select dep_id,COUNT (*) from doctor GROUP BY dep_id 

2fbda0ef8380cdd035247b72bfa6b165.png

业务需求二:

触发器:随着医生参与的项目增加,其职称(level)也增加

DELIMITER $$

CREATE DEFINER `tr_doc_after_insert` AFTER INSERT ON `participation` FOR EACH ROW BEGIN 

UPDATE doctor SET level  = level + 1 WHERE ID = new.doc_id;

END $$

DELIMITER ;

查询ID=10的医生,其初始level = 1

新增一条participation记录

INSERT INTO participation values(11,10,2,'参与',4)

再次查询其level,发现其变为2。

49244f58a34f6f591d7ebd7b66875ee9.png

业务需求三:

函数:查询一个医生参与了多少个项目

DELIMITER $$

CREATE FUNCTION doc_pro_number (id INT) RETURNS INT 

BEGIN 

DECLARE number INT ;

    SELECT COUNT(*) into number FROM participation WHERE doc_id = id;

    RETURN number;

END;

$$

DELIMITER;

查询到ID=1的医生,参与了三个项目。

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。