新闻详情

新闻详情

首页 / 资讯中心 / 详情

mysql设计一下工资系统表

发布时间:2026/9/28 20:19:10来源:尧图网络
mysql设计一下工资系统表
下面给你一套 **MySQL 工资系统表设计**覆盖典型的中小企业薪资场景员工、部门、薪资结构、考勤、社保公积金、个税、工资单、发放记录。设计原则**基础数据与计算结果分离**工资单一经确认不可随意改动留痕便于审计和重算。## 一、整体表清单| 表名 | 用途 ||---|---|| department | 部门 || employee | 员工基本信息 || employee_bank | 员工银行卡发薪用 || salary_item | 薪资项目字典基本工资、津贴、扣款等 || salary_structure | 薪资结构模板岗位/职级对应 || salary_structure_item | 结构模板明细 || employee_salary | 员工薪资标准定薪 || attendance | 考勤记录月度汇总 || social_insurance_config | 社保公积金配置城市/基数上下限/比例 || insurance_fund | 员工社保公积金月度明细 || tax_config | 个税税率表累进 || salary_sheet | 工资单主表月度、员工 || salary_sheet_item | 工资单明细各薪资项金额 || salary_payment | 发放记录银行回盘、状态 || salary_adjust_log | 调薪记录 |## 二、建表 SQL### 1. 部门sqlCREATE TABLE department (id BIGINT UNSIGNED NOT NULL AUTO_INCREMENT,parent_id BIGINT UNSIGNED NOT NULL DEFAULT 0,name VARCHAR(100) NOT NULL,code VARCHAR(50) NOT NULL,leader_id BIGINT UNSIGNED DEFAULT NULL COMMENT 部门负责人 employee.id,status TINYINT NOT NULL DEFAULT 1 COMMENT 1启用 0停用,created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,updated_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,PRIMARY KEY (id),UNIQUE KEY uk_code (code),KEY idx_parent (parent_id)) ENGINEInnoDB DEFAULT CHARSETutf8mb4 COMMENT部门;### 2. 员工sqlCREATE TABLE employee (id BIGINT UNSIGNED NOT NULL AUTO_INCREMENT,emp_no VARCHAR(50) NOT NULL COMMENT 工号,name VARCHAR(50) NOT NULL,gender TINYINT NOT NULL DEFAULT 0 COMMENT 0未知 1男 2女,id_card VARCHAR(32) DEFAULT NULL COMMENT 身份证(建议加密存储),phone VARCHAR(20) DEFAULT NULL,email VARCHAR(100) DEFAULT NULL,dept_id BIGINT UNSIGNED NOT NULL,position VARCHAR(100) DEFAULT NULL COMMENT 岗位,job_level VARCHAR(50) DEFAULT NULL COMMENT 职级,hire_date DATE NOT NULL COMMENT 入职日期,leave_date DATE DEFAULT NULL COMMENT 离职日期,employment_type TINYINT NOT NULL DEFAULT 1 COMMENT 1全职 2兼职 3实习 4外包,status TINYINT NOT NULL DEFAULT 1 COMMENT 1在职 2试用 3离职 4停薪留职,created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,updated_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,PRIMARY KEY (id),UNIQUE KEY uk_emp_no (emp_no),KEY idx_dept (dept_id),KEY idx_status (status)) ENGINEInnoDB DEFAULT CHARSETutf8mb4 COMMENT员工;### 3. 员工银行卡sqlCREATE TABLE employee_bank (id BIGINT UNSIGNED NOT NULL AUTO_INCREMENT,employee_id BIGINT UNSIGNED NOT NULL,bank_name VARCHAR(100) NOT NULL,branch_name VARCHAR(200) DEFAULT NULL,account_no VARCHAR(64) NOT NULL COMMENT 银行卡号(建议加密),account_name VARCHAR(50) NOT NULL COMMENT 开户名,is_default TINYINT NOT NULL DEFAULT 1,created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,PRIMARY KEY (id),KEY idx_emp (employee_id)) ENGINEInnoDB DEFAULT CHARSETutf8mb4 COMMENT员工银行卡;### 4. 薪资项目字典sqlCREATE TABLE salary_item (id BIGINT UNSIGNED NOT NULL AUTO_INCREMENT,code VARCHAR(50) NOT NULL COMMENT 项目编码 如 BASIC/BONUS/TAX,name VARCHAR(100) NOT NULL COMMENT 项目名称,type TINYINT NOT NULL COMMENT 1固定收入 2浮动收入 3固定扣款 4浮动扣款 5公司承担,calc_type TINYINT NOT NULL DEFAULT 1 COMMENT 1手工 2公式 3系统计算,formula VARCHAR(500) DEFAULT NULL COMMENT 计算公式,taxable TINYINT NOT NULL DEFAULT 1 COMMENT 是否计税 1是 0否,sort_no INT NOT NULL DEFAULT 0,status TINYINT NOT NULL DEFAULT 1,created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,PRIMARY KEY (id),UNIQUE KEY uk_code (code)) ENGINEInnoDB DEFAULT CHARSETutf8mb4 COMMENT薪资项目字典;### 5. 薪资结构模板sqlCREATE TABLE salary_structure (id BIGINT UNSIGNED NOT NULL AUTO_INCREMENT,name VARCHAR(100) NOT NULL COMMENT 模板名称,job_level VARCHAR(50) DEFAULT NULL COMMENT 适用职级,status TINYINT NOT NULL DEFAULT 1,created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,PRIMARY KEY (id)) ENGINEInnoDB DEFAULT CHARSETutf8mb4 COMMENT薪资结构模板;CREATE TABLE salary_structure_item (id BIGINT UNSIGNED NOT NULL AUTO_INCREMENT,structure_id BIGINT UNSIGNED NOT NULL,item_id BIGINT UNSIGNED NOT NULL COMMENT salary_item.id,amount DECIMAL(14,2) NOT NULL DEFAULT 0 COMMENT 固定金额,ratio DECIMAL(8,4) DEFAULT NULL COMMENT 比例(如绩效系数),sort_no INT NOT NULL DEFAULT 0,PRIMARY KEY (id),KEY idx_struct (structure_id)) ENGINEInnoDB DEFAULT CHARSETutf8mb4 COMMENT薪资结构明细;### 6. 员工定薪sqlCREATE TABLE employee_salary (id BIGINT UNSIGNED NOT NULL AUTO_INCREMENT,employee_id BIGINT UNSIGNED NOT NULL,structure_id BIGINT UNSIGNED DEFAULT NULL,effective_date DATE NOT NULL COMMENT 生效日期,base_salary DECIMAL(14,2) NOT NULL DEFAULT 0 COMMENT 基本工资,post_salary DECIMAL(14,2) NOT NULL DEFAULT 0 COMMENT 岗位工资,performance_salary DECIMAL(14,2) NOT NULL DEFAULT 0 COMMENT 绩效工资,allowance DECIMAL(14,2) NOT NULL DEFAULT 0 COMMENT 津贴合计,status TINYINT NOT NULL DEFAULT 1 COMMENT 1生效 0历史,created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,PRIMARY KEY (id),KEY idx_emp_date (employee_id, effective_date)) ENGINEInnoDB DEFAULT CHARSETutf8mb4 COMMENT员工定薪;### 7. 考勤汇总sqlCREATE TABLE attendance (id BIGINT UNSIGNED NOT NULL AUTO_INCREMENT,employee_id BIGINT UNSIGNED NOT NULL,year_month CHAR(7) NOT NULL COMMENT YYYY-MM,work_days DECIMAL(5,2) NOT NULL DEFAULT 0 COMMENT 应出勤天数,actual_days DECIMAL(5,2) NOT NULL DEFAULT 0 COMMENT 实际出勤,leave_days DECIMAL(5,2) NOT NULL DEFAULT 0 COMMENT 事假,sick_days DECIMAL(5,2) NOT NULL DEFAULT 0 COMMENT 病假,annual_days DECIMAL(5,2) NOT NULL DEFAULT 0 COMMENT 年假,absent_days DECIMAL(5,2) NOT NULL DEFAULT 0 COMMENT 旷工,late_count INT NOT NULL DEFAULT 0,overtime_hours DECIMAL(8,2) NOT NULL DEFAULT 0,created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,PRIMARY KEY (id),UNIQUE KEY uk_emp_month (employee_id, year_month)) ENGINEInnoDB DEFAULT CHARSETutf8mb4 COMMENT月度考勤汇总;### 8. 社保公积金配置sqlCREATE TABLE social_insurance_config (id BIGINT UNSIGNED NOT NULL AUTO_INCREMENT,city VARCHAR(50) NOT NULL COMMENT 城市,insurance_type VARCHAR(30) NOT NULL COMMENT pension/medical/unemployment/injury/maternity/housing,base_min DECIMAL(14,2) NOT NULL COMMENT 基数下限,base_max DECIMAL(14,2) NOT NULL COMMENT 基数上限,company_ratio DECIMAL(8,4) NOT NULL COMMENT 公司比例,personal_ratio DECIMAL(8,4) NOT NULL COMMENT 个人比例,effective_date DATE NOT NULL,status TINYINT NOT NULL DEFAULT 1,created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,PRIMARY KEY (id),KEY idx_city_type (city, insurance_type, effective_date)) ENGINEInnoDB DEFAULT CHARSETutf8mb4 COMMENT社保公积金配置;### 9. 员工社保公积金月度明细sqlCREATE TABLE insurance_fund (id BIGINT UNSIGNED NOT NULL AUTO_INCREMENT,employee_id BIGINT UNSIGNED NOT NULL,year_month CHAR(7) NOT NULL,insurance_base DECIMAL(14,2) NOT NULL DEFAULT 0 COMMENT 社保基数,fund_base DECIMAL(14,2) NOT NULL DEFAULT 0 COMMENT 公积金基数,pension_personal DECIMAL(14,2) NOT NULL DEFAULT 0,medical_personal DECIMAL(14,2) NOT NULL DEFAULT 0,unemployment_personal DECIMAL(14,2) NOT NULL DEFAULT 0,fund_personal DECIMAL(14,2) NOT NULL DEFAULT 0,pension_company DECIMAL(14,2) NOT NULL DEFAULT 0,medical_company DECIMAL(14,2) NOT NULL DEFAULT 0,unemployment_company DECIMAL(14,2) NOT NULL DEFAULT 0,injury_company DECIMAL(14,2) NOT NULL DEFAULT 0,maternity_company DECIMAL(14,2) NOT NULL DEFAULT 0,fund_company DECIMAL(14,2) NOT NULL DEFAULT 0,created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,PRIMARY KEY (id),UNIQUE KEY uk_emp_month (employee_id, year_month)) ENGINEInnoDB DEFAULT CHARSETutf8mb4 COMMENT员工社保公积金月度明细;### 10. 个税税率表累计预扣sqlCREATE TABLE tax_config (id BIGINT UNSIGNED NOT NULL AUTO_INCREMENT,level INT NOT NULL COMMENT 级数,threshold_min DECIMAL(14,2) NOT NULL COMMENT 累计应纳税所得额下限,threshold_max DECIMAL(14,2) DEFAULT NULL COMMENT 上限, NULL表示无上限,rate DECIMAL(8,4) NOT NULL COMMENT 税率,quick_deduction DECIMAL(14,2) NOT NULL COMMENT 速算扣除数,effective_year YEAR NOT NULL,created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,PRIMARY KEY (id),KEY idx_year_level (effective_year, level)) ENGINEInnoDB DEFAULT CHARSETutf8mb4 COMMENT个税税率表;### 11. 工资单主表sqlCREATE TABLE salary_sheet (id BIGINT UNSIGNED NOT NULL AUTO_INCREMENT,employee_id BIGINT UNSIGNED NOT NULL,year_month CHAR(7) NOT NULL COMMENT YYYY-MM,gross_pay DECIMAL(14,2) NOT NULL DEFAULT 0 COMMENT 应发合计,deduction_total DECIMAL(14,2) NOT NULL DEFAULT 0 COMMENT 扣款合计(含社保公积金个人个税),net_pay DECIMAL(14,2) NOT NULL DEFAULT 0 COMMENT 实发合计,tax DECIMAL(14,2) NOT NULL DEFAULT 0 COMMENT 个税,insurance_personal DECIMAL(14,2) NOT NULL DEFAULT 0 COMMENT 社保个人合计,fund_personal DECIMAL(14,2) NOT NULL DEFAULT 0 COMMENT 公积金个人,company_cost DECIMAL(14,2) NOT NULL DEFAULT 0 COMMENT 公司总成本,status TINYINT NOT NULL DEFAULT 0 COMMENT 0草稿 1已计算 2已确认 3已发放 4已作废,calc_time DATETIME DEFAULT NULL,confirm_time DATETIME DEFAULT NULL,remark VARCHAR(500) DEFAULT NULL,created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,updated_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,PRIMARY KEY (id),UNIQUE KEY uk_emp_month (employee_id, year_month),KEY idx_month_status (year_month, status)) ENGINEInnoDB DEFAULT CHARSETutf8mb4 COMMENT工资单主表;### 12. 工资单明细sqlCREATE TABLE salary_sheet_item (id BIGINT UNSIGNED NOT NULL AUTO_INCREMENT,sheet_id BIGINT UNSIGNED NOT NULL COMMENT salary_sheet.id,item_id BIGINT UNSIGNED NOT NULL COMMENT salary_item.id,item_code VARCHAR(50) NOT NULL COMMENT 冗余,防字典变动,item_name VARCHAR(100) NOT NULL,item_type TINYINT NOT NULL COMMENT 同 salary_item.type,amount DECIMAL(14,2) NOT NULL DEFAULT 0,remark VARCHAR(255) DEFAULT NULL,created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,PRIMARY KEY (id),KEY idx_sheet (sheet_id),KEY idx_item (item_id)) ENGINEInnoDB DEFAULT CHARSETutf8mb4 COMMENT工资单明细;### 13. 发放记录sqlCREATE TABLE salary_payment (id BIGINT UNSIGNED NOT NULL AUTO_INCREMENT,sheet_id BIGINT UNSIGNED NOT NULL,employee_id BIGINT UNSIGNED NOT NULL,bank_account VARCHAR(64) NOT NULL COMMENT 发放卡号(快照),amount DECIMAL(14,2) NOT NULL COMMENT 实发金额,pay_date DATE DEFAULT NULL,status TINYINT NOT NULL DEFAULT 0 COMMENT 0待发放 1发放中 2成功 3失败,fail_reason VARCHAR(255) DEFAULT NULL,bank_serial VARCHAR(100) DEFAULT NULL COMMENT 银行流水号,created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,updated_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,PRIMARY KEY (id),UNIQUE KEY uk_sheet (sheet_id),KEY idx_emp (employee_id),KEY idx_status (status)) ENGINEInnoDB DEFAULT CHARSETutf8mb4 COMMENT工资发放记录;### 14. 调薪记录sqlCREATE TABLE salary_adjust_log (id BIGINT UNSIGNED NOT NULL AUTO_INCREMENT,employee_id BIGINT UNSIGNED NOT NULL,old_base DECIMAL(14,2) NOT NULL DEFAULT 0,new_base DECIMAL(14,2) NOT NULL DEFAULT 0,old_total DECIMAL(14,2) NOT NULL DEFAULT 0,new_total DECIMAL(14,2) NOT NULL DEFAULT 0,reason VARCHAR(255) DEFAULT NULL COMMENT 调薪原因,effective_date DATE NOT NULL,operator_id BIGINT UNSIGNED DEFAULT NULL,created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,PRIMARY KEY (id),KEY idx_emp (employee_id)) ENGINEInnoDB DEFAULT CHARSETutf8mb4 COMMENT调薪记录;## 三、关键设计说明**1. 金额统一用 DECIMAL(14,2)**工资、社保、个税都是钱**绝不能用 float/double**否则累加会丢精度。DECIMAL(14,2) 支持到百亿级足够。**2. 工资单「主表 明细」拆分**salle_sheet 存汇总应发/扣款/实发/个税/状态salary_sheet_item 存每个薪资项。好处- 薪资项可动态扩展不用改表结构- 明细里冗余 item_code/item_name/item_type防止字典表被改后历史工资单对不上**3. 唯一约束防重**- salary_sheet 的 uk_emp_month一个员工一个月只能有一张工资单重算要走「作废 新建」或更新状态- attendance、insurance_fund 同理**4. 状态机**工资单状态草稿 → 已计算 → 已确认 → 已发放确认后禁止修改明细只能作废重来。这是审计要求。**5. 社保公积金单独表**insurance_fund 把个人和公司部分都存下来方便- 算工资单的扣款- 算公司总成本company_cost- 生成社保申报表**6. 个税用累计预扣法**tax_config 按 level effective_year 存税率区间和速算扣除数。实际计算需结合「累计收入 - 累计专项扣除 - 累计减除费用」查表这属于业务逻辑不适合放表里。**7. 敏感字段加密**id_card、account_no 建议应用层加密如 AES后再存或至少做脱敏展示。数据库层面可考虑 TDE。**8. 索引设计**高频查询是「按月份 状态」和「按员工 月份」所以- salary_sheet(year_month, status)、(employee_id, year_month)- attendance/insurance_fund(employee_id, year_month)## 四、可选扩展按需增加不一定要全上- salary_sheet_approval审批流多级审批、审批人、意见- bonus_plan / bonus_detail年终奖、项目奖金- salary_advance预支工资- loan / loan_repayment员工借款与还款- cost_center成本中心用于分摊公司成本到项目/部门- exchange_rate多币种发薪## 五、一个计算流程示例1. 读取 employee在职 employee_salary当前生效定薪2. 读取 attendance当月考勤→ 算缺勤扣款、加班费3. 读取 insurance_fund当月社保公积金→ 取个人扣款部分4. 按 salary_item 逐项计算应发、扣款5. 累计预扣法算个税6. 写入 salary_sheet salary_sheet_item状态已计算7. 财务确认状态已确认8. 生成 salary_payment对接银行代发状态已发放9. 回盘更新 salary_payment.status 成功/失败如果你告诉我具体数据库版本MySQL 5.7 / 8.0、是否有多个发薪主体、是否需要多币种我可以再细化分区、字符集或增加对应表。
网站建设高端定制企业官网
RELATED

