GaussDB(for MySQL) 搭建医院人事数据库管理系统
【摘要】 本次实验主要以医院人事为场景,设计数据库模型,体验华为云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的医生,参与了三个项目。
【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
热门文章
评论(0)