企业级权限管理系统数据库设计

企业级权限管理系统数据库设计

本文档介绍了一个完整的企业级权限管理系统数据库设计,采用 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

3.5 菜单表 (sys_menu)

字段名 类型 长度 允许空 默认值 说明
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

3.8.2 角色菜单关联表 (sys_role_menu)

字段名 类型 长度 允许空 默认值 说明
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 密码安全

  • 用户密码必须经过 bcryptPBKDF2 算法加密存储
  • 密码字段长度至少 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)

  • 0: 未知
  • 1: 男
  • 2: 女

7.3 菜单类型 (menu_type)

  • 1: 目录
  • 2: 菜单
  • 3: 按钮

7.4 数据权限范围 (data_scope)

  • 1: 全部数据权限
  • 2: 本部门数据权限
  • 3: 本部门及下级部门数据权限
  • 4: 自定义数据权限

7.5 业务类型 (business_type)

  • 0: 其他
  • 1: 新增
  • 2: 修改
  • 3: 删除
  • 4: 授权
  • 5: 导出
  • 6: 导入

7.6 操作类别 (operator_type)

  • 0: 其它
  • 1: 后台用户
  • 2: 手机端用户

7.7 租户套餐周期 (cycle_unit)

  • 1: 月
  • 2: 季
  • 3: 年

8. 相关链接


企业级权限管理系统数据库设计
https://jhyjhy.cn/posts/数据库/企业级权限管理系统数据库设计/13770/
作者
Hongyu
发布于
2025年12月10日
许可协议