news 2026/4/3 6:29:53

【实战】 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/3/31 19:10:24

HuggingFace镜像网站推荐:结合PyTorch-CUDA-v2.8加速大模型推理

HuggingFace镜像网站推荐:结合PyTorch-CUDA-v2.8加速大模型推理 在如今的大模型时代,谁能更快地跑通第一个 from transformers import AutoModel,谁就更有可能抢占实验先机。然而现实往往骨感:刚配好 Python 环境,发现…

作者头像 李华
网站建设 2026/4/1 22:53:49

Web开发者实战AI Agent:基于Dify实现OpenAI Deep Research智能体

图片来源网络,侵权联系删。 文章目录1. 引言2. Web开发者如何理解 Deep Research?2.1 Deep Research 的核心流程(类比后端业务编排)2.2 Dify 如何支持 Deep Research?3. Deep Research 智能体设计原理(Web视…

作者头像 李华
网站建设 2026/4/1 5:23:17

单片机基础知识---程序跑飞

文章目录一、先理解核心本质二、程序跑飞的具体原因1. 硬件层面(基础诱因,易被忽略)2. 软件层面(最常见,裸机开发核心问题)3. 环境干扰层面(场景相关)三、快速排查思路(实…

作者头像 李华
网站建设 2026/3/31 11:43:52

【课程设计/毕业设计】基于web的中医诊所预约挂号系统设计与实现约挂号、病历管理、药品库存、医生信息展示【附源码、数据库、万字文档】

博主介绍:✌️码农一枚 ,专注于大学生项目实战开发、讲解和毕业🚢文撰写修改等。全栈领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围:&am…

作者头像 李华
网站建设 2026/3/16 5:28:28

Java毕设项目推荐-基于协同过滤算法的音乐推荐系统基于协同过滤算法的个性化音乐推荐系统【附源码+文档,调试定制服务】

博主介绍:✌️码农一枚 ,专注于大学生项目实战开发、讲解和毕业🚢文撰写修改等。全栈领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围:&am…

作者头像 李华