很多学生或者说是初学者在学习完成数据库的基础增删改查后就自认为在数据库这里就很熟悉了,但是不接触项目根本部知道需求,我这里准备了50个项目的基本需求来让大家来熟练各类项目的列信息,让大家更好的深入项目进行实战式的练习,可以让大家在后面面试的时候有更多更丰富的资历让大家可以与面试官侃侃而谈。
MySQL版本:5.7.31-log
数据库字符集,所有数据库通用字符集与排序规则,支持中文数据。
字符集:utf8 排序规则:utf8_general_ci
使用工具:Navicat Premium 15,可以在下面的连接中下载
https://download.csdn.net/download/feng8403000/89403778
报销审批系统是一个用于处理员工报销申请、审批及记录的系统。该系统通过电子化流程,简化了报销过程,提高了审批效率,并方便管理者对报销情况进行统计和分析。
系统的主要功能包括:
为了直接运行DDL语句并创建表,我们需要确保在创建含有外键约束的表之前,相关的被引用表(即外键指向的表)已经存在。所以我们在创建表的时候一定要按照一定的顺序来创建,否则就会出现没有外键关系导致的创建异常。
CREATE TABLE Users (
user_id INT AUTO_INCREMENT PRIMARY KEY COMMENT '用户ID',
name VARCHAR(100) NOT NULL COMMENT '用户名',
gender ENUM('男', '女') NOT NULL COMMENT '性别',
department VARCHAR(100) NOT NULL COMMENT '部门'
);
CREATE TABLE ExpenseTypes (
type_id INT AUTO_INCREMENT PRIMARY KEY COMMENT '费用类型ID',
type_name VARCHAR(100) NOT NULL COMMENT '费用类型名称'
);
CREATE TABLE ExpenseClaims (
claim_id INT AUTO_INCREMENT PRIMARY KEY COMMENT '报销申请ID',
user_id INT NOT NULL COMMENT '用户ID',
expense_date DATE NOT NULL COMMENT '费用日期',
total_amount DECIMAL(10, 2) NOT NULL COMMENT '总金额',
claim_description TEXT COMMENT '报销描述',
status ENUM('待审批', '已审批', '已驳回') NOT NULL DEFAULT '待审批' COMMENT '报销状态',
FOREIGN KEY (user_id) REFERENCES Users(user_id)
);
CREATE TABLE ExpenseDetails (
detail_id INT AUTO_INCREMENT PRIMARY KEY COMMENT '费用明细ID',
claim_id INT NOT NULL COMMENT '报销申请ID',
type_id INT NOT NULL COMMENT '费用类型ID',
amount DECIMAL(10, 2) NOT NULL COMMENT '金额',
expense_description TEXT COMMENT '费用描述',
FOREIGN KEY (claim_id) REFERENCES ExpenseClaims(claim_id),
FOREIGN KEY (type_id) REFERENCES ExpenseTypes(type_id)
);
CREATE TABLE ApprovalProcesses (
process_id INT AUTO_INCREMENT PRIMARY KEY COMMENT '审批流程ID',
claim_id INT NOT NULL COMMENT '报销申请ID',
approver_id INT NOT NULL COMMENT '审批人ID',
status ENUM('待审批', '已审批', '已驳回') NOT NULL DEFAULT '待审批' COMMENT '审批状态',
FOREIGN KEY (claim_id) REFERENCES ExpenseClaims(claim_id),
FOREIGN KEY (approver_id) REFERENCES Users(user_id)
);
CREATE TABLE ApprovalRecords (
record_id INT AUTO_INCREMENT PRIMARY KEY COMMENT '审批记录ID',
process_id INT NOT NULL COMMENT '审批流程ID',
approver_id INT NOT NULL COMMENT '审批人ID',
approval_date TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '审批日期',
approval_result ENUM('同意', '驳回') NOT NULL COMMENT '审批结果',
remarks TEXT COMMENT '备注',
FOREIGN KEY (process_id) REFERENCES ApprovalProcesses(process_id),
FOREIGN KEY (approver_id) REFERENCES Users(user_id)
);
插入数据的时候也要注意主外键关系,如果没有外检的情况下是没有办法插入从表数据的。
INSERT INTO Users (name, gender, department) VALUES
('孙悟空', '男', '天庭技术部'),
('白骨精', '女', '妖界人事部'),
('猪八戒', '男', '天庭财务部');
INSERT INTO ExpenseTypes (type_name) VALUES ('交通费');
INSERT INTO ExpenseTypes (type_name) VALUES ('餐饮费');
INSERT INTO ExpenseTypes (type_name) VALUES ('住宿费');
INSERT INTO ExpenseClaims (user_id, expense_date, total_amount, claim_description, status) VALUES
(1, '2023-04-01', 1500.00, '出差北京期间的费用', '待审批'),
(2, '2023-04-05', 1200.00, '参加会议相关费用', '待审批'),
(3, '2023-04-10', 1800.00, '前往上海培训费用', '待审批');
INSERT INTO ExpenseDetails (claim_id, type_id, amount, expense_description) VALUES
(1, 1, 800.00, '北京至上海的火车票'),
(1, 2, 500.00, '出差期间的餐饮费'),
(1, 3, 200.00, '住宿一晚的费用'),
(2, 1, 400.00, '参加会议的交通费'),
(2, 2, 800.00, '会议期间的餐饮费'),
(3, 2, 1000.00, '培训期间的餐饮费'),
(3, 3, 800.00, '培训期间的住宿费');
-- 插入ApprovalProcesses数据,为每个报销申请创建一个审批流程
INSERT INTO ApprovalProcesses (claim_id, approver_id) VALUES
(1, 1),
(2, 1),
(3, 1);
-- 插入ApprovalRecords数据,为每个审批流程添加审批记录
-- 假设第一个报销申请被同意,第二个被驳回,第三个待审批
INSERT INTO ApprovalRecords (process_id, approver_id, approval_result, remarks) VALUES
(1, 1, '同意', '报销申请已通过'),
(2, 1, '驳回', '部分费用不符合报销规定'),
(3, 1, '同意', NULL);
遵循的数据库三范式
数据库建表的三范式(3NF,Third Normal Form)是关系型数据库设计的基本原则,用于确保数据库结构的逻辑性和减少数据冗余。这三个范式是逐步细化的,每一个范式都是在前一个范式的基础上建立的。下面我将详细解释这三个范式:
第一范式(1NF, First Normal Form)
定义:
解释:
第二范式(2NF, Second Normal Form)
定义:
解释:
第三范式(3NF, Third Normal Form)
定义:
解释: