文章目录
场景设计
场景描述:公司员工管理系统
公司需要管理员工的晋升和调薪,要求如下:
- 员工表 (
employees
) 记录员工的基本信息、工资、入职时间、部门等。 - 薪资历史表 (
salary_history
) 记录员工的薪资变更情况。 - 晋升记录表 (
promotion_history
) 记录员工的晋升情况。
需求
- 定期评估员工,符合晋升条件的自动晋升并加薪:
- 入职 满2年 且 当前职位不是最高级 的员工,有50% 概率晋升。
- 晋升后工资增加 15%-25%(随机)。
- 晋升失败但工作满3年,工资 上涨 10%。
- 所有变更都需记录在历史表中。
- 使用动态 SQL 以支持不同部门的不同晋升规则。
1. 创建数据库和表
CREATE DATABASE IF NOT EXISTS company_db;
USE company_db;
-- 部门表
CREATE TABLE departments (
dept_id INT AUTO_INCREMENT PRIMARY KEY,
dept_name VARCHAR(50) UNIQUE NOT NULL
);
-- 员工表
CREATE TABLE employees (
emp_id INT AUTO_INCREMENT PRIMARY KEY,
emp_name VARCHAR(50) NOT NULL,
dept_id INT,
position VARCHAR(50),
salary DECIMAL(10,2),
hire_date DATE,
FOREIGN KEY (dept_id) REFERENCES departments(dept_id)
);
-- 薪资历史表
CREATE TABLE salary_history (
record_id INT AUTO_INCREMENT PRIMARY KEY,
emp_id INT,
old_salary DECIMAL(10,2),
new_salary DECIMAL(10,2),
change_date TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
FOREIGN KEY (emp_id) REFERENCES employees(emp_id)
);
-- 晋升历史表
CREATE TABLE promotion_history (
record_id INT AUTO_INCREMENT PRIMARY KEY,
emp_id INT,
old_position VARCHAR(50),
new_position VARCHAR(50),
promotion_date TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
FOREIGN KEY (emp_id) REFERENCES employees(emp_id