网站首页 > 文章精选 正文
1. 数据库概述
我们将设计一个简单的员工信息数据库,包含以下功能:
- 员工管理:添加、更新、删除员工信息。
- 部门管理:添加、更新、删除部门信息。
- 薪资管理:记录员工的薪资变动。
- 报表生成:生成部门和员工的统计报表。
- 权限管理:不同角色的用户有不同的操作权限。
2. 数据库设计
2.1 表结构设计
- 员工表(employees):
CREATE TABLE employees (
id SERIAL PRIMARY KEY,
name VARCHAR(100) NOT NULL,
position VARCHAR(100),
salary NUMERIC,
hire_date DATE,
department_id INTEGER REFERENCES departments(id)
);
- 部门表(departments):
CREATE TABLE departments (
id SERIAL PRIMARY KEY,
name VARCHAR(100) NOT NULL,
budget NUMERIC
);
- 薪资变动表(salary_changes):
CREATE TABLE salary_changes (
id SERIAL PRIMARY KEY,
employee_id INTEGER REFERENCES employees(id),
old_salary NUMERIC,
new_salary NUMERIC,
change_date DATE
);
- 用户表(users):
CREATE TABLE users (
id SERIAL PRIMARY KEY,
username VARCHAR(100) NOT NULL UNIQUE,
password VARCHAR(100) NOT NULL,
role VARCHAR(50) NOT NULL
);
2.2 索引设计
- 员工表的索引:
CREATE INDEX idx_employee_name ON employees (name);
CREATE INDEX idx_employee_department ON employees (department_id);
- 薪资变动表的索引:
CREATE INDEX idx_salary_change_employee ON salary_changes (employee_id);
3. 功能实现
3.1 员工管理
- 添加员工:
INSERT INTO employees (name, position, salary, hire_date, department_id)
VALUES ('Alice', 'Software Engineer', 75000, '2023-01-01', 1);
- 更新员工信息:
UPDATE employees SET salary = 80000 WHERE id = 1;
- 删除员工:
DELETE FROM employees WHERE id = 1;
3.2 部门管理
- 添加部门:
INSERT INTO departments (name, budget) VALUES ('Engineering', 1000000);
- 更新部门信息:
UPDATE departments SET budget = 1200000 WHERE id = 1;
- 删除部门:
DELETE FROM departments WHERE id = 1;
3.3 薪资管理
- 记录薪资变动:
INSERT INTO salary_changes (employee_id, old_salary, new_salary, change_date)
VALUES (1, 75000, 80000, '2023-10-01');
3.4 报表生成
- 部门统计报表:
SELECT d.name, COUNT(e.id) AS employee_count, SUM(e.salary) AS total_salary
FROM departments d
LEFT JOIN employees e ON d.id = e.department_id
GROUP BY d.name;
- 员工薪资变动报表:
SELECT e.name, sc.old_salary, sc.new_salary, sc.change_date
FROM salary_changes sc
JOIN employees e ON sc.employee_id = e.id;
3.5 权限管理
- 创建角色:
CREATE ROLE manager;
CREATE ROLE employee;
- 授予权限:
GRANT SELECT, INSERT, UPDATE ON employees TO manager;
GRANT SELECT ON employees TO employee;
- 创建用户并分配角色:
CREATE USER alice WITH PASSWORD 'password';
GRANT manager TO alice;
4. 高级功能
4.1 触发器
- 自动记录薪资变动:
CREATE FUNCTION log_salary_change() RETURNS TRIGGER AS $
BEGIN
INSERT INTO salary_changes (employee_id, old_salary, new_salary, change_date)
VALUES (OLD.id, OLD.salary, NEW.salary, NOW());
RETURN NEW;
END;
$ LANGUAGE plpgsql;
CREATE TRIGGER salary_change_trigger
AFTER UPDATE OF salary ON employees
FOR EACH ROW EXECUTE FUNCTION log_salary_change();
4.2 存储过程
- 批量更新员工薪资:
CREATE PROCEDURE update_salaries(percentage NUMERIC)
LANGUAGE plpgsql
AS $
BEGIN
UPDATE employees SET salary = salary * (1 + percentage / 100);
END;
$;
4.3 视图
- 员工详细信息视图:
CREATE VIEW employee_details AS
SELECT e.id, e.name, e.position, e.salary, d.name AS department_name
FROM employees e
JOIN departments d ON e.department_id = d.id;
猜你喜欢
- 2025-03-30 工具|Innodb 恢复工具介绍(innodb 是怎么保证崩溃恢复能力的?)
- 2025-03-30 如何使用 SQL 视图和子查询进行复杂查询
- 2025-03-30 Sqlite - 常规函数 - TOTAL_CHANGES
- 2025-03-30 先删除数据库中的记录,然后再导入
- 2025-03-30 数据库:JDBC详解(jdbc数据库连接步骤)
- 2025-03-30 四个案例看懂 MySQL 事务隔离级别
- 2025-03-30 MySQL 中 DELETE 和 TRUNCATE 的用法和区别:详细解析
- 2025-03-30 从需求分析到需求设计的怪谈(需求分析阶段的设计目标是什么?调查内容是什么?)
- 2025-03-30 MySQL归档的常见方式(查看mysql归档文件的命令)
- 2025-03-30 讲两则笑话,当update和delete少了where条件
- 最近发表
- 标签列表
-
- newcoder (56)
- 字符串的长度是指 (45)
- drawcontours()参数说明 (60)
- unsignedshortint (59)
- postman并发请求 (47)
- python列表删除 (50)
- 左程云什么水平 (56)
- 计算机网络的拓扑结构是指() (45)
- 稳压管的稳压区是工作在什么区 (45)
- 编程题 (64)
- postgresql默认端口 (66)
- 数据库的概念模型独立于 (48)
- 产生系统死锁的原因可能是由于 (51)
- 数据库中只存放视图的 (62)
- 在vi中退出不保存的命令是 (53)
- 哪个命令可以将普通用户转换成超级用户 (49)
- noscript标签的作用 (48)
- 联合利华网申 (49)
- swagger和postman (46)
- 结构化程序设计主要强调 (53)
- 172.1 (57)
- apipostwebsocket (47)
- 唯品会后台 (61)
- 简历助手 (56)
- offshow (61)