很多学生或者说是初学者在学习完成数据库的基础增删改查后就自认为在数据库这里就很熟悉了,但是不接触项目根本部知道需求,我这里准备了50个项目的基本需求来让大家来熟练各类项目的列信息,让大家更好的深入项目进行实战式的练习,可以让大家在后面面试的时候有更多更丰富的资历让大家可以与面试官侃侃而谈。
MySQL版本:5.7.31-log
数据库字符集,所有数据库通用字符集与排序规则,支持中文数据。
字符集:utf8 排序规则:utf8_general_ci
使用工具:Navicat Premium 15,可以在下面的连接中下载
https://download.csdn.net/download/feng8403000/89403778
工资管理系统是一个用于记录员工薪资信息、计算薪资、管理薪资发放等功能的系统。该系统旨在帮助企业高效、准确地处理员工的薪资数据,并提供方便的查询和报表功能。
系统的主要功能包括:
为了直接运行DDL语句并创建表,我们需要确保在创建含有外键约束的表之前,相关的被引用表(即外键指向的表)已经存在。所以我们在创建表的时候一定要按照一定的顺序来创建,否则就会出现没有外键关系导致的创建异常。
CREATE TABLE Employees (
employee_id INT AUTO_INCREMENT PRIMARY KEY COMMENT '员工ID',
name VARCHAR(100) NOT NULL COMMENT '员工姓名',
gender ENUM('男', '女') NOT NULL COMMENT '性别',
position VARCHAR(100) NOT NULL COMMENT '职位',
hire_date DATE NOT NULL COMMENT '入职日期'
);
CREATE TABLE SalaryItems (
item_id INT AUTO_INCREMENT PRIMARY KEY COMMENT '薪资项目ID',
item_name VARCHAR(100) NOT NULL COMMENT '薪资项目名称',
description VARCHAR(255) COMMENT '薪资项目描述'
);
CREATE TABLE SalaryStandards (
standard_id INT AUTO_INCREMENT PRIMARY KEY COMMENT '薪资标准ID',
item_id INT NOT NULL COMMENT '薪资项目ID',
amount DECIMAL(10, 2) NOT NULL COMMENT '薪资金额',
FOREIGN KEY (item_id) REFERENCES SalaryItems(item_id)
);
CREATE TABLE SalaryDetails (
detail_id INT AUTO_INCREMENT PRIMARY KEY COMMENT '薪资详情ID',
employee_id INT NOT NULL COMMENT '员工ID',
item_id INT NOT NULL COMMENT '薪资项目ID',
amount DECIMAL(10, 2) NOT NULL COMMENT '薪资金额',
payment_date DATE NOT NULL COMMENT '支付日期',
FOREIGN KEY (employee_id) REFERENCES Employees(employee_id),
FOREIGN KEY (item_id) REFERENCES SalaryItems(item_id)
);
CREATE TABLE SalaryPayments (
payment_id INT AUTO_INCREMENT PRIMARY KEY COMMENT '支付ID',
payment_date DATE NOT NULL COMMENT '支付日期',
total_amount DECIMAL(10, 2) NOT NULL COMMENT '总金额'
);
CREATE TABLE SalaryPaymentDetails (
detail_id INT AUTO_INCREMENT PRIMARY KEY COMMENT '支付详情ID',
payment_id INT NOT NULL COMMENT '支付ID',
employee_id INT NOT NULL COMMENT '员工ID',
amount DECIMAL(10, 2) NOT NULL COMMENT '支付金额',
FOREIGN KEY (payment_id) REFERENCES SalaryPayments(payment_id),
FOREIGN KEY (employee_id) REFERENCES Employees(employee_id)
);
插入数据的时候也要注意主外键关系,如果没有外检的情况下是没有办法插入从表数据的。
INSERT INTO Employees (name, gender, position, hire_date) VALUES
('孙悟空', '男', '程序员', '2020-01-01'),
('白骨精', '女', '产品经理', '2020-02-15'),
('猪八戒', '男', 'UI设计师', '2020-03-08');
INSERT INTO SalaryItems (item_name, description) VALUES
('基本工资', '员工的基本薪资'),
('奖金', '根据业绩发放的额外薪资'),
('交通补贴', '用于员工上下班交通费用的补贴');
INSERT INTO SalaryStandards (item_id, amount) VALUES
(1, 5000.00), -- 基本工资
(2, 2000.00), -- 奖金
(3, 500.00); -- 交通补贴
INSERT INTO SalaryDetails (employee_id, item_id, amount, payment_date) VALUES
(1, 1, 5000.00, '2023-04-30'), -- 孙悟空的基本工资
(1, 2, 2000.00, '2023-04-30'), -- 孙悟空的奖金
(1, 3, 500.00, '2023-04-30'), -- 孙悟空的交通补贴
(2, 1, 5000.00, '2023-04-30'), -- 白骨精的基本工资
(2, 3, 500.00, '2023-04-30'), -- 白骨精的交通补贴
(3, 1, 5000.00, '2023-04-30'), -- 猪八戒的基本工资
(3, 3, 500.00, '2023-04-30'); -- 猪八戒的交通补贴
INSERT INTO SalaryPayments (payment_date, total_amount) VALUES
('2023-04-30', 15500.00), -- 假设总金额为所有员工薪资之和
('2023-05-30', 15000.00), -- 假设5月份没有奖金,所以总金额减少
('2023-06-30', 15500.00); -- 假设6月份又发放了奖金
INSERT INTO SalaryPaymentDetails (payment_id, employee_id, amount) VALUES
(1, 1, 7500.00), -- 孙悟空4月工资:基本工资 + 奖金 + 交通补贴
(1, 2, 5500.00), -- 白骨精4月工资:基本工资 + 交通补贴
(1, 3, 5500.00), -- 猪八戒4月工资:基本工资 + 交通补贴
(2, 1, 5500.00), -- 孙悟空5月工资:没有奖金
(2, 2, 5500.00), -- 白骨精5月工资
(2, 3, 5500.00), -- 猪八戒5月工资
(3, 1, 7500.00), -- 孙悟空6月工资:基本工资 + 奖金 + 交通补贴(假设再次发放奖金)
(3, 2, 5500.00); -- 白骨精6月工资
遵循的数据库三范式
数据库建表的三范式(3NF,Third Normal Form)是关系型数据库设计的基本原则,用于确保数据库结构的逻辑性和减少数据冗余。这三个范式是逐步细化的,每一个范式都是在前一个范式的基础上建立的。下面我将详细解释这三个范式:
第一范式(1NF, First Normal Form)
定义:
解释:
第二范式(2NF, Second Normal Form)
定义:
解释:
第三范式(3NF, Third Normal Form)
定义:
解释: