news 2026/6/15 15:03:55

【实战】 SAAS租户表结构设计

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
【实战】 SAAS租户表结构设计

SAAS租户表结构设计

请关注公众号【碳硅化合物AI】

设计说明

本文档定义SAAS多租户平台的核心表结构,遵循数据库规范,包含认证、租户、组织、用户、角色、权限、菜单、按钮、日志、配置等表的设计。

基础表结构

0. 认证用户表 (auth_user)

认证用户表用于存储全局认证用户主体,作为OAuth2认证的基础。租户用户通过auth_user_id关联到认证用户,实现一人多租映射。

字段名类型长度是否为空说明
idBIGINT-NOT NULL业务主键ID
usernameVARCHAR128NOT NULL登录用户名(全局唯一)
passwordVARCHAR256NOT NULL密码(加密存储,遵循加密规范)
display_nameVARCHAR256NULL显示名称
emailVARCHAR256NULL邮箱
phoneVARCHAR64NULL手机号
account_statusVARCHAR32NOT NULL账户状态(ON/OFF/LOCKED)
create_timeDATETIME-NOT NULL创建时间
update_timeDATETIME-NOT NULL更新时间
versionINT-NOT NULL版本,从1累加
deletedTINYINT-NOT NULL未删除0、已删除1

索引:

  • PRIMARY KEY (id)
  • UNIQUE KEY uk_auth_username (username)

说明:

  • 此表用于OAuth2认证,存储全局认证用户主体
  • tenant_user表通过auth_user_id字段关联此表
  • 一个auth_user可以关联多个tenant_user,实现一人多租映射
  • account_status字段支持账户锁定(LOCKED)状态,用于安全控制

1. 租户表 (tenant)

字段名类型长度是否为空说明
idBIGINT-NOT NULL业务主键ID
tenant_codeVARCHAR64NOT NULL租户编码
tenant_nameVARCHAR256NOT NULL租户名称
tenant_descriptionVARCHAR256NULL租户描述
enable_statusVARCHAR32NOT NULL租户状态(ON/OFF)
create_userVARCHAR64NOT NULL创建人
create_timeDATETIME-NOT NULL创建时间
update_userVARCHAR64NOT NULL更新人
update_timeDATETIME-NOT NULL更新时间
versionINT-NOT NULL版本,从1累加
deletedTINYINT-NOT NULL未删除0、已删除1

索引:

  • PRIMARY KEY (id)
  • UNIQUE KEY uk_tenant_code (tenant_code)

2. 组织表 (organization)

字段名类型长度是否为空说明
idBIGINT-NOT NULL业务主键ID
tenant_idBIGINT-NOT NULL租户ID
parent_idBIGINT-NULL父组织ID
org_codeVARCHAR64NOT NULL组织编码
org_nameVARCHAR256NOT NULL组织名称
org_descriptionVARCHAR256NULL组织描述
org_sequenceINT-NULL排序
enable_statusVARCHAR32NOT NULL组织状态(ON/OFF)
create_userVARCHAR64NOT NULL创建人
create_timeDATETIME-NOT NULL创建时间
update_userVARCHAR64NOT NULL更新人
update_timeDATETIME-NOT NULL更新时间
versionINT-NOT NULL版本,从1累加
deletedTINYINT-NOT NULL未删除0、已删除1

索引:

  • PRIMARY KEY (id)
  • KEY idx_tenant_id (tenant_id)
  • KEY idx_parent_id (parent_id)

3. 租户用户表 (tenant_user)

租户用户表用于存储租户内的用户信息,通过auth_user_id关联到全局认证用户主体,实现一人多租映射。用户在某个租户内的角色、权限等信息通过此表与其他租户隔离。

字段名类型长度是否为空说明
idBIGINT-NOT NULL业务主键ID
tenant_idBIGINT-NOT NULL租户ID
org_idBIGINT-NULL组织ID
user_codeVARCHAR64NOT NULL用户编码
user_nameVARCHAR256NOT NULL用户名
auth_user_idBIGINT-NULL认证用户ID(关联 auth_user.id)
emailVARCHAR256NULL邮箱
phoneVARCHAR64NULL手机号
enable_statusVARCHAR32NOT NULL用户状态(ON/OFF)
create_userVARCHAR64NOT NULL创建人
create_timeDATETIME-NOT NULL创建时间
update_userVARCHAR64NOT NULL更新人
update_timeDATETIME-NOT NULL更新时间
versionINT-NOT NULL版本,从1累加
deletedTINYINT-NOT NULL未删除0、已删除1

