企业级权限管理系统数据库设计
本文档介绍了一个完整的企业级权限管理系统数据库设计,采用 RBAC (Role-Based Access Control) 模型,并扩展了组织架构管理功能,适用于中大型企业管理系统。
1. 表结构概览
1.1 核心业务表
| 表名 |
表说明 |
作用 |
| sys_user |
用户表 |
存储系统用户的基本信息,包含部门、岗位关联 |
| sys_role |
角色表 |
定义系统中的各种角色,包含数据权限配置 |
| sys_menu |
菜单表 |
管理系统的菜单结构和权限点 |
| sys_dept |
部门表 |
组织架构管理,支持树形结构 |
| sys_post |
岗位表 |
职位管理,与部门关联 |
| sys_tenant |
租户表 |
多租户系统租户信息 |
| sys_tenant_package |
租户套餐表 |
租户套餐配置 |
| sys_tenant_config |
租户配置表 |
租户个性化配置 |
| sys_dict_type |
字典类型表 |
系统字典类型管理 |
| sys_dict_data |
字典数据表 |
字典具体数据 |
| sys_params |
参数表 |
系统参数配置 |
| sys_login_log |
登录日志表 |
记录用户登录登出日志 |
| sys_operation_log |
操作日志表 |
记录用户关键操作日志 |
| sys_error_log |
错误日志表 |
记录系统错误和异常日志 |
1.2 关联表
| 表名 |
表说明 |
作用 |
| sys_user_role |
用户角色关联表 |
建立用户和角色之间的多对多关系 |
| sys_role_menu |
角色菜单关联表 |
建立角色和菜单之间的多对多关系 |
| sys_role_dept |
角色部门关联表 |
建立角色和数据权限部门的关系 |
1.3 统一字段规范
所有业务表(非关联表)都包含以下统一字段:
| 字段名 |
类型 |
说明 |
默认值 |
| id |
BIGINT |
主键ID,自增 |
- |
| create_at |
DATETIME/TIMESTAMP |
创建时间 |
CURRENT_TIMESTAMP |
| creator |
BIGINT |
创建人ID |
- |
| update_at |
DATETIME/TIMESTAMP |
更新时间 |
CURRENT_TIMESTAMP |
| updater |
BIGINT |
更新人ID |
- |
| delete_flag |
TINYINT/SMALLINT |
是否删除:0-否,1-是 |
0 |
| delete_at |
DATETIME/TIMESTAMP |
删除时间 |
NULL |
| sort |
INT |
排序 |
0 |
| status |
TINYINT |
状态: 0-禁用,1-正常 |
0 |
| version |
INT |
乐观锁版本号 |
1 |
1.4 额外统一字段规范
| 字段名 |
类型 |
说明 |
默认值 |
| dept_id |
BIGINT |
部门ID |
NULL |
| role_id |
BIGINT |
角色ID |
NULL |
| tenant_id |
BIGINT |
租户ID |
NULL |
2. 表关系图
erDiagram
%% 核心业务关系
sys_dept ||--o{ sys_user : "所属部门"
sys_dept ||--o{ sys_post : "部门岗位"
sys_post }o--|| sys_user : "用户岗位"
sys_user }o--o{ sys_user_role : "用户角色"
sys_role ||--o{ sys_user_role : "角色用户"
sys_role ||--o{ sys_role_menu : "角色菜单"
sys_menu ||--o{ sys_role_menu : "菜单角色"
sys_role ||--o{ sys_role_dept : "角色数据权限"
sys_dept ||--o{ sys_role_dept : "数据权限部门"
%% 日志表关系
sys_user ||--o{ sys_login_log : "用户登录日志"
sys_user ||--o{ sys_operation_log : "用户操作日志"
sys_user ||--o{ sys_error_log : "用户错误日志"
%% 系统配置表关系
sys_tenant_package ||--o{ sys_tenant : "租户套餐"
sys_tenant ||--o{ sys_tenant_config : "租户配置"
sys_dict_type ||--o{ sys_dict_data : "字典数据"
%% 核心业务表
sys_dept {
bigint id PK
varchar dept_name
varchar dept_code
bigint parent_id
bigint leader_id FK
varchar leader_phone
varchar leader_email
tinyint status
int sort_order
datetime create_at
bigint creator
datetime update_at
bigint updater
tinyint delete_flag
datetime delete_at
int version
}
sys_post {
bigint id PK
varchar post_name
varchar post_code
bigint dept_id FK
int sort_order
tinyint status
datetime create_at
bigint creator
datetime update_at
bigint updater
tinyint delete_flag
datetime delete_at
int version
}
sys_user {
bigint id PK
varchar username
varchar password
varchar nickname
varchar real_name
varchar email
varchar phone
varchar avatar
char sex
date birthday
bigint dept_id FK
bigint post_id FK
varchar address
varchar remark
tinyint status
datetime last_login_time
varchar last_login_ip
datetime create_at
bigint creator
datetime update_at
bigint updater
tinyint delete_flag
datetime delete_at
int version
}
sys_role {
bigint id PK
varchar role_name
varchar role_code
varchar description
tinyint data_scope
int sort_order
tinyint status
datetime create_at
bigint creator
datetime update_at
bigint updater
tinyint delete_flag
datetime delete_at
int version
}
sys_menu {
bigint id PK
varchar menu_name
varchar menu_code
bigint parent_id
tinyint menu_type
varchar path
varchar component
varchar icon
varchar permission
varchar target
tinyint is_cache
tinyint is_visible
tinyint is_external
int sort_order
tinyint status
datetime create_at
bigint creator
datetime update_at
bigint updater
tinyint delete_flag
datetime delete_at
int version
}
%% 日志表
sys_login_log {
bigint id PK
varchar username
bigint user_id FK
varchar ipaddr
varchar login_location
varchar browser
varchar os
varchar device
tinyint status
varchar message
datetime login_time
}
sys_operation_log {
bigint id PK
varchar title
tinyint business_type
varchar business_type_name
varchar method
varchar request_method
tinyint operator_type
varchar operator_name
varchar dept_name
varchar operation_url
varchar operation_ip
varchar operation_location
text operation_param
text json_result
tinyint operation_status
varchar error_msg
datetime operation_time
bigint cost_time
}
sys_error_log {
bigint id PK
varchar title
varchar request_uri
varchar request_method
text request_params
bigint user_id FK
varchar username
varchar user_ip
varchar user_agent
text exception_info
varchar exception_name
text stack_trace
int line_number
varchar class_name
varchar method_name
tinyint status
bigint process_user_id FK
varchar process_user_name
varchar process_remark
datetime process_time
datetime create_time
}
%% 系统配置表
sys_tenant {
bigint id PK
varchar tenant_name
varchar tenant_code
varchar contact_name
varchar contact_phone
varchar contact_email
varchar domain
bigint package_id FK
datetime expire_time
tinyint status
datetime create_at
bigint creator
datetime update_at
bigint updater
tinyint delete_flag
datetime delete_at
int version
}
sys_tenant_package {
bigint id PK
varchar package_name
varchar package_code
varchar description
int max_users
int max_roles
int max_menus
bigint max_storage
tinyint status
datetime create_at
bigint creator
datetime update_at
bigint updater
tinyint delete_flag
datetime delete_at
int version
}
sys_tenant_config {
bigint id PK
bigint tenant_id FK
varchar config_key
text config_value
tinyint config_type
varchar remark
datetime create_at
bigint creator
datetime update_at
bigint updater
tinyint delete_flag
datetime delete_at
int version
}
sys_dict_type {
bigint id PK
varchar dict_name
varchar dict_type
varchar description
tinyint status
datetime create_at
bigint creator
datetime update_at
bigint updater
tinyint delete_flag
datetime delete_at
int version
}
sys_dict_data {
bigint id PK
int dict_sort
varchar dict_label
varchar dict_value
varchar dict_type
varchar css_class
varchar list_class
tinyint is_default
tinyint status
datetime create_at
bigint creator
datetime update_at
bigint updater
tinyint delete_flag
datetime delete_at
int version
}
sys_params {
bigint id PK
varchar param_name
varchar param_key
text param_value
tinyint is_system
varchar remark
datetime create_at
bigint creator
datetime update_at
bigint updater
tinyint delete_flag
datetime delete_at
int version
}
%% 关联表
sys_user_role {
bigint id PK
bigint user_id FK
bigint role_id FK
}
sys_role_menu {
bigint id PK
bigint role_id FK
bigint menu_id FK
}
sys_role_dept {
bigint id PK
bigint role_id FK
bigint dept_id FK
}
3. 表字段详细说明
3.1 部门表 (sys_dept)
| 字段名 |
类型 |
长度 |
允许空 |
默认值 |
说明 |
| id |
BIGINT |
- |
NO |
AUTO_INCREMENT |
部门ID |
| dept_name |
VARCHAR |
50 |
NO |
- |
部门名称 |
| dept_code |
VARCHAR |
50 |
NO |
- |
部门编码 |
| parent_id |
BIGINT |
- |
NO |
0 |
父部门ID |
| leader_id |
BIGINT |
- |
YES |
NULL |
负责人用户ID |
| leader_phone |
VARCHAR |
20 |
YES |
NULL |
负责人联系电话 |
| leader_email |
VARCHAR |
100 |
YES |
NULL |
负责人邮箱 |
| status |
TINYINT |
- |
NO |
1 |
状态:0-禁用,1-正常 |
| sort |
INT |
- |
NO |
0 |
排序 |
| create_at |
DATETIME |
- |
NO |
CURRENT_TIMESTAMP |
创建时间 |
| creator |
BIGINT |
- |
YES |
NULL |
创建人ID |
| update_at |
DATETIME |
- |
NO |
CURRENT_TIMESTAMP ON UPDATE |
更新时间 |
| updater |
BIGINT |
- |
YES |
NULL |
更新人ID |
| delete_flag |
TINYINT |
- |
NO |
0 |
是否删除:0-否,1-是 |
| delete_at |
DATETIME |
- |
YES |
NULL |
删除时间 |
| version |
INT |
- |
NO |
1 |
乐观锁版本号 |
| tenant_id |
BIGINT |
- |
YES |
NULL |
租户ID |
3.2 岗位表 (sys_post)
| 字段名 |
类型 |
长度 |
允许空 |
默认值 |
说明 |
| id |
BIGINT |
- |
NO |
AUTO_INCREMENT |
岗位ID |
| post_name |
VARCHAR |
50 |
NO |
- |
岗位名称 |
| post_code |
VARCHAR |
50 |
NO |
- |
岗位编码 |
| dept_id |
BIGINT |
- |
NO |
- |
所属部门ID |
| sort |
INT |
- |
NO |
0 |
排序 |
| status |
TINYINT |
- |
NO |
1 |
状态:0-禁用,1-正常 |
| create_at |
DATETIME |
- |
NO |
CURRENT_TIMESTAMP |
创建时间 |
| creator |
BIGINT |
- |
YES |
NULL |
创建人ID |
| update_at |
DATETIME |
- |
NO |
CURRENT_TIMESTAMP ON UPDATE |
更新时间 |
| updater |
BIGINT |
- |
YES |
NULL |
更新人ID |
| delete_flag |
TINYINT |
- |
NO |
0 |
是否删除:0-否,1-是 |
| delete_at |
DATETIME |
- |
YES |
NULL |
删除时间 |
| version |
INT |
- |
NO |
1 |
乐观锁版本号 |
| tenant_id |
BIGINT |
- |
YES |
NULL |
租户ID |
3.3 用户表 (sys_user)
| 字段名 |
类型 |
长度 |
允许空 |
默认值 |
说明 |
| id |
BIGINT |
- |
NO |
AUTO_INCREMENT |
用户ID |
| username |
VARCHAR |
50 |
NO |
- |
用户名 |
| password |
VARCHAR |
100 |
NO |
- |
密码 |
| nickname |
VARCHAR |
50 |
YES |
NULL |
昵称 |
| real_name |
VARCHAR |
50 |
YES |
NULL |
真实姓名 |
| email |
VARCHAR |
100 |
YES |
NULL |
邮箱 |
| phone |
VARCHAR |
20 |
YES |
NULL |
手机号 |
| avatar |
VARCHAR |
255 |
YES |
NULL |
头像地址 |
| sex |
CHAR |
1 |
YES |
‘0’ |
性别:0-未知,1-男,2-女 |
| birthday |
DATE |
- |
YES |
NULL |
生日 |
| dept_id |
BIGINT |
- |
YES |
NULL |
部门ID |
| post_id |
BIGINT |
- |
YES |
NULL |
岗位ID |
| address |
VARCHAR |
200 |
YES |
NULL |
地址 |
| remark |
VARCHAR |
500 |
YES |
NULL |
备注 |
| sort |
INT |
- |
NO |
0 |
排序 |
| status |
TINYINT |
- |
NO |
1 |
状态:0-禁用,1-正常 |
| last_login_time |
DATETIME |
- |
YES |
NULL |
最后登录时间 |
| last_login_ip |
VARCHAR |
50 |
YES |
NULL |
最后登录IP |
| create_at |
DATETIME |
- |
NO |
CURRENT_TIMESTAMP |
创建时间 |
| creator |
BIGINT |
- |
YES |
NULL |
创建人ID |
| update_at |
DATETIME |
- |
NO |
CURRENT_TIMESTAMP ON UPDATE |
更新时间 |
| updater |
BIGINT |
- |
YES |
NULL |
更新人ID |
| delete_flag |
TINYINT |
- |
NO |
0 |
是否删除:0-否,1-是 |
| delete_at |
DATETIME |
- |
YES |
NULL |
删除时间 |
| version |
INT |
- |
NO |
1 |
乐观锁版本号 |
| tenant_id |
BIGINT |
- |
YES |
NULL |
租户ID |
3.4 角色表 (sys_role)
| 字段名 |
类型 |
长度 |
允许空 |
默认值 |
说明 |
| id |
BIGINT |
- |
NO |
AUTO_INCREMENT |
角色ID |
| role_name |
VARCHAR |
50 |
NO |
- |
角色名称 |
| role_code |
VARCHAR |
50 |
NO |
- |
角色编码 |
| remark |
VARCHAR |
200 |
YES |
NULL |
备注 |
| data_scope |
TINYINT |
- |
NO |
1 |
数据权限:1-全部,2-本部门,3-本部门及下级,4-自定义 |
| sort |
INT |
- |
NO |
0 |
排序 |
| status |
TINYINT |
- |
NO |
1 |
状态:0-禁用,1-正常 |
| create_at |
DATETIME |
- |
NO |
CURRENT_TIMESTAMP |
创建时间 |
| creator |
BIGINT |
- |
YES |
NULL |
创建人ID |
| update_at |
DATETIME |
- |
NO |
CURRENT_TIMESTAMP ON UPDATE |
更新时间 |
| updater |
BIGINT |
- |
YES |
NULL |
更新人ID |
| delete_flag |
TINYINT |
- |
NO |
0 |
是否删除:0-否,1-是 |
| delete_at |
DATETIME |
- |
YES |
NULL |
删除时间 |
| version |
INT |
- |
NO |
1 |
乐观锁版本号 |
| tenant_id |
BIGINT |
- |
YES |
NULL |
租户ID |
| 字段名 |
类型 |
长度 |
允许空 |
默认值 |
说明 |
| id |
BIGINT |
- |
NO |
AUTO_INCREMENT |
菜单ID |
| menu_name |
VARCHAR |
50 |
NO |
- |
菜单名称 |
| menu_code |
VARCHAR |
100 |
NO |
- |
菜单编码/权限标识 |
| parent_id |
BIGINT |
- |
NO |
0 |
父菜单ID |
| menu_type |
TINYINT |
- |
NO |
- |
菜单类型:1-目录,2-菜单,3-按钮 |
| path |
VARCHAR |
200 |
YES |
NULL |
路由路径 |
| component |
VARCHAR |
200 |
YES |
NULL |
组件路径 |
| icon |
VARCHAR |
100 |
YES |
NULL |
图标 |
| permission |
VARCHAR |
100 |
YES |
NULL |
权限标识 |
| target |
VARCHAR |
20 |
NO |
‘_self’ |
打开方式:_self-当前页,_blank-新页 |
| is_cache |
TINYINT |
- |
NO |
0 |
是否缓存:0-否,1-是 |
| is_visible |
TINYINT |
- |
NO |
1 |
是否显示:0-否,1-是 |
| is_external |
TINYINT |
- |
NO |
0 |
是否外链:0-否,1-是 |
| sort |
INT |
- |
NO |
0 |
排序 |
| status |
TINYINT |
- |
NO |
1 |
状态:0-禁用,1-正常 |
| create_at |
DATETIME |
- |
NO |
CURRENT_TIMESTAMP |
创建时间 |
| creator |
BIGINT |
- |
YES |
NULL |
创建人ID |
| update_at |
DATETIME |
- |
NO |
CURRENT_TIMESTAMP ON UPDATE |
更新时间 |
| updater |
BIGINT |
- |
YES |
NULL |
更新人ID |
| delete_flag |
TINYINT |
- |
NO |
0 |
是否删除:0-否,1-是 |
| delete_at |
DATETIME |
- |
YES |
NULL |
删除时间 |
| version |
INT |
- |
NO |
1 |
乐观锁版本号 |
| tenant_id |
BIGINT |
- |
YES |
NULL |
租户ID |
3.6 日志表
3.6.1 登录日志表 (sys_login_log)
| 字段名 | 类型 | 长度 | 允许空 | 默认值 | 说明 |
| — | — | — | — | — |
| id | BIGINT | - | NO | AUTO_INCREMENT | 日志ID |
| user_id | BIGINT | - | YES | NULL | 用户ID |
| username | VARCHAR | 50 | NO | - | 用户名 |
| ipaddr | VARCHAR | 50 | NO | - | 登录IP地址 |
| login_location | VARCHAR | 255 | YES | NULL | 登录地点 |
| browser | VARCHAR | 50 | YES | NULL | 浏览器类型 |
| os | VARCHAR | 50 | YES | NULL | 操作系统 |
| status | TINYINT | - | NO | 0 | 登录状态:0-失败,1-成功 |
| msg | VARCHAR | 255 | YES | NULL | 提示信息 |
| login_time | DATETIME | - | NO | CURRENT_TIMESTAMP | 登录时间 |
| create_at | DATETIME | - | NO | CURRENT_TIMESTAMP | 创建时间 |
3.6.2 操作日志表 (sys_operation_log)
| 字段名 |
类型 |
长度 |
允许空 |
默认值 |
说明 |
| id |
BIGINT |
- |
NO |
AUTO_INCREMENT |
日志ID |
| user_id |
BIGINT |
- |
YES |
NULL |
操作用户ID |
| username |
VARCHAR |
50 |
NO |
- |
操作用户名 |
| business_type |
TINYINT |
- |
NO |
0 |
业务类型(0-其他 1-新增 2-修改 3-删除) |
| method |
VARCHAR |
10 |
NO |
- |
请求方式 |
| request_method |
VARCHAR |
10 |
NO |
- |
请求类型 |
| operator_type |
TINYINT |
NO |
- |
0 |
操作类别(0-其它 1-后台用户 2-手机端用户) |
| oper_name |
VARCHAR |
50 |
YES |
NULL |
操作人员 |
| dept_name |
VARCHAR |
50 |
YES |
NULL |
部门名称 |
| oper_url |
VARCHAR |
255 |
YES |
NULL |
请求URL |
| oper_ip |
VARCHAR |
50 |
NO |
- |
操作地址 |
| oper_location |
VARCHAR |
255 |
YES |
NULL |
操作地点 |
| oper_param |
TEXT |
- |
YES |
NULL |
请求参数 |
| json_result |
TEXT |
- |
YES |
NULL |
返回参数 |
| status |
TINYINT |
NO |
NO |
0 |
操作状态:0-正常,1-异常 |
| error_msg |
VARCHAR |
2000 |
YES |
NULL |
错误消息 |
| oper_time |
DATETIME |
- |
NO |
CURRENT_TIMESTAMP |
操作时间 |
| create_at |
DATETIME |
- |
NO |
CURRENT_TIMESTAMP |
创建时间 |
3.3.3 错误日志表 (sys_error_log)
| 字段 |
类型 |
长度 |
允许空 |
默认值 |
说明 |
| id |
BIGINT |
- |
NO |
AUTO_INCREMENT |
日志ID |
| user_id |
BIGINT |
- |
YES |
NULL |
用户ID |
| username |
VARCHAR |
50 |
YES |
NULL |
用户名 |
| request_url |
VARCHAR |
255 |
NO |
- |
请求URL |
| method |
VARCHAR |
10 |
NO |
- |
请求方式 |
| params |
TEXT |
- |
YES |
NULL |
请求参数 |
| error_message |
TEXT |
NO |
- |
错误消息 |
|
| error_stack |
TEXT |
- |
YES |
NULL |
错误堆栈 |
| line_number |
INT |
- |
YES |
NULL |
错误行号 |
| class_name |
VARCHAR |
200 |
YES |
NULL |
Java类名 |
| method_name |
VARCHAR |
200 |
YES |
NULL |
方法名 |
| user_agent |
VARCHAR |
500 |
YES |
NULL |
用户代理 |
| ip |
VARCHAR |
128 |
YES |
NULL |
操作IP地址 |
| status |
TINYINT |
- |
NO |
0 |
状态 |
| error_time |
DATETIME |
- |
NO |
CURRENT_TIMESTAMP |
错误时间 |
| create_at |
DATETIME |
- |
NO |
CURRENT_TIMESTAMP |
创建时间 |
3.7 系统配置表
3.7.1 租户表 (sys_tenant)
| 字段名 |
类型 |
长度 |
允许空 |
默认值 |
说明 |
| id |
BIGINT |
- |
NO |
AUTO_INCREMENT |
租户ID |
| tenant_name |
VARCHAR |
50 |
NO |
- |
租户名称 |
| tenant_code |
VARCHAR(20) |
NO |
- |
租户编码 |
|
| contact_name |
VARCHAR(30) |
NO |
- |
联系人 |
|
| contact_phone |
VARCHAR(20) |
YES |
NULL |
联系电话 |
|
| contact_email |
VARCHAR(50) |
YES |
NULL |
联系邮箱 |
|
| company_name |
VARCHAR(100) |
YES |
NULL |
企业名称 |
|
| domain |
VARCHAR(100) |
YES |
NULL |
域名 |
|
| address |
VARCHAR(200) |
YES |
NULL |
地址 |
|
| phone |
VARCHAR(20) |
YES |
NULL |
电话 |
|
| email |
VARCHAR(100) |
YES |
NULL |
邮箱 |
|
| package_id |
BIGINT |
- |
YES |
NULL |
套餐ID |
| expire_time |
DATETIME |
- |
YES |
NULL |
到期时间 |
| account_count |
INT |
- |
NO |
0 |
账号数量 |
| sort |
INT |
- |
NO |
0 |
排序 |
| status |
TINYINT |
- |
NO |
1 |
状态:0-禁用,1-正常 |
| create_at |
DATETIME |
- |
NO |
CURRENT_TIMESTAMP |
创建时间 |
| creator |
BIGINT |
- |
YES |
NULL |
创建人ID |
| update_at |
DATETIME |
- |
NO |
CURRENT_TIMESTAMP ON UPDATE |
更新时间 |
| updater |
BIGINT |
- |
YES |
NULL |
更新人ID |
| delete_flag |
TINYINT |
- |
NO |
0 |
是否删除:0-否,1-是 |
| delete_at |
DATETIME |
- |
YES |
NULL |
删除时间 |
| version |
INT |
- |
NO |
1 |
乐观锁版本号 |
3.7.2 租户套餐表 (sys_tenant_package)
| 字段 |
类型 |
长度 |
允许空 |
默认值 |
说明 |
| id |
BIGINT |
- |
NO |
AUTO_INCREMENT |
套餐ID |
| package_name |
VARCHAR |
50 |
NO |
- |
套餐名称 |
| package_code |
VARCHAR(20) |
NO |
- |
套餐编码 |
|
| max_users |
INT |
- |
NO |
10 |
最大用户数 |
| max_storage |
BIGINT |
- |
NO |
1073741824 |
最大存储空间(字节) |
| price |
DECIMAL |
10,2 |
- |
NO |
0.00 |
| cycle_unit |
TINYINT |
- |
NO |
1 |
计费周期:1-月,2-季,3-年 |
| features |
TEXT |
- |
YES |
NULL |
功能特性(JSON格式) |
| description |
VARCHAR(500) |
YES |
NULL |
套餐描述 |
|
| status |
TINYINT |
- |
NO |
1 |
状态:0-禁用,1-正常 |
| sort_order |
INT |
- |
NO |
0 |
排序 |
| create_at |
DATETIME |
- |
NO |
CURRENT_TIMESTAMP |
创建时间 |
| creator |
BIGINT |
- |
YES |
NULL |
创建人ID |
| update_at |
DATETIME |
- |
NO |
CURRENT_TIMESTAMP ON UPDATE |
更新时间 |
| updater |
BIGINT |
- |
YES |
NULL |
更新人ID |
| delete_flag |
TINYINT |
- |
NO |
0 |
是否删除:0-否,1-是 |
| delete_at |
DATETIME |
- |
YES |
NULL |
删除时间 |
| version |
INT |
- |
NO |
1 |
乐观锁版本号 |
3.7.3 租户配置表 (sys_tenant_config)
| 字段名 |
类型 |
邮长度 |
允许空 |
默认值 |
说明 |
| id |
BIGINT |
- |
NO |
AUTO_INCREMENT |
配置ID |
| tenant_id |
BIGINT |
- |
NO |
- |
租户ID |
| config_key |
VARCHAR(100) |
NO |
- |
配置键 |
|
| config_value |
TEXT |
- |
YES |
NULL |
配置值 |
| config_type |
TINYINT |
- |
NO |
0 |
系统内置(0-否 1-是) |
| is_encrypted |
TINYINT |
- |
NO |
0 |
是否加密(0-否 1-是) |
| remark |
VARCHAR(500) |
YES |
NULL |
备注 |
|
| create_at |
DATETIME |
- |
NO |
CURRENT_TIMESTAMP |
创建时间 |
| creator |
BIGINT |
- |
YES |
NULL |
创建人ID |
| update_at |
DATETIME |
- |
NO |
CURRENT_TIMESTAMP ON UPDATE |
更新时间 |
| updater |
BIGINT |
- |
YES |
NULL |
更新人ID |
| delete_flag |
TINYINT |
- |
NO |
0 |
是否删除:0-否,1-是 |
| delete_at |
DATETIME |
- |
YES |
NULL |
删除时间 |
| version |
INT |
- |
NO |
1 |
乐观锁版本号 |
3.7.4 字典类型表 (sys_dict_type)
| 字段名 |
类型 |
长度 |
允许空 |
默认值 |
说明 |
| id |
BIGINT |
- |
NO |
AUTO_INCREMENT |
字典主键 |
| dict_name |
VARCHAR(100) |
NO |
- |
字典名称 |
|
| dict_type |
VARCHAR(100) |
NO |
- |
字典类型 |
|
| sort |
INT |
- |
NO |
0 |
排序 |
| status |
TINYINT |
- |
NO |
1 |
状态(0正常 1停用) |
| create_at |
DATETIME |
- |
NO |
CURRENT_TIMESTAMP |
创建时间 |
| creator |
BIGINT |
- |
YES |
NULL |
创建人 |
| update_at |
DATETIME |
- |
NO |
CURRENT_TIMESTAMP ON UPDATE |
更新时间 |
| updater |
BIGINT |
- |
YES |
NULL |
更新人 |
| delete_flag |
TINYINT |
- |
NO |
0 |
是否删除 |
| delete_at |
DATETIME |
- |
YES |
NULL |
删除时间 |
| version |
INT |
- |
NO |
1 |
乐观锁版本号 |
| remark |
VARCHAR(500) |
YES |
NULL |
备注 |
|
3.7.5 字典数据表 (sys_dict_data)
| 字段名 |
类型 |
长度 |
允许空 |
默认值 |
说明 |
| id |
BIGINT |
- |
NO |
AUTO_INCREMENT |
数据编号 |
| dict_sort |
INT |
- |
NO |
0 |
字典排序 |
| dict_label |
VARCHAR(100) |
NO |
- |
字典标签 |
|
| dict_value |
VARCHAR(100) |
NO |
- |
字典键值 |
|
| dict_type |
VARCHAR(100) |
NO |
- |
字典类型 |
|
| css_class |
VARCHAR(100 |
YES |
NULL |
表格回显样式 |
|
| list_class |
VARCHAR(100) |
YES |
NULL |
表格列表样式 |
|
| is_default |
TINYINT |
- |
NO |
N |
是否默认(Y是 N否) |
| sort |
INT |
- |
NO |
0 |
排序 |
| status |
TINYINT |
- |
NO |
1 |
状态(0正常 1停用) |
| create_at |
DATETIME |
- |
NO |
CURRENT_TIMESTAMP |
创建时间 |
| creator |
BIGINT |
- |
YES |
NULL |
创建人 |
| update_at |
DATETIME |
- |
NO |
CURRENT_TIMESTAMP ON UPDATE |
更新时间 |
| updater |
BIGINT |
- |
YES |
NULL |
更新人 |
| delete_flag |
TINYINT |
- |
NO |
0 |
是否删除 |
| delete_at |
DATETIME |
- |
YES |
NULL |
删除时间 |
| version |
INT |
- |
NO |
1 |
乐观锁版本号 |
| remark |
VARCHAR(500) |
YES |
NULL |
备注 |
|
3.7.6 参数表 (sys_params)
| 字段名 |
类型 |
长度 |
允许空 |
默认值 |
说明 |
| id |
BIGINT |
- |
NO |
AUTO_INCREMENT |
参数ID |
| param_name |
VARCHAR(100) |
NO |
- |
参数名称 |
|
| param_key |
VARCHAR(100) NO |
- |
参数键名 |
|
|
| param_value |
VARCHAR(500) |
YES |
NULL |
参数键值 |
|
| param_type |
TINYINT |
- |
NO |
0 |
系统内置(0-否 1-是) |
| is_encrypted |
TINYINT |
- |
NO |
0 |
是否加密(0-否 1-是) |
| sort |
INT |
- |
NO |
0 |
排序 |
| status |
TINYINT |
- |
NO |
1 |
状态(0正常 1停用) |
| remark |
VARCHAR(500) |
YES |
NULL |
备注 |
|
| create_at |
DATETIME |
- |
NO |
CURRENT_TIMESTAMP |
创建时间 |
| creator |
BIGINT |
- |
YES |
NULL |
创建人ID |
| update_at |
DATETIME |
- |
NO |
CURRENT_TIMESTAMP ON UPDATE |
更新时间 |
| updater |
BIGINT |
- |
YES |
NULL |
更新人ID |
| delete_flag |
TINYINT |
- |
NO |
0 |
是否删除:0-否,1-是 |
| delete_at |
DATETIME |
- |
YES |
NULL |
删除时间 |
| version |
INT |
- |
NO |
1 |
乐观锁版本号 |
3.8 关联表
3.8.1 用户角色关联表 (sys_user_role)
| 字段名 |
类型 |
长度 |
允许空 |
默认值 |
说明 |
| id |
BIGINT |
- |
NO |
AUTO_INCREMENT |
主键ID |
| user_id |
BIGINT |
- |
NO |
- |
用户ID |
| role_id |
BIGINT |
- |
NO |
- |
角色ID |
| 字段名 |
类型 |
长度 |
允许空 |
默认值 |
说明 |
| id |
BIGINT |
- |
NO |
AUTO_INCREMENT |
主键ID |
| role_id |
BIGINT |
- |
NO |
- |
角色ID |
| menu_id |
BIGINT |
- |
NO |
- |
菜单ID |
3.8.3 角色部门关联表 (sys_role_dept)
| 字段名 |
类型 |
长度 |
允许空 |
默认值 |
说明 |
| id |
BIGINT |
- |
NO |
AUTO_INCREMENT |
主键ID |
| role_id |
BIGINT |
- |
NO |
- |
角色ID |
| dept_id |
BIGINT |
- |
NO |
- |
部门ID |
4. 索引设计
4.1 主键索引
所有表的 id 字段自动创建主键索引(PRIMARY KEY)。
4.2 唯一索引
| 表名 |
索引名 |
字段 |
说明 |
| sys_user |
uk_username |
username |
用户名唯一 |
| sys_user |
uk_email |
email |
邮箱唯一 |
| sys_user |
uk_phone |
phone |
手机号唯一 |
| sys_role |
uk_role_code |
role_code |
角色编码唯一 |
| sys_dept |
uk_dept_code |
dept_code |
部门编码唯一 |
| sys_post |
uk_post_code |
post_code |
岗位编码唯一 |
| sys_menu |
uk_menu_code |
menu_code |
菜单编码唯一 |
| sys_tenant |
uk_tenant_code |
tenant_code |
租户编码唯一 |
| sys_dict_type |
uk_dict_type |
dict_type |
字典类型唯一 |
4.3 普通索引
| 表名 |
索引名 |
字段 |
说明 |
| sys_user |
idx_dept_id |
dept_id |
部门查询 |
| sys_user |
idx_post_id |
post_id |
岗位查询 |
| sys_user |
idx_status |
status |
状态筛选 |
| sys_user |
idx_tenant_id |
tenant_id |
租户隔离 |
| sys_role |
idx_status |
status |
状态筛选 |
| sys_role |
idx_data_scope |
data_scope |
数据权限查询 |
| sys_menu |
idx_parent_id |
parent_id |
父菜单查询 |
| sys_menu |
idx_menu_type |
menu_type |
菜单类型筛选 |
| sys_dept |
idx_parent_id |
parent_id |
父部门查询 |
| sys_dept |
idx_status |
status |
状态筛选 |
| sys_post |
idx_dept_id |
dept_id |
部门岗位查询 |
| sys_tenant |
idx_package_id |
package_id |
套餐查询 |
4.4 复合索引
| 表名 |
索引名 |
字段 |
说明 |
| sys_user_role |
idx_user_role |
user_id, role_id |
用户角色查询 |
| sys_role_menu |
idx_role_menu |
role_id, menu_id |
角色菜单查询 |
| sys_role_dept |
idx_role_dept |
role_id, dept_id |
角色部门查询 |
| sys_dict_data |
idx_dict_type_status |
dict_type, status |
字典数据查询 |
| sys_login_log |
idx_user_time |
user_id, login_time |
用户登录记录 |
| sys_operation_log |
idx_user_time |
user_id, operation_time |
用户操作记录 |
| sys_tenant_config |
idx_tenant_key |
tenant_id, config_key |
租户配置查询 |
4.5 日志表索引
| 表名 |
索引名 |
字段 |
说明 |
| sys_login_log |
idx_login_time |
login_time |
按登录时间查询 |
| sys_login_log |
idx_username_time |
username, login_time |
用户登录历史 |
| sys_operation_log |
idx_operation_time |
operation_time |
按操作时间查询 |
| sys_operation_log |
idx_business_type |
business_type |
按业务类型查询 |
| sys_error_log |
idx_create_time |
create_time |
按创建时间查询 |
| sys_error_log |
idx_status |
status |
按处理状态查询 |
4.6 软删除索引
| 表名 |
索引名 |
字段 |
说明 |
| sys_user |
idx_delete_flag |
delete_flag |
软删除筛选 |
| sys_role |
idx_delete_flag |
delete_flag |
软删除筛选 |
| sys_menu |
idx_delete_flag |
delete_flag |
软删除筛选 |
| sys_dept |
idx_delete_flag |
delete_flag |
软删除筛选 |
| sys_post |
idx_delete_flag |
delete_flag |
软删除筛选 |
| sys_tenant |
idx_delete_flag |
delete_flag |
软删除筛选 |
5. 安全设计
5.1 密码安全
- 用户密码必须经过 bcrypt 或 PBKDF2 算法加密存储
- 密码字段长度至少 255 字符,以支持加密后的字符串
- 强制密码策略:最少 8 位,包含大小写字母、数字和特殊字符
5.2 数据脱敏
- 手机号:显示前 3 位和后 4 位,中间用 * 替代(如:138****1234)
- 邮箱:显示前 3 位和 @ 以后的内容(如:zha***@example.com)
- 身份证号:显示前 6 位和后 4 位
- 银行卡号:显示前 6 位和后 4 位
5.3 数据权限控制
- 租户隔离:所有查询必须带
tenant_id 条件
- 部门数据权限:根据角色的
data_scope 控制数据可见范围
- 行级权限:重要业务表可扩展
dept_id 字段实现行级权限
5.4 审计日志
- 关键操作必须记录操作日志(增删改)
- 登录行为必须记录登录日志
- 系统异常必须记录错误日志
- 日志包含操作人、操作时间、操作内容、IP 地址等信息
6. 性能优化建议
6.1 分区策略
对数据量大的表建议按时间分区:
| 表名 |
分区策略 |
分区字段 |
分区间隔 |
| sys_login_log |
RANGE |
login_time |
按月分区 |
| sys_operation_log |
RANGE |
operation_time |
按月分区 |
| sys_error_log |
RANGE |
create_time |
按月分区 |
6.2 查询优化
- 使用覆盖索引减少回表查询
- 避免 SELECT *,只查询需要的字段
- 合理使用 JOIN,避免大表关联
- 分页查询使用索引优化
6.3 读写分离
- 日志类表可以考虑读写分离
- 报表查询可以考虑只读从库
- 主库负责写操作,从库负责读操作
6.4 缓存策略
- 用户角色权限信息缓存(Redis)
- 字典数据缓存
- 菜单树结构缓存
- 部门树结构缓存
7. 数据字典
7.1 通用状态值
- status: 0-禁用/失败,1-正常/成功
- delete_flag: 0-未删除,1-已删除
- is_default: 0-否,1-是
- is_system: 0-否,1-是
7.2 用户性别 (sex)
7.4 数据权限范围 (data_scope)
- 1: 全部数据权限
- 2: 本部门数据权限
- 3: 本部门及下级部门数据权限
- 4: 自定义数据权限
7.5 业务类型 (business_type)
- 0: 其他
- 1: 新增
- 2: 修改
- 3: 删除
- 4: 授权
- 5: 导出
- 6: 导入
7.6 操作类别 (operator_type)
7.7 租户套餐周期 (cycle_unit)
8. 相关链接