711 lines
37 KiB
Markdown
711 lines
37 KiB
Markdown
# 资金服务平台数据库设计文档
|
||
|
||
> 版本: v1.0
|
||
> 更新日期: 2026-02-13
|
||
> 作者: zhangjf
|
||
> 数据库: MySQL 8.0
|
||
> 字符集: utf8mb4
|
||
|
||
---
|
||
|
||
## 一、数据库概览
|
||
|
||
### 1.1 数据库信息
|
||
|
||
| 项目 | 值 |
|
||
|------|-----|
|
||
| 数据库名 | fund_platform |
|
||
| 字符集 | utf8mb4 |
|
||
| 排序规则 | utf8mb4_unicode_ci |
|
||
| 存储引擎 | InnoDB |
|
||
| 时区 | +08:00 |
|
||
|
||
### 1.2 表清单
|
||
|
||
| 模块 | 表名 | 说明 | 记录数 |
|
||
|------|------|------|--------|
|
||
| **系统管理** | sys_tenant | 租户表 | 2 |
|
||
| | sys_dept | 部门表 | 7 |
|
||
| | sys_user | 用户表 | 6 |
|
||
| | sys_role | 角色表 | 7 |
|
||
| | sys_menu | 菜单表 | 38 |
|
||
| | sys_user_role | 用户角色关联表 | 6 |
|
||
| | sys_role_menu | 角色菜单关联表 | 动态 |
|
||
| | sys_operation_log | 操作日志表 | 动态 |
|
||
| **客户管理** | customer | 客户表 | 3 |
|
||
| | customer_contact | 客户联系人表 | 0 |
|
||
| **项目管理** | project | 项目表 | 3 |
|
||
| | project_member | 项目成员表 | 6 |
|
||
| **需求工单** | requirement | 需求工单表 | 0 |
|
||
| **支出管理** | expense_type | 支出类型表 | 12 |
|
||
| | expense | 支出表 | 0 |
|
||
| **应收款管理** | receivable | 应收款表 | 0 |
|
||
| | receipt | 收款记录表 | 0 |
|
||
|
||
---
|
||
|
||
## 二、ER 图
|
||
|
||
```
|
||
┌─────────────────────────────────────────────────────────────────────────────────────────┐
|
||
│ 资金服务平台数据库 ER 图 │
|
||
├─────────────────────────────────────────────────────────────────────────────────────────┤
|
||
│ │
|
||
│ ┌──────────────┐ ┌──────────────┐ ┌──────────────┐ │
|
||
│ │ sys_tenant │ │ sys_user │ │ sys_role │ │
|
||
│ │ (租户表) │ │ (用户表) │ │ (角色表) │ │
|
||
│ ├──────────────┤ ├──────────────┤ ├──────────────┤ │
|
||
│ │ PK tenant_id │◄────────┤ FK tenant_id │ │ FK tenant_id │ │
|
||
│ │ code │ │ PK user_id │◄───────►│ PK role_id │ │
|
||
│ │ name │ │ username │ │ code │ │
|
||
│ │ type │ │ password │ │ name │ │
|
||
│ │ status │ │ real_name │ │ type │ │
|
||
│ └──────────────┘ │ dept_id │────────►│ scope │ │
|
||
│ │ status │ └──────────────┘ │
|
||
│ └──────────────┘ ▲ │
|
||
│ ▲ │ │
|
||
│ │ │ │
|
||
│ ┌──────┴──────┐ ┌──────┴──────┐ │
|
||
│ │ sys_dept │ │sys_user_role│ │
|
||
│ │ (部门表) │ │(用户角色关联)│ │
|
||
│ ├─────────────┤ ├─────────────┤ │
|
||
│ │ PK dept_id │ │ PK id │ │
|
||
│ │ FK tenant_id│ │ FK user_id │ │
|
||
│ │ name │ │ FK role_id │ │
|
||
│ │ parent_id │ └─────────────┘ │
|
||
│ └─────────────┘ │
|
||
│ │
|
||
│ ┌──────────────┐ ┌──────────────┐ ┌──────────────┐ │
|
||
│ │ customer │ │ project │ │ requirement │ │
|
||
│ │ (客户表) │ │ (项目表) │ │ (需求工单表) │ │
|
||
│ ├──────────────┤ ├──────────────┤ ├──────────────┤ │
|
||
│ │ PK customer_id│◄───────┤ FK customer_id│◄───────┤ FK customer_id│ │
|
||
│ │ FK tenant_id │ │ FK tenant_id │ │ FK tenant_id │ │
|
||
│ │ code │ │ PK project_id│◄───────┤ FK project_id│ │
|
||
│ │ name │ │ code │ │ PK req_id │ │
|
||
│ │ type │ │ name │ │ code │ │
|
||
│ │ level │ │ manager_id│ │ name │ │
|
||
│ └──────────────┘ │ status │ │ amount │ │
|
||
│ │ └──────────────┘ │ status │ │
|
||
│ │ ▲ └──────────────┘ │
|
||
│ │ │ │
|
||
│ │ ┌──────┴──────┐ │
|
||
│ │ │project_member│ │
|
||
│ │ │(项目成员表) │ │
|
||
│ │ ├─────────────┤ │
|
||
│ │ │ PK member_id│ │
|
||
│ │ │ FK project_id│ │
|
||
│ │ │ FK user_id │ │
|
||
│ │ │ role │ │
|
||
│ │ └─────────────┘ │
|
||
│ │ │
|
||
│ ▼ │
|
||
│ ┌──────────────┐ │
|
||
│ │customer_contact│ │
|
||
│ │(客户联系人表) │ │
|
||
│ ├──────────────┤ │
|
||
│ │ PK contact_id │ │
|
||
│ │ FK customer_id│ │
|
||
│ │ name │ │
|
||
│ │ phone │ │
|
||
│ │ is_primary │ │
|
||
│ └──────────────┘ │
|
||
│ │
|
||
│ ┌──────────────┐ ┌──────────────┐ ┌──────────────┐ │
|
||
│ │ expense_type │ │ expense │ │ receivable │ │
|
||
│ │ (支出类型表) │ │ (支出表) │ │ (应收款表) │ │
|
||
│ ├──────────────┤ ├──────────────┤ ├──────────────┤ │
|
||
│ │ PK type_id │◄────────┤ FK type_id │ │ PK receiv_id │ │
|
||
│ │ FK tenant_id │ │ FK tenant_id │ │ FK tenant_id │ │
|
||
│ │ code │ │ PK expense_id│ │ FK project_id│ │
|
||
│ │ name │ │ code │ │ FK customer_id│ │
|
||
│ │ parent_id │ │ amount │ │ FK req_id │ │
|
||
│ └──────────────┘ │ date │ │ amount │ │
|
||
│ │ status │ │ status │ │
|
||
│ └──────────────┘ └──────┬───────┘ │
|
||
│ │ │
|
||
│ ┌──────┴──────┐ │
|
||
│ │ receipt │ │
|
||
│ │ (收款记录表) │ │
|
||
│ ├─────────────┤ │
|
||
│ │ PK receipt_id│ │
|
||
│ │ FK receiv_id │ │
|
||
│ │ amount │ │
|
||
│ │ date │ │
|
||
│ └─────────────┘ │
|
||
│ │
|
||
└─────────────────────────────────────────────────────────────────────────────────────────┘
|
||
```
|
||
|
||
---
|
||
|
||
## 三、表结构详细说明
|
||
|
||
### 3.1 系统管理模块
|
||
|
||
#### 3.1.1 sys_tenant(租户表)
|
||
|
||
| 字段名 | 类型 | 长度 | 必填 | 默认值 | 说明 |
|
||
|--------|------|------|------|--------|------|
|
||
| tenant_id | BIGINT | - | 是 | 自增 | 主键,租户ID |
|
||
| tenant_code | VARCHAR | 50 | 是 | - | 租户编码(唯一) |
|
||
| tenant_name | VARCHAR | 100 | 是 | - | 租户名称 |
|
||
| tenant_type | TINYINT | - | 否 | 1 | 租户类型:1-一库多租户,2-一库一租户 |
|
||
| contact_name | VARCHAR | 50 | 否 | - | 联系人姓名 |
|
||
| contact_phone | VARCHAR | 20 | 否 | - | 联系人电话 |
|
||
| contact_email | VARCHAR | 100 | 否 | - | 联系人邮箱 |
|
||
| db_config | JSON | - | 否 | - | 数据库配置(一库一租户模式使用) |
|
||
| status | TINYINT | - | 否 | 1 | 状态:0-禁用,1-启用 |
|
||
| expire_time | DATETIME | - | 否 | - | 过期时间 |
|
||
| created_time | DATETIME | - | 否 | CURRENT_TIMESTAMP | 创建时间 |
|
||
| updated_time | DATETIME | - | 否 | CURRENT_TIMESTAMP | 更新时间 |
|
||
|
||
**索引:**
|
||
- PRIMARY KEY (`tenant_id`)
|
||
- UNIQUE KEY `uk_code` (`tenant_code`)
|
||
- INDEX `idx_status` (`status`)
|
||
|
||
---
|
||
|
||
#### 3.1.2 sys_dept(部门表)
|
||
|
||
| 字段名 | 类型 | 长度 | 必填 | 默认值 | 说明 |
|
||
|--------|------|------|------|--------|------|
|
||
| dept_id | BIGINT | - | 是 | 自增 | 主键,部门ID |
|
||
| tenant_id | BIGINT | - | 是 | - | 租户ID(外键) |
|
||
| dept_name | VARCHAR | 100 | 是 | - | 部门名称 |
|
||
| parent_id | BIGINT | - | 否 | 0 | 父部门ID(0表示顶级部门) |
|
||
| dept_code | VARCHAR | 50 | 否 | - | 部门编码 |
|
||
| dept_level | INT | - | 否 | 1 | 部门层级 |
|
||
| sort_order | INT | - | 否 | 0 | 排序顺序 |
|
||
| leader | VARCHAR | 50 | 否 | - | 部门负责人 |
|
||
| leader_phone | VARCHAR | 20 | 否 | - | 负责人电话 |
|
||
| status | TINYINT | - | 否 | 1 | 状态:0-禁用,1-启用 |
|
||
| remark | VARCHAR | 500 | 否 | - | 备注说明 |
|
||
| created_by | BIGINT | - | 否 | - | 创建人ID |
|
||
| created_time | DATETIME | - | 否 | CURRENT_TIMESTAMP | 创建时间 |
|
||
| updated_by | BIGINT | - | 否 | - | 更新人ID |
|
||
| updated_time | DATETIME | - | 否 | CURRENT_TIMESTAMP | 更新时间 |
|
||
| deleted | TINYINT | - | 否 | 0 | 逻辑删除:0-未删除,1-已删除 |
|
||
|
||
**索引:**
|
||
- PRIMARY KEY (`dept_id`)
|
||
- INDEX `idx_tenant` (`tenant_id`)
|
||
- INDEX `idx_parent` (`parent_id`)
|
||
- INDEX `idx_status` (`status`)
|
||
|
||
---
|
||
|
||
#### 3.1.3 sys_user(用户表)
|
||
|
||
| 字段名 | 类型 | 长度 | 必填 | 默认值 | 说明 |
|
||
|--------|------|------|------|--------|------|
|
||
| user_id | BIGINT | - | 是 | 自增 | 主键,用户ID |
|
||
| tenant_id | BIGINT | - | 是 | - | 租户ID(外键) |
|
||
| username | VARCHAR | 50 | 是 | - | 用户名(登录账号) |
|
||
| password | VARCHAR | 100 | 是 | - | 密码(BCrypt加密存储) |
|
||
| real_name | VARCHAR | 50 | 是 | - | 真实姓名 |
|
||
| gender | TINYINT | - | 否 | 0 | 性别:0-未知,1-男,2-女 |
|
||
| phone | VARCHAR | 20 | 否 | - | 手机号码 |
|
||
| email | VARCHAR | 100 | 否 | - | 邮箱地址 |
|
||
| dept_id | BIGINT | - | 否 | - | 所属部门ID(外键) |
|
||
| position | VARCHAR | 50 | 否 | - | 岗位/职位 |
|
||
| avatar | VARCHAR | 255 | 否 | - | 头像URL |
|
||
| status | TINYINT | - | 否 | 1 | 状态:0-禁用,1-启用 |
|
||
| last_login_time | DATETIME | - | 否 | - | 最后登录时间 |
|
||
| last_login_ip | VARCHAR | 50 | 否 | - | 最后登录IP |
|
||
| created_by | BIGINT | - | 否 | - | 创建人ID |
|
||
| created_time | DATETIME | - | 否 | CURRENT_TIMESTAMP | 创建时间 |
|
||
| updated_by | BIGINT | - | 否 | - | 更新人ID |
|
||
| updated_time | DATETIME | - | 否 | CURRENT_TIMESTAMP | 更新时间 |
|
||
| deleted | TINYINT | - | 否 | 0 | 逻辑删除:0-未删除,1-已删除 |
|
||
|
||
**索引:**
|
||
- PRIMARY KEY (`user_id`)
|
||
- UNIQUE KEY `uk_tenant_username` (`tenant_id`, `username`)
|
||
- INDEX `idx_tenant` (`tenant_id`)
|
||
- INDEX `idx_dept` (`dept_id`)
|
||
- INDEX `idx_status` (`status`)
|
||
|
||
---
|
||
|
||
#### 3.1.4 sys_role(角色表)
|
||
|
||
| 字段名 | 类型 | 长度 | 必填 | 默认值 | 说明 |
|
||
|--------|------|------|------|--------|------|
|
||
| role_id | BIGINT | - | 是 | 自增 | 主键,角色ID |
|
||
| tenant_id | BIGINT | - | 是 | - | 租户ID(外键) |
|
||
| role_code | VARCHAR | 50 | 是 | - | 角色编码 |
|
||
| role_name | VARCHAR | 100 | 是 | - | 角色名称 |
|
||
| role_type | VARCHAR | 20 | 否 | custom | 角色类型:system-系统角色,custom-自定义角色 |
|
||
| data_scope | VARCHAR | 20 | 否 | self | 数据范围:all-全部,dept-本部门,self-本人 |
|
||
| sort_order | INT | - | 否 | 0 | 排序顺序 |
|
||
| status | TINYINT | - | 否 | 1 | 状态:0-禁用,1-启用 |
|
||
| remark | VARCHAR | 500 | 否 | - | 备注说明 |
|
||
| created_by | BIGINT | - | 否 | - | 创建人ID |
|
||
| created_time | DATETIME | - | 否 | CURRENT_TIMESTAMP | 创建时间 |
|
||
| updated_by | BIGINT | - | 否 | - | 更新人ID |
|
||
| updated_time | DATETIME | - | 否 | CURRENT_TIMESTAMP | 更新时间 |
|
||
| deleted | TINYINT | - | 否 | 0 | 逻辑删除:0-未删除,1-已删除 |
|
||
|
||
**索引:**
|
||
- PRIMARY KEY (`role_id`)
|
||
- UNIQUE KEY `uk_tenant_code` (`tenant_id`, `role_code`)
|
||
- INDEX `idx_tenant` (`tenant_id`)
|
||
- INDEX `idx_status` (`status`)
|
||
|
||
---
|
||
|
||
#### 3.1.5 sys_menu(菜单表)
|
||
|
||
| 字段名 | 类型 | 长度 | 必填 | 默认值 | 说明 |
|
||
|--------|------|------|------|--------|------|
|
||
| menu_id | BIGINT | - | 是 | 自增 | 主键,菜单ID |
|
||
| tenant_id | BIGINT | - | 否 | 0 | 租户ID(0表示系统通用菜单) |
|
||
| menu_name | VARCHAR | 100 | 是 | - | 菜单名称 |
|
||
| menu_type | VARCHAR | 20 | 是 | - | 菜单类型:dir-目录,menu-菜单,button-按钮 |
|
||
| parent_id | BIGINT | - | 否 | 0 | 父菜单ID(0表示顶级菜单) |
|
||
| menu_level | INT | - | 否 | 1 | 菜单层级 |
|
||
| icon | VARCHAR | 100 | 否 | - | 菜单图标 |
|
||
| path | VARCHAR | 200 | 否 | - | 路由路径 |
|
||
| component | VARCHAR | 200 | 否 | - | 组件路径 |
|
||
| permission | VARCHAR | 100 | 否 | - | 权限标识(如:user:list) |
|
||
| sort_order | INT | - | 否 | 0 | 排序顺序 |
|
||
| status | TINYINT | - | 否 | 1 | 状态:0-禁用,1-启用 |
|
||
| remark | VARCHAR | 500 | 否 | - | 备注说明 |
|
||
| created_by | BIGINT | - | 否 | - | 创建人ID |
|
||
| created_time | DATETIME | - | 否 | CURRENT_TIMESTAMP | 创建时间 |
|
||
| updated_by | BIGINT | - | 否 | - | 更新人ID |
|
||
| updated_time | DATETIME | - | 否 | CURRENT_TIMESTAMP | 更新时间 |
|
||
| deleted | TINYINT | - | 否 | 0 | 逻辑删除:0-未删除,1-已删除 |
|
||
|
||
**索引:**
|
||
- PRIMARY KEY (`menu_id`)
|
||
- INDEX `idx_tenant` (`tenant_id`)
|
||
- INDEX `idx_parent` (`parent_id`)
|
||
- INDEX `idx_type` (`menu_type`)
|
||
- INDEX `idx_status` (`status`)
|
||
|
||
---
|
||
|
||
#### 3.1.6 sys_user_role(用户角色关联表)
|
||
|
||
| 字段名 | 类型 | 长度 | 必填 | 默认值 | 说明 |
|
||
|--------|------|------|------|--------|------|
|
||
| id | BIGINT | - | 是 | 自增 | 主键,ID |
|
||
| tenant_id | BIGINT | - | 是 | - | 租户ID(外键) |
|
||
| user_id | BIGINT | - | 是 | - | 用户ID(外键) |
|
||
| role_id | BIGINT | - | 是 | - | 角色ID(外键) |
|
||
| created_time | DATETIME | - | 否 | CURRENT_TIMESTAMP | 创建时间 |
|
||
|
||
**索引:**
|
||
- PRIMARY KEY (`id`)
|
||
- UNIQUE KEY `uk_user_role` (`tenant_id`, `user_id`, `role_id`)
|
||
- INDEX `idx_user` (`user_id`)
|
||
- INDEX `idx_role` (`role_id`)
|
||
|
||
---
|
||
|
||
#### 3.1.7 sys_role_menu(角色菜单关联表)
|
||
|
||
| 字段名 | 类型 | 长度 | 必填 | 默认值 | 说明 |
|
||
|--------|------|------|------|--------|------|
|
||
| id | BIGINT | - | 是 | 自增 | 主键,ID |
|
||
| tenant_id | BIGINT | - | 是 | - | 租户ID(外键) |
|
||
| role_id | BIGINT | - | 是 | - | 角色ID(外键) |
|
||
| menu_id | BIGINT | - | 是 | - | 菜单ID(外键) |
|
||
| created_time | DATETIME | - | 否 | CURRENT_TIMESTAMP | 创建时间 |
|
||
|
||
**索引:**
|
||
- PRIMARY KEY (`id`)
|
||
- UNIQUE KEY `uk_role_menu` (`tenant_id`, `role_id`, `menu_id`)
|
||
- INDEX `idx_role` (`role_id`)
|
||
- INDEX `idx_menu` (`menu_id`)
|
||
|
||
---
|
||
|
||
#### 3.1.8 sys_operation_log(操作日志表)
|
||
|
||
| 字段名 | 类型 | 长度 | 必填 | 默认值 | 说明 |
|
||
|--------|------|------|------|--------|------|
|
||
| log_id | BIGINT | - | 是 | 自增 | 主键,日志ID |
|
||
| tenant_id | BIGINT | - | 是 | - | 租户ID(外键) |
|
||
| user_id | BIGINT | - | 否 | - | 操作人ID(外键) |
|
||
| username | VARCHAR | 50 | 否 | - | 操作人用户名 |
|
||
| operation | VARCHAR | 100 | 否 | - | 操作描述 |
|
||
| method | VARCHAR | 200 | 否 | - | 操作方法 |
|
||
| params | TEXT | - | 否 | - | 操作参数(JSON格式) |
|
||
| ip | VARCHAR | 50 | 否 | - | 操作IP |
|
||
| user_agent | VARCHAR | 500 | 否 | - | 用户代理 |
|
||
| operation_time | DATETIME | - | 否 | CURRENT_TIMESTAMP | 操作时间 |
|
||
| cost_time | BIGINT | - | 否 | 0 | 耗时(毫秒) |
|
||
| result | VARCHAR | 20 | 否 | success | 操作结果:success-成功,fail-失败 |
|
||
| error_msg | TEXT | - | 否 | - | 错误信息 |
|
||
|
||
**索引:**
|
||
- PRIMARY KEY (`log_id`)
|
||
- INDEX `idx_tenant` (`tenant_id`)
|
||
- INDEX `idx_user` (`user_id`)
|
||
- INDEX `idx_time` (`operation_time`)
|
||
- INDEX `idx_result` (`result`)
|
||
|
||
---
|
||
|
||
### 3.2 客户管理模块
|
||
|
||
#### 3.2.1 customer(客户表)
|
||
|
||
| 字段名 | 类型 | 长度 | 必填 | 默认值 | 说明 |
|
||
|--------|------|------|------|--------|------|
|
||
| customer_id | BIGINT | - | 是 | 自增 | 主键,客户ID |
|
||
| tenant_id | BIGINT | - | 是 | - | 租户ID(外键) |
|
||
| customer_code | VARCHAR | 50 | 是 | - | 客户编码(唯一) |
|
||
| customer_name | VARCHAR | 200 | 是 | - | 客户名称 |
|
||
| customer_short | VARCHAR | 100 | 否 | - | 客户简称 |
|
||
| customer_type | VARCHAR | 20 | 否 | enterprise | 客户类型:enterprise-企业,individual-个人 |
|
||
| industry | VARCHAR | 50 | 否 | - | 所属行业 |
|
||
| scale | VARCHAR | 20 | 否 | - | 企业规模:small-小型,medium-中型,large-大型 |
|
||
| level | VARCHAR | 20 | 否 | normal | 客户等级:A/B/C/D/normal |
|
||
| tax_no | VARCHAR | 50 | 否 | - | 纳税人识别号 |
|
||
| legal_person | VARCHAR | 50 | 否 | - | 法定代表人 |
|
||
| address | VARCHAR | 500 | 否 | - | 公司地址 |
|
||
| phone | VARCHAR | 20 | 否 | - | 联系电话 |
|
||
| email | VARCHAR | 100 | 否 | - | 邮箱地址 |
|
||
| website | VARCHAR | 200 | 否 | - | 公司网站 |
|
||
| status | TINYINT | - | 否 | 1 | 状态:0-禁用,1-启用 |
|
||
| remark | VARCHAR | 500 | 否 | - | 备注说明 |
|
||
| cooperation_start | DATE | - | 否 | - | 合作开始日期 |
|
||
| cooperation_end | DATE | - | 否 | - | 合作结束日期 |
|
||
| created_by | BIGINT | - | 否 | - | 创建人ID |
|
||
| created_time | DATETIME | - | 否 | CURRENT_TIMESTAMP | 创建时间 |
|
||
| updated_by | BIGINT | - | 否 | - | 更新人ID |
|
||
| updated_time | DATETIME | - | 否 | CURRENT_TIMESTAMP | 更新时间 |
|
||
| deleted | TINYINT | - | 否 | 0 | 逻辑删除:0-未删除,1-已删除 |
|
||
|
||
**索引:**
|
||
- PRIMARY KEY (`customer_id`)
|
||
- UNIQUE KEY `uk_tenant_code` (`tenant_id`, `customer_code`)
|
||
- INDEX `idx_tenant` (`tenant_id`)
|
||
- INDEX `idx_status` (`status`)
|
||
- INDEX `idx_level` (`level`)
|
||
|
||
---
|
||
|
||
#### 3.2.2 customer_contact(客户联系人表)
|
||
|
||
| 字段名 | 类型 | 长度 | 必填 | 默认值 | 说明 |
|
||
|--------|------|------|------|--------|------|
|
||
| contact_id | BIGINT | - | 是 | 自增 | 主键,联系人ID |
|
||
| tenant_id | BIGINT | - | 是 | - | 租户ID(外键) |
|
||
| customer_id | BIGINT | - | 是 | - | 客户ID(外键) |
|
||
| contact_name | VARCHAR | 50 | 是 | - | 联系人姓名 |
|
||
| position | VARCHAR | 50 | 否 | - | 职位/职务 |
|
||
| department | VARCHAR | 100 | 否 | - | 所属部门 |
|
||
| phone | VARCHAR | 20 | 否 | - | 联系电话 |
|
||
| mobile | VARCHAR | 20 | 否 | - | 手机号码 |
|
||
| email | VARCHAR | 100 | 否 | - | 邮箱地址 |
|
||
| wechat | VARCHAR | 50 | 否 | - | 微信号 |
|
||
| qq | VARCHAR | 20 | 否 | - | QQ号 |
|
||
| is_primary | TINYINT | - | 否 | 0 | 是否主要联系人:0-否,1-是 |
|
||
| sort_order | INT | - | 否 | 0 | 排序顺序 |
|
||
| status | TINYINT | - | 否 | 1 | 状态:0-禁用,1-启用 |
|
||
| remark | VARCHAR | 200 | 否 | - | 备注说明 |
|
||
| created_by | BIGINT | - | 否 | - | 创建人ID |
|
||
| created_time | DATETIME | - | 否 | CURRENT_TIMESTAMP | 创建时间 |
|
||
| updated_by | BIGINT | - | 否 | - | 更新人ID |
|
||
| updated_time | DATETIME | - | 否 | CURRENT_TIMESTAMP | 更新时间 |
|
||
| deleted | TINYINT | - | 否 | 0 | 逻辑删除:0-未删除,1-已删除 |
|
||
|
||
**索引:**
|
||
- PRIMARY KEY (`contact_id`)
|
||
- INDEX `idx_tenant` (`tenant_id`)
|
||
- INDEX `idx_customer` (`customer_id`)
|
||
- INDEX `idx_status` (`status`)
|
||
|
||
---
|
||
|
||
### 3.3 项目管理模块
|
||
|
||
#### 3.3.1 project(项目表)
|
||
|
||
| 字段名 | 类型 | 长度 | 必填 | 默认值 | 说明 |
|
||
|--------|------|------|------|--------|------|
|
||
| project_id | BIGINT | - | 是 | 自增 | 主键,项目ID |
|
||
| tenant_id | BIGINT | - | 是 | - | 租户ID(外键) |
|
||
| project_code | VARCHAR | 50 | 是 | - | 项目编号(唯一) |
|
||
| project_name | VARCHAR | 200 | 是 | - | 项目名称 |
|
||
| project_short | VARCHAR | 100 | 否 | - | 项目简称 |
|
||
| customer_id | BIGINT | - | 是 | - | 客户ID(外键) |
|
||
| project_type | VARCHAR | 20 | 否 | development | 项目类型:development-开发,maintenance-维护,consulting-咨询 |
|
||
| project_manager_id | BIGINT | - | 否 | - | 项目经理ID(外键) |
|
||
| start_date | DATE | - | 否 | - | 项目开始日期 |
|
||
| end_date | DATE | - | 否 | - | 项目结束日期 |
|
||
| budget_amount | DECIMAL | 15,2 | 否 | 0.00 | 项目预算金额 |
|
||
| contract_amount | DECIMAL | 15,2 | 否 | 0.00 | 合同金额 |
|
||
| status | VARCHAR | 20 | 否 | preparing | 项目状态:preparing-筹备中,ongoing-进行中,completed-已完成,archived-已归档,cancelled-已取消 |
|
||
| progress | INT | - | 否 | 0 | 项目进度(0-100) |
|
||
| description | TEXT | - | 否 | - | 项目描述 |
|
||
| remark | VARCHAR | 500 | 否 | - | 备注说明 |
|
||
| attachment_url | VARCHAR | 500 | 否 | - | 附件URL |
|
||
| created_by | BIGINT | - | 否 | - | 创建人ID |
|
||
| created_time | DATETIME | - | 否 | CURRENT_TIMESTAMP | 创建时间 |
|
||
| updated_by | BIGINT | - | 否 | - | 更新人ID |
|
||
| updated_time | DATETIME | - | 否 | CURRENT_TIMESTAMP | 更新时间 |
|
||
| deleted | TINYINT | - | 否 | 0 | 逻辑删除:0-未删除,1-已删除 |
|
||
|
||
**索引:**
|
||
- PRIMARY KEY (`project_id`)
|
||
- UNIQUE KEY `uk_tenant_code` (`tenant_id`, `project_code`)
|
||
- INDEX `idx_tenant` (`tenant_id`)
|
||
- INDEX `idx_customer` (`customer_id`)
|
||
- INDEX `idx_manager` (`project_manager_id`)
|
||
- INDEX `idx_status` (`status`)
|
||
|
||
---
|
||
|
||
#### 3.3.2 project_member(项目成员表)
|
||
|
||
| 字段名 | 类型 | 长度 | 必填 | 默认值 | 说明 |
|
||
|--------|------|------|------|--------|------|
|
||
| member_id | BIGINT | - | 是 | 自增 | 主键,成员关系ID |
|
||
| tenant_id | BIGINT | - | 是 | - | 租户ID(外键) |
|
||
| project_id | BIGINT | - | 是 | - | 项目ID(外键) |
|
||
| user_id | BIGINT | - | 是 | - | 用户ID(外键) |
|
||
| role | VARCHAR | 50 | 否 | member | 项目角色:pm-项目经理,dev-开发,test-测试,finance-财务,member-普通成员 |
|
||
| join_date | DATE | - | 否 | - | 加入日期 |
|
||
| leave_date | DATE | - | 否 | - | 离开日期 |
|
||
| workload | DECIMAL | 5,2 | 否 | 0.00 | 工作量占比(0-100) |
|
||
| status | TINYINT | - | 否 | 1 | 状态:0-已离开,1-在职 |
|
||
| remark | VARCHAR | 200 | 否 | - | 备注说明 |
|
||
| created_by | BIGINT | - | 否 | - | 创建人ID |
|
||
| created_time | DATETIME | - | 否 | CURRENT_TIMESTAMP | 创建时间 |
|
||
| updated_by | BIGINT | - | 否 | - | 更新人ID |
|
||
| updated_time | DATETIME | - | 否 | CURRENT_TIMESTAMP | 更新时间 |
|
||
| deleted | TINYINT | - | 否 | 0 | 逻辑删除:0-未删除,1-已删除 |
|
||
|
||
**索引:**
|
||
- PRIMARY KEY (`member_id`)
|
||
- UNIQUE KEY `uk_project_user` (`tenant_id`, `project_id`, `user_id`)
|
||
- INDEX `idx_project` (`project_id`)
|
||
- INDEX `idx_user` (`user_id`)
|
||
|
||
---
|
||
|
||
### 3.4 需求工单模块
|
||
|
||
#### 3.4.1 requirement(需求工单表)
|
||
|
||
| 字段名 | 类型 | 长度 | 必填 | 默认值 | 说明 |
|
||
|--------|------|------|------|--------|------|
|
||
| requirement_id | BIGINT | - | 是 | 自增 | 主键,需求ID |
|
||
| tenant_id | BIGINT | - | 是 | - | 租户ID(外键) |
|
||
| requirement_code | VARCHAR | 50 | 是 | - | 需求编号(唯一) |
|
||
| requirement_name | VARCHAR | 200 | 是 | - | 需求名称 |
|
||
| description | TEXT | - | 否 | - | 需求描述 |
|
||
| project_id | BIGINT | - | 是 | - | 项目ID(外键) |
|
||
| customer_id | BIGINT | - | 是 | - | 客户ID(外键) |
|
||
| priority | VARCHAR | 20 | 否 | normal | 优先级:high-高,normal-中,low-低 |
|
||
| estimated_hours | DECIMAL | 8,2 | 否 | 0.00 | 预估开发工时(小时) |
|
||
| actual_hours | DECIMAL | 8,2 | 否 | 0.00 | 实际开发工时(小时) |
|
||
| planned_start | DATE | - | 否 | - | 计划开始日期 |
|
||
| planned_end | DATE | - | 否 | - | 计划结束日期 |
|
||
| actual_start | DATE | - | 否 | - | 实际开始日期 |
|
||
| actual_end | DATE | - | 否 | - | 实际结束日期 |
|
||
| delivery_date | DATE | - | 否 | - | 交付日期 |
|
||
| receivable_amount | DECIMAL | 15,2 | 否 | 0.00 | 应收款金额 |
|
||
| receivable_date | DATE | - | 否 | - | 应收款日期 |
|
||
| status | VARCHAR | 20 | 否 | pending | 状态:pending-待开发,developing-开发中,delivered-已交付,completed-已完成 |
|
||
| progress | INT | - | 否 | 0 | 开发进度(0-100) |
|
||
| attachment_url | VARCHAR | 500 | 否 | - | 附件URL |
|
||
| created_by | BIGINT | - | 否 | - | 创建人ID |
|
||
| created_time | DATETIME | - | 否 | CURRENT_TIMESTAMP | 创建时间 |
|
||
| updated_by | BIGINT | - | 否 | - | 更新人ID |
|
||
| updated_time | DATETIME | - | 否 | CURRENT_TIMESTAMP | 更新时间 |
|
||
| deleted | TINYINT | - | 否 | 0 | 逻辑删除:0-未删除,1-已删除 |
|
||
|
||
**索引:**
|
||
- PRIMARY KEY (`requirement_id`)
|
||
- UNIQUE KEY `uk_tenant_code` (`tenant_id`, `requirement_code`)
|
||
- INDEX `idx_tenant` (`tenant_id`)
|
||
- INDEX `idx_project` (`project_id`)
|
||
- INDEX `idx_customer` (`customer_id`)
|
||
- INDEX `idx_status` (`status`)
|
||
|
||
---
|
||
|
||
### 3.5 支出管理模块
|
||
|
||
#### 3.5.1 expense_type(支出类型表)
|
||
|
||
| 字段名 | 类型 | 长度 | 必填 | 默认值 | 说明 |
|
||
|--------|------|------|------|--------|------|
|
||
| type_id | BIGINT | - | 是 | 自增 | 主键,支出类型ID |
|
||
| tenant_id | BIGINT | - | 是 | - | 租户ID(外键) |
|
||
| type_code | VARCHAR | 50 | 否 | - | 支出类型编码 |
|
||
| type_name | VARCHAR | 100 | 是 | - | 支出类型名称 |
|
||
| parent_id | BIGINT | - | 否 | 0 | 父类型ID(0表示一级类型) |
|
||
| type_level | INT | - | 否 | 1 | 类型层级 |
|
||
| sort_order | INT | - | 否 | 0 | 排序顺序 |
|
||
| description | VARCHAR | 200 | 否 | - | 类型描述 |
|
||
| status | TINYINT | - | 否 | 1 | 状态:0-禁用,1-启用 |
|
||
| created_by | BIGINT | - | 否 | - | 创建人ID |
|
||
| created_time | DATETIME | - | 否 | CURRENT_TIMESTAMP | 创建时间 |
|
||
| updated_by | BIGINT | - | 否 | - | 更新人ID |
|
||
| updated_time | DATETIME | - | 否 | CURRENT_TIMESTAMP | 更新时间 |
|
||
| deleted | TINYINT | - | 否 | 0 | 逻辑删除:0-未删除,1-已删除 |
|
||
|
||
**索引:**
|
||
- PRIMARY KEY (`type_id`)
|
||
- INDEX `idx_tenant` (`tenant_id`)
|
||
- INDEX `idx_parent` (`parent_id`)
|
||
- INDEX `idx_status` (`status`)
|
||
|
||
---
|
||
|
||
#### 3.5.2 expense(支出表)
|
||
|
||
| 字段名 | 类型 | 长度 | 必填 | 默认值 | 说明 |
|
||
|--------|------|------|------|--------|------|
|
||
| expense_id | BIGINT | - | 是 | 自增 | 主键,支出ID |
|
||
| tenant_id | BIGINT | - | 是 | - | 租户ID(外键) |
|
||
| expense_code | VARCHAR | 50 | 是 | - | 支出编号(唯一) |
|
||
| expense_type_id | BIGINT | - | 是 | - | 支出类型ID(外键) |
|
||
| expense_amount | DECIMAL | 15,2 | 否 | 0.00 | 支出金额 |
|
||
| expense_date | DATE | - | 否 | - | 支出日期 |
|
||
| expense_reason | TEXT | - | 否 | - | 支出事由 |
|
||
| project_id | BIGINT | - | 否 | - | 所属项目ID(外键) |
|
||
| applicant_id | BIGINT | - | 是 | - | 申请人ID(外键) |
|
||
| department_id | BIGINT | - | 否 | - | 申请部门ID(外键) |
|
||
| payment_method | VARCHAR | 20 | 否 | transfer | 付款方式:transfer-转账,cash-现金,check-支票,other-其他 |
|
||
| payment_account | VARCHAR | 100 | 否 | - | 付款账户 |
|
||
| attachment_url | VARCHAR | 500 | 否 | - | 附件URL |
|
||
| status | VARCHAR | 20 | 否 | pending | 状态:pending-待付款,paid-已付款,completed-已完成,cancelled-已作废 |
|
||
| payment_date | DATE | - | 否 | - | 付款日期 |
|
||
| payment_voucher | VARCHAR | 255 | 否 | - | 付款凭证 |
|
||
| remark | VARCHAR | 500 | 否 | - | 备注说明 |
|
||
| created_by | BIGINT | - | 否 | - | 创建人ID |
|
||
| created_time | DATETIME | - | 否 | CURRENT_TIMESTAMP | 创建时间 |
|
||
| updated_by | BIGINT | - | 否 | - | 更新人ID |
|
||
| updated_time | DATETIME | - | 否 | CURRENT_TIMESTAMP | 更新时间 |
|
||
| deleted | TINYINT | - | 否 | 0 | 逻辑删除:0-未删除,1-已删除 |
|
||
|
||
**索引:**
|
||
- PRIMARY KEY (`expense_id`)
|
||
- UNIQUE KEY `uk_tenant_code` (`tenant_id`, `expense_code`)
|
||
- INDEX `idx_tenant` (`tenant_id`)
|
||
- INDEX `idx_type` (`expense_type_id`)
|
||
- INDEX `idx_project` (`project_id`)
|
||
- INDEX `idx_applicant` (`applicant_id`)
|
||
- INDEX `idx_status` (`status`)
|
||
|
||
---
|
||
|
||
### 3.6 应收款管理模块
|
||
|
||
#### 3.6.1 receivable(应收款表)
|
||
|
||
| 字段名 | 类型 | 长度 | 必填 | 默认值 | 说明 |
|
||
|--------|------|------|------|--------|------|
|
||
| receivable_id | BIGINT | - | 是 | 自增 | 主键,应收款ID |
|
||
| tenant_id | BIGINT | - | 是 | - | 租户ID(外键) |
|
||
| receivable_code | VARCHAR | 50 | 是 | - | 应收款编号(唯一) |
|
||
| requirement_id | BIGINT | - | 是 | - | 需求ID(外键) |
|
||
| project_id | BIGINT | - | 是 | - | 项目ID(外键) |
|
||
| customer_id | BIGINT | - | 是 | - | 客户ID(外键) |
|
||
| receivable_amount | DECIMAL | 15,2 | 否 | 0.00 | 应收款金额 |
|
||
| receivable_date | DATE | - | 否 | - | 应收款日期 |
|
||
| payment_due_date | DATE | - | 否 | - | 付款截止日期 |
|
||
| payment_method | VARCHAR | 20 | 否 | - | 付款方式:transfer-转账,cash-现金,check-支票,other-其他 |
|
||
| bank_account | VARCHAR | 100 | 否 | - | 收款账户 |
|
||
| status | VARCHAR | 20 | 否 | pending | 状态:pending-待收款,partial-部分收款,received-已收款,overdue-逾期 |
|
||
| received_amount | DECIMAL | 15,2 | 否 | 0.00 | 已收款金额 |
|
||
| unpaid_amount | DECIMAL | 15,2 | 否 | 0.00 | 未收款金额 |
|
||
| overdue_days | INT | - | 否 | 0 | 逾期天数 |
|
||
| remark | VARCHAR | 500 | 否 | - | 备注说明 |
|
||
| created_by | BIGINT | - | 否 | - | 创建人ID |
|
||
| created_time | DATETIME | - | 否 | CURRENT_TIMESTAMP | 创建时间 |
|
||
| updated_by | BIGINT | - | 否 | - | 更新人ID |
|
||
| updated_time | DATETIME | - | 否 | CURRENT_TIMESTAMP | 更新时间 |
|
||
| deleted | TINYINT | - | 否 | 0 | 逻辑删除:0-未删除,1-已删除 |
|
||
|
||
**索引:**
|
||
- PRIMARY KEY (`receivable_id`)
|
||
- UNIQUE KEY `uk_tenant_code` (`tenant_id`, `receivable_code`)
|
||
- INDEX `idx_tenant` (`tenant_id`)
|
||
- INDEX `idx_requirement` (`requirement_id`)
|
||
- INDEX `idx_project` (`project_id`)
|
||
- INDEX `idx_customer` (`customer_id`)
|
||
- INDEX `idx_status` (`status`)
|
||
|
||
---
|
||
|
||
#### 3.6.2 receipt(收款记录表)
|
||
|
||
| 字段名 | 类型 | 长度 | 必填 | 默认值 | 说明 |
|
||
|--------|------|------|------|--------|------|
|
||
| receipt_id | BIGINT | - | 是 | 自增 | 主键,收款记录ID |
|
||
| tenant_id | BIGINT | - | 是 | - | 租户ID(外键) |
|
||
| receipt_code | VARCHAR | 50 | 是 | - | 收款编号(唯一) |
|
||
| receivable_id | BIGINT | - | 是 | - | 应收款ID(外键) |
|
||
| receipt_amount | DECIMAL | 15,2 | 否 | 0.00 | 收款金额 |
|
||
| receipt_date | DATE | - | 否 | - | 收款日期 |
|
||
| receipt_method | VARCHAR | 20 | 否 | transfer | 收款方式:transfer-转账,cash-现金,check-支票,other-其他 |
|
||
| receipt_account | VARCHAR | 100 | 否 | - | 收款账户 |
|
||
| payer_name | VARCHAR | 100 | 否 | - | 付款方名称 |
|
||
| receipt_voucher | VARCHAR | 255 | 否 | - | 收款凭证URL |
|
||
| operator_id | BIGINT | - | 否 | - | 操作人ID(外键) |
|
||
| remark | VARCHAR | 200 | 否 | - | 备注说明 |
|
||
| created_time | DATETIME | - | 否 | CURRENT_TIMESTAMP | 创建时间 |
|
||
|
||
**索引:**
|
||
- PRIMARY KEY (`receipt_id`)
|
||
- UNIQUE KEY `uk_tenant_code` (`tenant_id`, `receipt_code`)
|
||
- INDEX `idx_tenant` (`tenant_id`)
|
||
- INDEX `idx_receivable` (`receivable_id`)
|
||
|
||
---
|
||
|
||
## 四、数据库设计规范
|
||
|
||
### 4.1 命名规范
|
||
|
||
| 项目 | 规范 | 示例 |
|
||
|------|------|------|
|
||
| 数据库名 | 小写,下划线分隔 | fund_platform |
|
||
| 表名 | 小写,下划线分隔 | sys_user |
|
||
| 字段名 | 小写,下划线分隔 | user_name |
|
||
| 索引名 | 前缀_表名_字段名 | uk_tenant_username |
|
||
| 外键名 | fk_表名_字段名 | fk_user_dept |
|
||
|
||
### 4.2 字段规范
|
||
|
||
| 字段类型 | 使用场景 | 示例 |
|
||
|----------|----------|------|
|
||
| BIGINT | 主键、外键、ID | user_id |
|
||
| VARCHAR(50) | 编码、用户名、短文本 | user_code |
|
||
| VARCHAR(100) | 名称、标题 | user_name |
|
||
| VARCHAR(200) | 长名称、URL | project_name |
|
||
| VARCHAR(500) | 备注、描述 | remark |
|
||
| TEXT | 长文本、JSON | description |
|
||
| TINYINT | 状态、布尔值 | status |
|
||
| INT | 数量、排序 | sort_order |
|
||
| DECIMAL(15,2) | 金额 | amount |
|
||
| DATETIME | 日期时间 | created_time |
|
||
| DATE | 日期 | start_date |
|
||
|
||
### 4.3 通用字段
|
||
|
||
所有表必须包含以下字段:
|
||
|
||
| 字段名 | 类型 | 说明 |
|
||
|--------|------|------|
|
||
| created_by | BIGINT | 创建人ID |
|
||
| created_time | DATETIME | 创建时间(DEFAULT CURRENT_TIMESTAMP) |
|
||
| updated_by | BIGINT | 更新人ID |
|
||
| updated_time | DATETIME | 更新时间(DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP) |
|
||
| deleted | TINYINT | 逻辑删除标志(DEFAULT 0) |
|
||
|
||
---
|
||
|
||
**文档结束**
|