人力资源管理系统

1、ER图

2、数据库模型图

3、DDL

CREATE TABLE `departments` (
  `department_id` int(11) NOT NULL AUTO_INCREMENT COMMENT '部门ID',
  `department_name` varchar(100) NOT NULL COMMENT '部门名称',
  PRIMARY KEY (`department_id`),
  UNIQUE KEY `department_name` (`department_name`)
) ENGINE=InnoDB AUTO_INCREMENT=6 DEFAULT CHARSET=utf8;

CREATE TABLE `positions` (
  `position_id` int(11) NOT NULL AUTO_INCREMENT COMMENT '职位ID',
  `position_name` varchar(100) NOT NULL COMMENT '职位名称',
  `department_id` int(11) DEFAULT NULL COMMENT '所属部门ID',
  PRIMARY KEY (`position_id`),
  UNIQUE KEY `position_name` (`position_name`),
  KEY `positions_ibfk_1` (`department_id`),
  CONSTRAINT `positions_ibfk_1` FOREIGN KEY (`department_id`) REFERENCES `departments` (`department_id`) ON DELETE NO ACTION ON UPDATE NO ACTION
) ENGINE=InnoDB AUTO_INCREMENT=16 DEFAULT CHARSET=utf8;

CREATE TABLE `salary_grades` (
  `grade_id` int(11) NOT NULL AUTO_INCREMENT COMMENT '薪资等级ID',
  `grade_name` varchar(50) NOT NULL COMMENT '薪资等级名称',
  `minimum_salary` decimal(10,2) NOT NULL COMMENT '最低薪资',
  `maximum_salary` decimal(10,2) NOT NULL COMMENT '最高薪资',
  PRIMARY KEY (`grade_id`)
) ENGINE=InnoDB AUTO_INCREMENT=6 DEFAULT CHARSET=utf8;

CREATE TABLE `trainings` (
  `training_id` int(11) NOT NULL AUTO_INCREMENT COMMENT '培训ID',
  `training_name` varchar(100) NOT NULL COMMENT '培训名称',
  `description` text COMMENT '培训描述',
  `training_date` date NOT NULL COMMENT '培训日期',
  PRIMARY KEY (`training_id`)
) ENGINE=InnoDB AUTO_INCREMENT=6 DEFAULT CHARSET=utf8;

CREATE TABLE `users` (
  `user_id` int(11) NOT NULL AUTO_INCREMENT COMMENT '员工ID',
  `username` varchar(50) NOT NULL COMMENT '用户名',
  `password` varchar(255) NOT NULL COMMENT '密码',
  `first_name` varchar(50) NOT NULL COMMENT '名',
  `last_name` varchar(50) NOT NULL COMMENT '姓',
  `gender` enum('男','女') NOT NULL COMMENT '性别',
  `email` varchar(100) DEFAULT NULL COMMENT '邮箱',
  `phone` varchar(20) DEFAULT NULL COMMENT '电话',
  `hire_date` date NOT NULL COMMENT '入职日期',
  PRIMARY KEY (`user_id`),
  UNIQUE KEY `username` (`username`),
  UNIQUE KEY `email` (`email`),
  UNIQUE KEY `phone` (`phone`)
) ENGINE=InnoDB AUTO_INCREMENT=6 DEFAULT CHARSET=utf8;

CREATE TABLE `employee_salaries` (
  `salary_id` int(11) NOT NULL AUTO_INCREMENT COMMENT '薪资记录ID',
  `user_id` int(11) DEFAULT NULL COMMENT '员工ID',
  `grade_id` int(11) DEFAULT NULL COMMENT '薪资等级ID',
  `salary` decimal(10,2) NOT NULL COMMENT '薪资',
  `start_date` date NOT NULL COMMENT '薪资开始日期',
  PRIMARY KEY (`salary_id`),
  KEY `employee_salaries_ibfk_1` (`user_id`),
  KEY `employee_salaries_ibfk_2` (`grade_id`),
  CONSTRAINT `employee_salaries_ibfk_1` FOREIGN KEY (`user_id`) REFERENCES `users` (`user_id`) ON DELETE NO ACTION ON UPDATE NO ACTION,
  CONSTRAINT `employee_salaries_ibfk_2` FOREIGN KEY (`grade_id`) REFERENCES `salary_grades` (`grade_id`) ON DELETE NO ACTION ON UPDATE NO ACTION
) ENGINE=InnoDB AUTO_INCREMENT=15 DEFAULT CHARSET=utf8;

