当前位置: 首页 > article >正文

报销系统数据库设计

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
);


http://www.kler.cn/news/340866.html

相关文章:

  • 系统架构设计师教程 第13章 13.6 物联网层次架构设计 笔记
  • 动态规划算法专题(六):回文串问题
  • Fetch获取内容乱码问题
  • 【python机器学习】线性回归 拟合 欠拟合与过拟合 以及波士顿房价预估案例
  • Spring Boot 自动配置原理
  • LeetCode hot100---滑动窗口专题(C++语言)
  • NUKE 15有哪些新的改进功能?影视后期特效合成NUKE 15 安装包分享 【Mac/win】
  • 3D看车如何实现?有哪些功能特点和优势?
  • Clio——麻省理工学院增强机器人场景理解算法
  • 【SQL】换座位
  • 什么是物联网nb水表?
  • MSTP、MPLS和SD-WAN组网技术对比
  • Java重修笔记 第六十三天 坦克大战(十三)IO 流 - ObjectInputStream 和 ObjectOutputStream、对处理流的细节整理
  • 基于hadoop和springboot的高校固定资产管理系统的设计与实现
  • 搭建企业域名服务器案例
  • 【VUE】虚拟DOM真的比真实DOM性能好吗
  • 【FastAdmin】全栈视角下的页面跳转实现:从原生html、javascrpt、php技术到jQuery、FastAdmin框架
  • spark的rdd介绍和应用
  • 图像处理(一)——CMC特刊推荐
  • Win11 23H2 10月正式版:22631.4317 镜像免费下载!