相关资讯

更多精彩内容,欢迎继续阅读

较早相关资讯

最新相关资讯

《P14079 [GESP202509 八级] 最短距离》 2026/9/28 21:10:41

《P14079 [GESP202509 八级] 最短距离》

题目背景 对应的选择、判断题&#xff1a;试题 - GESP 202509 C 八级 - 洛谷有题 题目描述 给定正整数 p,q 以及常数 N1018。现在构建一张包含 N 个结点的带权无向图&#xff0c;结点依次以 1,2,…,N 编号。对于任意满足 1≤u<v≤N 的 u,v&#xff0c;向图中加入一条连接…

阅读更多 →
企业级AI Coding实战:如何让AI真正读懂你的系统? 2026/9/28 21:10:41

企业级AI Coding实战:如何让AI真正读懂你的系统?

存量系统里&#xff0c;瓶颈到底在哪 普通互联网项目用 AI 写代码很简单&#xff1a;需求进来&#xff0c;写个 Prompt&#xff0c;AI 分析、写代码、跑测试&#xff0c;基本就完事了。因为项目没什么历史包袱&#xff0c;技术栈公开&#xff0c;架构简单&#xff0c;规模也可…

阅读更多 →
2026年AI编程进阶路线:从Vibe Coding到企业级智能体架构实战 2026/9/28 21:10:41