CREATE TABLE `employee_trainings` (
  `id` int(11) NOT NULL AUTO_INCREMENT COMMENT '培训记录ID',
  `user_id` int(11) DEFAULT NULL COMMENT '员工ID',
  `training_id` int(11) DEFAULT NULL COMMENT '培训ID',
  `attendance_date` date NOT NULL COMMENT '参加日期',
  PRIMARY KEY (`id`),
  KEY `employee_trainings_ibfk_1` (`user_id`),
  KEY `employee_trainings_ibfk_2` (`training_id`),
  CONSTRAINT `employee_trainings_ibfk_1` FOREIGN KEY (`user_id`) REFERENCES `users` (`user_id`) ON DELETE NO ACTION ON UPDATE NO ACTION,
  CONSTRAINT `employee_trainings_ibfk_2` FOREIGN KEY (`training_id`) REFERENCES `trainings` (`training_id`) ON DELETE NO ACTION ON UPDATE NO ACTION
) ENGINE=InnoDB AUTO_INCREMENT=6 DEFAULT CHARSET=utf8;

4、DML

INSERT INTO `departments` VALUES ('2', '培训与发展部门');
INSERT INTO `departments` VALUES ('1', '安保部门');
INSERT INTO `departments` VALUES ('4', '招聘与配置部门');
INSERT INTO `departments` VALUES ('3', '组织文化部门');
INSERT INTO `departments` VALUES ('5', '财务部门');

INSERT INTO `users` VALUES ('1', '韩信', '123', '韩信', '兵仙', '男', 'hanxin@example.com', '13800138001', '2020-01-01');
INSERT INTO `users` VALUES ('2', '牛魔王', '123', '牛魔王', '平天大圣', '男', 'niumowang@example.com', '13900139002', '2021-05-15');
INSERT INTO `users` VALUES ('3', '项羽', '123', '项羽', '西楚霸王', '男', 'xiangyu@example.com', '13700137003', '2022-09-01');
INSERT INTO `users` VALUES ('4', '诸葛亮', '123', '诸葛亮', '卧龙', '男', 'zhugeliang@example.com', '13735660000', '2023-01-01');
INSERT INTO `users` VALUES ('5', '庞统', '123', '庞统', '凤雏', '男', 'pangtong@example.com', '13832677457', '2023-02-01');

INSERT INTO `salary_grades` VALUES ('1', '临时工', '3000.00', '5000.00');
INSERT INTO `salary_grades` VALUES ('2', '中级工', '5500.00', '8000.00');
INSERT INTO `salary_grades` VALUES ('3', '高级工', '9000.00', '15000.00');
INSERT INTO `salary_grades` VALUES ('4', '高管', '12000.00', '20000.00');
INSERT INTO `salary_grades` VALUES ('5', '专家', '30000.00', '50000.00');

INSERT INTO `trainings` VALUES ('1', '培训与发展项目', '提升员工的职业发展能力', '2023-01-01');
INSERT INTO `trainings` VALUES ('2', '安全意识培训', '提升员工的安全防范意识', '2023-02-01');
INSERT INTO `trainings` VALUES ('3', '人力资源招聘与配置培训', '提升员工的专业知识和技能', '2023-03-01');
INSERT INTO `trainings` VALUES ('4', '企业文化培训', '提升员工对组织的认同感和归属感', '2023-04-01');
INSERT INTO `trainings` VALUES ('5', '财务管理培训', '提升员工财务风控意识', '2023-05-01');

INSERT INTO `positions` VALUES ('11', '培新与发展经理', '1');
INSERT INTO `positions` VALUES ('12', '保安大队长', '2');
INSERT INTO `positions` VALUES ('13', '面试官', '3');
INSERT INTO `positions` VALUES ('14', '组织部总监', '4');
INSERT INTO `positions` VALUES ('15', '财务部长', '5');

