授课课时:2 授课地点:三教202
授课形式:教学做合一
教学目标
(一)知识目标:
- 掌握MySQL基础操作和数据库设计原理。
- 理解范式理论,学会数据备份与恢复。
(二)能力目标:
- 能设计并实现人力资源管理系统数据库。
- 能进行数据增删改查和数据库优化。
(三)素质目标:
- 培养团队合作和沟通能力。
- 增强数据安全意识和问题解决能力。
教学重难点
(一)重点:数据库设计原理与SQL操作技能。
(二)难点:范式理论的应用与索引优化。
教学资源
教科书、PPT、 Navicat 、’头歌’在线实验平台
教学方法
(一)教法
1.讲授法 2.示范法 3.讨论法
(二)学法
1.自主学习 2.实践操作 3.归纳总结
教学过程设计
(一)课前任务
请同学们预习MySQL数据库基础,安装并熟悉环境,准备基本SQL语句操作,并思考人力资源管理系统的基本需求。
(二)课程导入
让我们开始探索《人力资源管理系统》的数据库设计之旅,通过MySQL实现数据的有效管理与优化。
(三)综合实训目标:
- 通过实际项目操作,加深对数据库设计和MySQL使用的理解
- 培养学生解决实际问题的能力
- 使学生能够独立完成一个简单的数据库应用项目
(四)实训内容
1. 需求分析
- 功能需求
- 员工管理:添加、删除、更新、查询员工信息
- 部门管理:添加、删除、更新、查询部门信息
- 职位管理:添加、删除、更新、查询职位信息
- 薪资管理:记录员工薪资信息
- 非功能需求
- 数据库性能优化
- 安全性要求
- 备份与恢复
2. 数据库设计
- 实体关系图 (ER图)
3. 数据库实现
- 创建数据库和表的SQL语句
CREATE DATABASE hr_management;
USE hr_management;
CREATE TABLE Department (
department_id INT PRIMARY KEY AUTO_INCREMENT,
department_name VARCHAR(50) NOT NULL
);
CREATE TABLE Position (
position_id INT PRIMARY KEY AUTO_INCREMENT,
position_name VARCHAR(50) NOT NULL,
salary DECIMAL(10, 2) NOT NULL
);
CREATE TABLE Employee (
employee_id INT PRIMARY KEY AUTO_INCREMENT,
first_name VARCHAR(50) NOT NULL,
last_name VARCHAR(50) NOT NULL,
birth_date DATE NOT NULL,
hire_date DATE NOT NULL,
position_id INT,
department_id INT,
FOREIGN KEY (position_id) REFERENCES Position(position_id),
FOREIGN KEY (department_id) REFERENCES Department(department_id)
);
CREATE TABLE Salary (
salary_id INT PRIMARY KEY AUTO_INCREMENT,
employee_id INT,
base_salary DECIMAL(10, 2) NOT NULL,
bonus DECIMAL(10, 2),
pay_date DATE NOT NULL,
FOREIGN KEY (employee_id) REFERENCES Employee(employee_id)
);
4. 基本操作
- 插入示例数据
INSERT INTO Department (department_name) VALUES ('Human Resources');
INSERT INTO Department (department_name) VALUES ('Finance');
INSERT INTO Department (department_name) VALUES ('IT');
INSERT INTO Position (position_name, salary) VALUES ('Manager', 8000);
INSERT INTO Position (position_name, salary) VALUES ('Developer', 6000);
INSERT INTO Position (position_name, salary) VALUES ('Analyst', 5000);
INSERT INTO Employee (first_name, last_name, birth_date, hire_date, position_id, department_id) VALUES ('John', 'Doe', '1985-03-20', '2010-01-15', 1, 1);
INSERT INTO Employee (first_name, last_name, birth_date, hire_date, position_id, department_id) VALUES ('Jane', 'Smith', '1990-07-25', '2015-04-23', 2, 3);
INSERT INTO Salary (employee_id, base_salary, bonus, pay_date) VALUES (1, 8000, 1000, '2023-05-01');
INSERT INTO Salary (employee_id, base_salary, bonus, pay_date) VALUES (2, 6000, 500, '2023-05-01');
查询数据
-- 查询所有员工信息
SELECT * FROM Employee;
-- 查询某个部门的所有员工
SELECT e.* FROM Employee e
JOIN Department d ON e.department_id = d.department_id
WHERE d.department_name = 'IT';
-- 查询某个职位的所有员工
SELECT e.* FROM Employee e
JOIN Position p ON e.position_id = p.position_id
WHERE p.position_name = 'Manager';
-- 查询某个员工的薪资信息
SELECT s.* FROM Salary s
JOIN Employee e ON s.employee_id = e.employee_id
WHERE e.first_name = 'John' AND e.last_name = 'Doe';
5.高级操作
- 创建视图
CREATE VIEW EmployeeInfo AS
SELECT e.employee_id, e.first_name, e.last_name, d.department_name, p.position_name
FROM Employee e
JOIN Department d ON e.department_id = d.department_id
JOIN Position p ON e.position_id = p.position_id;
使用存储过程
DELIMITER //
CREATE PROCEDURE GetEmployeeSalaries(IN emp_id INT)
BEGIN
SELECT * FROM Salary WHERE employee_id = emp_id;
END //
DELIMITER ;
使用触发器
DELIMITER //
CREATE TRIGGER UpdateSalary BEFORE INSERT ON Salary
FOR EACH ROW
BEGIN
SET NEW.base_salary = NEW.base_salary + (NEW.bonus * 0.1);
END //
DELIMITER ;
6. 系统测试
- 测试各个功能模块,确保系统运行正常
- 检查数据一致性和完整性
- 进行性能测试和优化
课程总结
通过本项目的实训,学生将掌握从需求分析、数据库设计到实际实现的全过程。通过具体的实训操作,学生不仅能够加深对MySQL数据库的理解,还能提高解决实际问题的能力。
课后作业
请同学们根据今天的实训内容,完成一个小型的人力资源管理系统数据库设计,并提交一份包含ER图、SQL创建语句、基本数据操作的报告。
反思整改
我将评估学生对数据库设计和MySQL操作的掌握程度,同时考虑如何改进教学方法以提升学生的实践能力和理解深度。