2026年AI编程进阶路线:从Vibe Coding到企业级智能体架构实战

2026年AI编程进阶路线&#xff1a;从Vibe Coding到企业级智能体架构实战摘要&#xff1a;随着大模型技术爆发&#xff0c;AI编程范式正在发生剧变。从传统手写业务代码&#xff0c;到Vibe Coding指挥AI生成代码&#xff0c;再到自主开发AI智能体服务。很多开发者盲目内卷微调、…

阅读更多 →
AWS SDK for Python(Boto3)调用 Amazon Rekognition 完整实战指南 2026/9/28 21:10:41

AWS SDK for Python(Boto3)调用 Amazon Rekognition 完整实战指南

示例工程教程后端 【免费下载链接】aws-doc-sdk-examples Welcome to the AWS Code Examples Repository. This repo contains code examples used in the AWS documentation, AWS SDK Developer Guides, and more. For more information, see the Readme.md file below. 项目地…

阅读更多 →
国产 AI Agent 框架怎么选,元气 Bot 与 ArkClaw 到底适合谁 2026/9/28 21:10:41

国产 AI Agent 框架怎么选,元气 Bot 与 ArkClaw 到底适合谁

选型困境&#xff1a;当 AI Agent 从概念走向落地在 AI 应用开发的浪潮中&#xff0c;开发者们正面临一个甜蜜的烦恼&#xff1a;国产 AI Agent 框架层出不穷&#xff0c;但哪一款才是你手中的“瑞士军刀”&#xff1f;社区里戏称的“四只龙虾”——元气 Bot、ArkClaw、DuClaw …

阅读更多 →
OpenMausBot语音模式:如何让AI Bot开口回话,甚至接打语音电话 2026/9/28 21:10:28

OpenMausBot语音模式:如何让AI Bot开口回话,甚至接打语音电话

OpenMausBot语音模式&#xff1a;如何让AI Bot开口回话&#xff0c;甚至接打语音电话 【免费下载链接】OpenMausBot Open Source Alternative to Grok Bot with a virtual machine that bots can use 项目地址: https://gitcode.com/gh_mirrors/op/OpenMausBot OpenMaus…

阅读更多 →

今日资讯

本周资讯

本月资讯

看完文章仍有疑问?

联系尧图顾问,获取一对一建站咨询

立即免费咨询 📞 400-888-8888
📞 ✉