索引:

  • PRIMARY KEY (id)
  • KEY idx_tenant_id (tenant_id)
  • KEY idx_org_id (org_id)
  • KEY idx_auth_user_id (auth_user_id)
  • UNIQUE KEY uk_tenant_user_code (tenant_id, user_code)

说明:

  • 此表存储租户内的用户信息,按租户隔离
  • auth_user_id关联到auth_user表,实现一人多租映射:一个认证用户可以在多个租户中有不同的租户用户记录
  • org_id可选,用于组织级别的数据隔离
  • user_code在租户内唯一,不同租户可以有相同的user_code
  • 用户在租户内的角色、权限等信息通过tenant_user_role等关联表管理

4. 租户角色表 (tenant_role)

字段名类型长度是否为空说明
idBIGINT-NOT NULL业务主键ID
tenant_idBIGINT-NOT NULL租户ID
role_codeVARCHAR64NOT NULL角色编码
role_nameVARCHAR256NOT NULL角色名称
role_descriptionVARCHAR256NULL角色描述
enable_statusVARCHAR32NOT NULL角色状态(ON/OFF)
create_userVARCHAR64NOT NULL创建人
create_timeDATETIME-NOT NULL创建时间
update_userVARCHAR64NOT NULL更新人
update_timeDATETIME-NOT NULL更新时间
versionINT-NOT NULL版本,从1累加
deletedTINYINT-NOT NULL未删除0、已删除1

索引:

  • PRIMARY KEY (id)
  • KEY idx_tenant_id (tenant_id)
  • UNIQUE KEY uk_tenant_role_code (tenant_id, role_code)

5. 租户权限表 (tenant_permission)

字段名类型长度是否为空说明
idBIGINT-NOT NULL业务主键ID
tenant_idBIGINT-NOT NULL租户ID
permission_codeVARCHAR64NOT NULL权限编码
permission_nameVARCHAR256NOT NULL权限名称
permission_descriptionVARCHAR256NULL权限描述
resource_typeVARCHAR32NOT NULL资源类型(MENU/BUTTON/API)
resource_idBIGINT-NULL资源ID(关联菜单/按钮/API)
enable_statusVARCHAR32NOT NULL权限状态(ON/OFF)
create_userVARCHAR64NOT NULL创建人
create_timeDATETIME-NOT NULL创建时间
update_userVARCHAR64NOT NULL更新人
update_timeDATETIME-NOT NULL更新时间
versionINT-NOT NULL版本,从1累加
deletedTINYINT-NOT NULL未删除0、已删除1

索引:

  • PRIMARY KEY (id)
  • KEY idx_tenant_id (tenant_id)
  • KEY idx_resource (resource_type, resource_id)
  • UNIQUE KEY uk_tenant_permission_code (tenant_id, permission_code)

6. 租户菜单表 (tenant_menu)

字段名类型长度是否为空说明
idBIGINT-NOT NULL业务主键ID
tenant_idBIGINT-NOT NULL租户ID
parent_idBIGINT-NULL父菜单ID
menu_codeVARCHAR64NOT NULL菜单编码
menu_nameVARCHAR256NOT NULL菜单名称
menu_descriptionVARCHAR256NULL菜单描述
menu_iconVARCHAR256NULL菜单图标
menu_urlVARCHAR256NULL菜单URL
menu_sequenceINT-NULL排序
enable_statusVARCHAR32NOT NULL菜单状态(ON/OFF)
create_userVARCHAR64NOT NULL创建人
create_timeDATETIME-NOT NULL创建时间
update_userVARCHAR64NOT NULL更新人
update_timeDATETIME-NOT NULL更新时间
versionINT-NOT NULL版本,从1累加
deletedTINYINT-NOT NULL未删除0、已删除1

索引:

  • PRIMARY KEY (id)
  • KEY idx_tenant_id (tenant_id)
  • KEY idx_parent_id (parent_id)

7. 租户按钮表 (tenant_button)

字段名类型长度是否为空说明
idBIGINT-NOT NULL业务主键ID
tenant_idBIGINT-NOT NULL租户ID
menu_idBIGINT-NULL所属菜单ID
button_codeVARCHAR64NOT NULL按钮编码
button_nameVARCHAR256NOT NULL按钮名称
button_descriptionVARCHAR256NULL按钮描述
button_iconVARCHAR256NULL按钮图标
button_sequenceINT-NULL排序
enable_statusVARCHAR32NOT NULL按钮状态(ON/OFF)
create_userVARCHAR64NOT NULL创建人
create_timeDATETIME-NOT NULL创建时间
update_userVARCHAR64NOT NULL更新人
update_timeDATETIME-NOT NULL更新时间
versionINT-NOT NULL版本,从1累加
deletedTINYINT-NOT NULL未删除0、已删除1