INSERT INTO `employee_trainings` VALUES ('1', '1', '1', '2023-03-15');
INSERT INTO `employee_trainings` VALUES ('2', '2', '2', '2023-04-10');
INSERT INTO `employee_trainings` VALUES ('3', '1', '3', '2023-05-05');
INSERT INTO `employee_trainings` VALUES ('4', '3', '1', '2023-03-16');
INSERT INTO `employee_trainings` VALUES ('5', '2', '3', '2023-05-06');

INSERT INTO `employee_salaries` VALUES ('10', '1', '1', '3500.00', '2020-01-01');
INSERT INTO `employee_salaries` VALUES ('11', '2', '2', '7000.00', '2021-05-15');
INSERT INTO `employee_salaries` VALUES ('12', '3', '3', '12000.00', '2022-09-01');
INSERT INTO `employee_salaries` VALUES ('13', '4', '4', '20000.00', '2023-01-01');
INSERT INTO `employee_salaries` VALUES ('14', '5', '5', '50000.00', '2023-02-01');

5、基础查询

-- 用中文显示用户姓名和手机号
select username'姓名',phone'手机号' from users;

-- 根据部门名称模糊查询***部,需要走索引
explain select * from departments where department_name like '___门';

-- 根据培训记录表查询所有用户的培训id数量,根据培训次数倒叙排序
select user_id'员工id',count(training_id) '培训次数' from employee_trainings  group by user_id order by '培训次数' desc;

6、复杂查询

-- 正确显示职位信息对应培训应用信息多表联合查询
select * from positions,trainings where department_id=training_id;

-- 正确使用聚合函数,使用子查询,查看工种最大薪资>所有工种的平均最大薪资的工种
select grade_name '工种',maximum_salary '最大薪资' from salary_grades
where 
	maximum_salary>(select avg(maximum_salary) from salary_grades) 
order by grade_name limit 1;

-- 使用子查询查询最小薪资<所有工种的平均最小薪资的工种,并利用多表查询查询用户姓名和密码
select username'姓名',`password`'密码',grade_name'工种',maximum_salary'最大薪资' from salary_grades,users
where minimum_salary>(select avg(minimum_salary) from salary_grades)and user_id=grade_id order by grade_name;

7、触发器

DELIMITER $$
CREATE TRIGGER before_user_email_update
BEFORE UPDATE ON users
FOR EACH ROW
BEGIN
    IF EXISTS (SELECT 1 FROM users WHERE email = NEW.email AND user_id <> NEW.user_id) THEN
        SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT = '新的邮箱地址已经被其他用户使用';
    END IF;
END $$
DELIMITER ;

DELIMITER $$
CREATE TRIGGER before_department_delete
BEFORE DELETE ON departments
FOR EACH ROW
BEGIN
    DECLARE employee_count INT;
    
    -- 检查是否有员工在该部门下
    SELECT COUNT(*) INTO employee_count FROM positions WHERE department_id = OLD.department_id;
    
    IF employee_count > 0 THEN
        SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT = '该部门下仍有员工,不可删除。';
    END IF;
END $$
DELIMITER ;

8、存储过程

-- 更新员工薪资记录
DELIMITER $$
CREATE PROCEDURE UpdateEmployeeSalary(
    IN p_salary_id INT,
    IN p_salary DECIMAL(10,2)
)
BEGIN
    UPDATE employee_salaries
    SET salary = p_salary
    WHERE salary_id = p_salary_id;
END $$
DELIMITER ;


-- 调用存储过程
CALL UpdateEmployeeSalary(10, 3800.00);

-- 删除员工培训记录
DELIMITER $$
CREATE PROCEDURE DeleteEmployeeTraining(
    IN p_id INT
)
BEGIN
    DELETE FROM employee_trainings
    WHERE id = p_id;
END $$
DELIMITER ;


-- 调用存储过程
CALL DeleteEmployeeTraining(5);

  • 4
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值