GaussDB(for MySQL) 搭建医院人事数据库管理系统
一、业务背景
每个科室有多名医生,每名医生只能在一个科室中工作。每名医生可以参加多个医药科研项目,每个医药科研项目可以由多名医生参加。每个医药科研项目由一名医生担任总负责人,一名医生可以负责多个医药科研项目。每名医生参加某医药科研项目,都有“项目职责”和“每年投入几个月”这两个信息。其他相关信息包括:
科室:科室编号、科室描述
医生:工号、姓名、性别、出生日期、进入医院工作日期、职称
医药科研项目:项目编号、项目名称、项目简述
二、E-R图
三、关系模式
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”,即可获得可视化的数据结构以检查数据定义的正确性。
以下为本次设计导出的结果
五、使用华为云GaussDB
首先进入华为云官网进行用户登陆
其次,点击服务列表->云数据库 GaussDB(for MySQL)。
进入云数据库 GaussDB信息页面,没有资源,则选择右上方"购买数据库实例"。
通过个人账号按需购买GaussDB数据库,然后等待数据库初始化后登陆,测试连接成功后进入数据库。
六、设计业务需求并在GaussDB数据库查看结果
业务需求一:
视图:医生中各个科室人数的分布
CREATE VIEW dept_doc_number AS
select dep_id,COUNT (*) from doctor GROUP BY dep_id
业务需求二:
触发器:随着医生参与的项目增加,其职称(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。
业务需求三:
函数:查询一个医生参与了多少个项目
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的医生,参与了三个项目。
- 点赞
- 收藏
- 关注作者
评论(0)