索引:

  • PRIMARY KEY (id)
  • KEY idx_tenant_id (tenant_id)
  • KEY idx_menu_id (menu_id)
  • UNIQUE KEY uk_tenant_button_code (tenant_id, button_code)

8. 租户日志表 (tenant_log)

字段名类型长度是否为空说明
idBIGINT-NOT NULL业务主键ID
tenant_idBIGINT-NOT NULL租户ID
user_idBIGINT-NULL用户ID
log_typeVARCHAR32NOT NULL日志类型(LOGIN/AUTH/RESOURCE等)
log_codeVARCHAR64NOT NULL日志编码
log_nameVARCHAR256NOT NULL日志名称
log_descriptionVARCHAR1024NULL日志描述
log_contentTEXT-NULL日志内容
ip_addressVARCHAR64NULLIP地址
enable_statusVARCHAR32NOT NULL日志状态(ON/OFF)
create_userVARCHAR64NOT NULL创建人
create_timeDATETIME-NOT NULL创建时间
update_userVARCHAR64NOT NULL更新人
update_timeDATETIME-NOT NULL更新时间
versionINT-NOT NULL版本,从1累加
deletedTINYINT-NOT NULL未删除0、已删除1

索引:

  • PRIMARY KEY (id)
  • KEY idx_tenant_id (tenant_id)
  • KEY idx_user_id (user_id)
  • KEY idx_log_type (log_type)
  • KEY idx_create_time (create_time)

9. 租户配置表 (tenant_config)

字段名类型长度是否为空说明
idBIGINT-NOT NULL业务主键ID
tenant_idBIGINT-NOT NULL租户ID
config_codeVARCHAR64NOT NULL配置编码
config_nameVARCHAR256NOT NULL配置名称
config_descriptionVARCHAR256NULL配置描述
config_valueTEXT-NULL配置值(JSON格式)
config_typeVARCHAR32NOT NULL配置类型
enable_statusVARCHAR32NOT NULL配置状态(ON/OFF)
create_userVARCHAR64NOT NULL创建人
create_timeDATETIME-NOT NULL创建时间
update_userVARCHAR64NOT NULL更新人
update_timeDATETIME-NOT NULL更新时间
versionINT-NOT NULL版本,从1累加
deletedTINYINT-NOT NULL未删除0、已删除1

索引:

  • PRIMARY KEY (id)
  • KEY idx_tenant_id (tenant_id)
  • UNIQUE KEY uk_tenant_config_code (tenant_id, config_code)

关联关系表

10. 用户角色关联表 (tenant_user_role)

字段名类型长度是否为空说明
idBIGINT-NOT NULL业务主键ID
tenant_idBIGINT-NOT NULL租户ID
user_idBIGINT-NOT NULL用户ID
role_idBIGINT-NOT NULL角色ID
create_userVARCHAR64NOT NULL创建人
create_timeDATETIME-NOT NULL创建时间
update_userVARCHAR64NOT NULL更新人
update_timeDATETIME-NOT NULL更新时间
versionINT-NOT NULL版本,从1累加
deletedTINYINT-NOT NULL未删除0、已删除1

索引:

  • PRIMARY KEY (id)
  • KEY idx_tenant_id (tenant_id)
  • KEY idx_user_id (user_id)
  • KEY idx_role_id (role_id)
  • UNIQUE KEY uk_user_role (tenant_id, user_id, role_id)

11. 角色权限关联表 (tenant_role_permission)

字段名类型长度是否为空说明
idBIGINT-NOT NULL业务主键ID
tenant_idBIGINT-NOT NULL租户ID
role_idBIGINT-NOT NULL角色ID
permission_idBIGINT-NOT NULL权限ID
create_userVARCHAR64NOT NULL创建人
create_timeDATETIME-NOT NULL创建时间
update_userVARCHAR64NOT NULL更新人
update_timeDATETIME-NOT NULL更新时间
versionINT-NOT NULL版本,从1累加
deletedTINYINT-NOT NULL未删除0、已删除1

索引:

  • PRIMARY KEY (id)
  • KEY idx_tenant_id (tenant_id)
  • KEY idx_role_id (role_id)
  • KEY idx_permission_id (permission_id)
  • UNIQUE KEY uk_role_permission (tenant_id, role_id, permission_id)

12. OAuth2 客户端表 (oauth_client)

OAuth2客户端表用于管理OAuth2客户端配置,支持多客户端(web、mobile等)的认证需求。支持密钥轮换和吊销策略。

