报销系统数据库设计
1. 报销申请表 (expense_reports
)
CREATE TABLE users (
user_id INT AUTO_INCREMENT PRIMARY KEY,
username VARCHAR(50) NOT NULL UNIQUE,
password VARCHAR(255) NOT NULL,
email VARCHAR(100) NOT NULL UNIQUE,
role ENUM('employee', 'manager', 'admin') DEFAULT 'employee',
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
);
不使用外键时,user_id
只是自增的主键,其他表中将存储 user_id
,通过应用逻辑关联用户信息
2. 报销申请表 (expense_reports
)
CREATE TABLE expense_reports (
report_id INT AUTO_INCREMENT PRIMARY KEY,
user_id INT, -- 通过代码关联用户
total_amount DECIMAL(10, 2),
description TEXT,
status ENUM('pending', 'approved', 'rejected') DEFAULT 'pending',
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
);
user_id
在没有外键的情况下,不强制关联 users
表,需要通过业务逻辑来保证关联。
3. 发票表 (invoices
)
存储与报销申请相关的发票。
CREATE TABLE invoices (
invoice_id INT AUTO_INCREMENT PRIMARY KEY,
report_id INT, -- 通过代码关联报销申请
invoice_number VARCHAR(50) NOT NULL,
amount DECIMAL(10, 2) NOT NULL,
invoice_date DATE NOT NULL,
file_path VARCHAR(255), -- 存储发票文件路径
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
report_id
通过业务逻辑关联到 expense_reports
表。
4. 审批流程表 (approvals
)
CREATE TABLE approvals (
approval_id INT AUTO_INCREMENT PRIMARY KEY,
report_id INT, -- 通过代码关联报销申请
approver_id INT, -- 通过代码关联审批人
status ENUM('approved', 'rejected') NOT NULL,
comment TEXT,
approval_date TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
5. 费用类别表 (expense_categories
)
CREATE TABLE expense_categories (
category_id INT AUTO_INCREMENT PRIMARY KEY,
category_name VARCHAR(50) NOT NULL UNIQUE,
description TEXT
);
6. 报销明细表 (expense_items
)
记录每份报销申请中的具体费用项。
CREATE TABLE expense_items (
item_id INT AUTO_INCREMENT PRIMARY KEY,
report_id INT, -- 通过代码关联报销申请
category_id INT, -- 通过代码关联类别
amount DECIMAL(10, 2) NOT NULL,
description TEXT,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);