以下是使用MySQL创建人才管理数据库的分步指南:
- 创建数据库
CREATE DATABASE TalentManagement;
USE TalentManagement;
- 创建部门表
CREATE TABLE Departments (
DepartmentID INT AUTO_INCREMENT PRIMARY KEY,
DepartmentName VARCHAR(50) NOT NULL UNIQUE,
ManagerID INT, -- 后续通过外键关联员工
CreateTime TIMESTAMP DEFAULT CURRENT_TIMESTAMP
) ENGINE=InnoDB;
- 创建职位表
CREATE TABLE Positions (
PositionID INT AUTO_INCREMENT PRIMARY KEY,
PositionName VARCHAR(50) NOT NULL,
DepartmentID INT NOT NULL,
BaseSalary DECIMAL(10,2),
FOREIGN KEY (DepartmentID) REFERENCES Departments(DepartmentID)
) ENGINE=InnoDB;
- 创建员工主表
CREATE TABLE Employees (
EmployeeID INT AUTO_INCREMENT PRIMARY KEY,
FirstName VARCHAR(50) NOT NULL,
LastName VARCHAR(50) NOT NULL,
Gender ENUM('男','女','其他') NOT NULL,
BirthDate DATE,
Email VARCHAR(100) UNIQUE,
Phone VARCHAR(20),
HireDate DATE NOT NULL,
DepartmentID INT,
PositionID INT,
FOREIGN KEY (DepartmentID) REFERENCES Departments(DepartmentID),
FOREIGN KEY (PositionID) REFERENCES Positions(PositionID)
) ENGINE=InnoDB;
- 创建薪资记录表
CREATE TABLE SalaryRecords (
RecordID INT AUTO_INCREMENT PRIMARY KEY,
EmployeeID INT NOT NULL,
PaymentDate DATE NOT NULL,
BasicSalary DECIMAL(10,2),
Bonus DECIMAL(10,2),
Deductions DECIMAL(10,2),
FOREIGN KEY (EmployeeID) REFERENCES Employees(EmployeeID)
) ENGINE=InnoDB;
- 添加测试数据示例
INSERT INTO Departments (DepartmentName) VALUES
('人力资源部'),
('技术研发部'),
('市场营销部');
INSERT INTO Positions (PositionName, DepartmentID, BaseSalary) VALUES
('HR经理', 1, 15000.00),
('软件工程师', 2, 20000.00),
('市场主管', 3, 18000.00);
INSERT INTO Employees (FirstName, LastName, Gender, BirthDate, Email, Phone, HireDate, DepartmentID, PositionID) VALUES
('张', '伟', '男', '1990-05-15', '[email protected]', '13800138000', '2020-03-01', 1, 1),
('李', '娜', '女', '1995-08-22', '[email protected]', '13912345678', '2021-07-15', 2, 2);
- 常用查询示例
-- 查询所有员工完整信息
SELECT e.*, d.DepartmentName, p.PositionName
FROM Employees e
LEFT JOIN Departments d ON e.DepartmentID = d.DepartmentID
LEFT JOIN Positions p ON e.PositionID = p.PositionID;
-- 统计各部门人数
SELECT d.DepartmentName, COUNT(e.EmployeeID) AS EmployeeCount
FROM Departments d
LEFT JOIN Employees e ON d.DepartmentID = e.DepartmentID
GROUP BY d.DepartmentName;
-- 查询薪资发放记录
SELECT e.FirstName, e.LastName, s.PaymentDate,
(s.BasicSalary + s.Bonus - s.Deductions) AS NetSalary
FROM SalaryRecords s
JOIN Employees e ON s.EmployeeID = e.EmployeeID;
- 添加索引优化查询
CREATE INDEX idx_employee_name ON Employees(LastName, FirstName);
CREATE INDEX idx_hire_date ON Employees(HireDate);
扩展建议:
- 添加用户权限表实现访问控制
- 增加培训记录表存储员工培训信息
- 创建绩效评估表记录考核结果
- 添加离职信息字段(是否在职、离职日期等)
- 使用存储过程实现定期薪资计算
注意要点:
- 使用InnoDB引擎支持事务
- 所有金额字段使用DECIMAL类型保证精度
- 为重要字段设置NOT NULL约束
- 为常用查询字段创建索引
- 定期进行数据库备份和维护
这个基础结构可以根据具体需求进行扩展,建议使用MySQL Workbench等工具进行可视化设计和管理。