字段名类型长度是否为空说明
idBIGINT-NOT NULL业务主键ID
client_idVARCHAR128NOT NULL客户端ID(唯一)
client_secretVARCHAR256NULL客户端密钥(加密/哈希)
grant_typesVARCHAR256NULL授权类型(逗号分隔,如:password,refresh_token,client_credentials)
redirect_urisVARCHAR1024NULL重定向URI(逗号分隔,用于授权码流)
scopesVARCHAR256NULL范围(逗号分隔,如:read,write)
access_token_ttlINT-NULL访问令牌有效期(秒)
refresh_token_ttlINT-NULL刷新令牌有效期(秒)
enable_statusVARCHAR32NOT NULL状态(ON/OFF)
create_timeDATETIME-NOT NULL创建时间
update_timeDATETIME-NOT NULL更新时间
versionINT-NOT NULL版本,从1累加
deletedTINYINT-NOT NULL未删除0、已删除1

索引:

  • PRIMARY KEY (id)
  • UNIQUE KEY uk_client_id (client_id)

说明:

  • 此表用于OAuth2客户端管理,支持多客户端(web、mobile等)
  • grant_types支持多种授权类型:password(密码模式)、client_credentials(客户端凭证)、refresh_token(刷新令牌)等
  • client_secret应加密或哈希存储,遵循加密规范
  • 支持密钥轮换:通过版本控制实现新旧密钥过渡期并存
  • enable_status为OFF时,该客户端无法使用
  • 注意:此表不包含tenant_id字段,因为客户端是全局配置,不按租户隔离

设计说明

  1. 字符集:所有表使用 utf8mb4 字符集,utf8mb4_bin 排序
  2. 主键:所有表使用 BIGINT 类型的业务主键 id,不设置自增
  3. 审计字段:所有表包含 create_user、create_time、update_user、update_time、version、deleted 字段(auth_user 和 oauth_client 表包含部分审计字段)
  4. 租户隔离:所有业务表包含 tenant_id 字段,用于数据隔离;认证相关表(auth_user、oauth_client)不包含 tenant_id,因为它们是全局配置
  5. 组织关联:根据业务需要,部分表包含 org_id 字段
  6. 软删除:使用 deleted 字段实现软删除(0-未删除,1-已删除)
  7. 状态字段:使用 enable_status 字段,值为 ON/OFF
  8. 认证用户与租户用户关联tenant_user.auth_user_id关联auth_user.id,实现一人多租映射
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/15 15:03:53

[独家原创]VMD-KPCA-CCO-CNN-BiLSTM-Attention多变量时序预测(多输入单输出)matlab

目录 1、代码简介 2、代码运行结果展示 3、代码获取 1、代码简介 [独家原创]VMD-KPCA-CCO-CNN-BiLSTM-Attention多变量时序预测 (多输入单输出) 基于变分模态分解-核主成分分析-杜鹃鲶鱼算法-卷积神经网络-长短期记忆网络-注意力机制多变量时序预测 matlab代码 1.数据采用…

作者头像 李华
网站建设 2026/6/15 12:19:09

applyMatrix H 门的两种方式

四个 qubits 的index 分别是0,1,2,3, 在1和2qubits 上作用 h门,数学表达方式是怎么样的?是否可以分2次,分别将h门作用在1和2qubits?效果是否相同呢?这是量子门在多个量子比特上的作用方式问题。1. 数学表达方式情况A&a…

作者头像 李华
网站建设 2026/6/15 13:14:49

git branch管理功能开发:为PyTorch-CUDA-v2.8添加新模块

使用 Git 分支管理为 PyTorch-CUDA-v2.8 添加新模块的工程实践 在深度学习项目日益复杂的今天,一个常见的挑战是:如何在不破坏主干训练流程的前提下,安全地引入新功能?比如,团队中有人想为现有的 PyTorch 模型添加自定…

作者头像 李华
网站建设 2026/6/15 13:21:44

PyTorch-CUDA-v2.8镜像实测:训练速度提升3倍的秘密武器

PyTorch-CUDA-v2.8镜像实测:训练速度提升3倍的秘密武器 在现代AI研发的战场上,时间就是竞争力。一个模型从想法到上线,往往卡在“环境配了两天,训练跑了一周”这种尴尬局面。你有没有经历过这样的场景:好不容易写完代码…

作者头像 李华
网站建设 2026/6/15 11:44:58

软件测试面试题大全(一)

一、测试理论 1、软件测试的目的是什么 软件测试的目的是为了发现软件中的缺陷,确保软件质量,验证软件是否满足需求规格说明书的要求,以及评估软件的性能、安全性等各方面指标。 具体包括: 发现缺陷:尽早发现并修复软件中的bug 验证需求:确保软件功能符合用户需求 评估…

作者头像 李华