SAAS租户元数据模型设计
请关注公众号【碳硅化合物AI】
设计说明
本文档定义SAAS多租户平台的元数据模型,包括应用、模块、菜单、按钮、API、实体、表单、字段、视图等元数据对象,以及它们与租户的关联关系。
元数据表结构
1. 应用表 (application)
| 字段名 | 类型 | 长度 | 是否为空 | 说明 |
|---|---|---|---|---|
| id | BIGINT | - | NOT NULL | 业务主键ID |
| app_code | VARCHAR | 64 | NOT NULL | 应用编码 |
| app_name | VARCHAR | 256 | NOT NULL | 应用名称 |
| app_description | VARCHAR | 256 | NULL | 应用描述 |
| app_type | VARCHAR | 32 | NULL | 应用类型 |
| app_url | VARCHAR | 256 | NULL | 应用URL |
| app_icon | VARCHAR | 256 | NULL | 应用图标 |
| app_sequence | INT | - | NULL | 排序 |
| enable_status | VARCHAR | 32 | NOT NULL | 应用状态(ON/OFF) |
| create_user | VARCHAR | 64 | NOT NULL | 创建人 |
| create_time | DATETIME | - | NOT NULL | 创建时间 |
| update_user | VARCHAR | 64 | NOT NULL | 更新人 |
| update_time | DATETIME | - | NOT NULL | 更新时间 |
| version | INT | - | NOT NULL | 版本,从1累加 |
| deleted | TINYINT | - | NOT NULL | 未删除0、已删除1 |
索引:
- PRIMARY KEY (id)
- UNIQUE KEY uk_app_code (app_code)
说明:应用是系统功能的基础单元,与系统功能相关。
2. 模块表 (module)
| 字段名 | 类型 | 长度 | 是否为空 | 说明 |
|---|---|---|---|---|
| id | BIGINT | - | NOT NULL | 业务主键ID |
| app_id | BIGINT | - | NOT NULL | 应用ID |
| module_code | VARCHAR | 64 | NOT NULL | 模块编码 |
| module_name | VARCHAR | 256 | NOT NULL | 模块名称 |
| module_description | VARCHAR | 256 | NULL | 模块描述 |
| module_url | VARCHAR | 256 | NULL | 模块URL |
| module_icon | VARCHAR | 256 | NULL | 模块图标 |
| module_sequence | INT | - | NULL | 排序 |
| enable_status | VARCHAR | 32 | NOT NULL | 模块状态(ON/OFF) |
| create_user | VARCHAR | 64 | NOT NULL | 创建人 |
| create_time | DATETIME | - | NOT NULL | 创建时间 |
| update_user | VARCHAR | 64 | NOT NULL | 更新人 |
| update_time | DATETIME | - | NOT NULL | 更新时间 |
| version | INT | - | NOT NULL | 版本,从1累加 |
| deleted | TINYINT | - | NOT NULL | 未删除0、已删除1 |
索引:
- PRIMARY KEY (id)
- KEY idx_app_id (app_id)
- UNIQUE KEY uk_app_module_code (app_id, module_code)
说明:模块属于应用,一个应用包含多个模块。
3. 菜单元数据表 (menu_metadata)
| 字段名 | 类型 | 长度 | 是否为空 | 说明 |
|---|---|---|---|---|
| id | BIGINT | - | NOT NULL | 业务主键ID |
| module_id | BIGINT | - | NOT NULL | 模块ID |
| parent_id | BIGINT | - | NULL | 父菜单ID |
| menu_code | VARCHAR | 64 | NOT NULL | 菜单编码 |
| menu_name | VARCHAR | 256 | NOT NULL | 菜单名称 |
| menu_description | VARCHAR | 256 | NULL | 菜单描述 |
| menu_icon | VARCHAR | 256 | NULL | 菜单图标(默认) |
| menu_url | VARCHAR | 256 | NULL | 菜单URL |
| menu_sequence | INT | - | NULL | 排序 |
| enable_status | VARCHAR | 32 | NOT NULL | 菜单状态(ON/OFF) |
| create_user | VARCHAR | 64 | NOT NULL | 创建人 |
| create_time | DATETIME | - | NOT NULL | 创建时间 |
| update_user | VARCHAR | 64 | NOT NULL | 更新人 |
| update_time | DATETIME | - | NOT NULL | 更新时间 |
| version | INT | - | NOT NULL | 版本,从1累加 |
| deleted | TINYINT | - | NOT NULL | 未删除0、已删除1 |
索引:
- PRIMARY KEY (id)
- KEY idx_module_id (module_id)
- KEY idx_parent_id (parent_id)
- UNIQUE KEY uk_module_menu_code (module_id, menu_code)
说明:菜单属于模块,一个模块包含多个菜单。菜单支持用户自定义名称和图标配置(通过租户菜单表覆盖)。
4. 按钮元数据表 (button_metadata)
| 字段名 | 类型 | 长度 | 是否为空 | 说明 |
|---|---|---|---|---|
| id | BIGINT | - | NOT NULL | 业务主键ID |
| menu_id | BIGINT | - | NOT NULL | 所属菜单ID |
| button_code | VARCHAR | 64 | NOT NULL | 按钮编码 |
| button_name | VARCHAR | 256 | NOT NULL | 按钮名称 |
| button_description | VARCHAR | 256 | NULL | 按钮描述 |
| button_icon | VARCHAR | 256 | NULL | 按钮图标(默认) |
| button_type | VARCHAR | 32 | NULL | 按钮类型(ADD/EDIT/DELETE/QUERY等) |
| button_sequence | INT | - | NULL | 排序 |
| enable_status | VARCHAR | 32 | NOT NULL | 按钮状态(ON/OFF) |
| create_user | VARCHAR | 64 | NOT NULL | 创建人 |
| create_time | DATETIME | - | NOT NULL | 创建时间 |
| update_user | VARCHAR | 64 | NOT NULL | 更新人 |
| update_time | DATETIME | - | NOT NULL | 更新时间 |
| version | INT | - | NOT NULL | 版本,从1累加 |
| deleted | TINYINT | - | NOT NULL | 未删除0、已删除1 |
索引:
- PRIMARY KEY (id)
- KEY idx_menu_id (menu_id)
- UNIQUE KEY uk_menu_button_code (menu_id, button_code)
说明:按钮属于菜单,一个菜单包含多个按钮。
5. API元数据表 (api_metadata)
| 字段名 | 类型 | 长度 | 是否为空 | 说明 |
|---|---|---|---|---|
| id | BIGINT | - | NOT NULL | 业务主键ID |
| module_id | BIGINT | - | NOT NULL | 模块ID |
| api_code | VARCHAR | 64 | NOT NULL | API编码 |
| api_name | VARCHAR | 256 | NOT NULL | API名称 |
| api_description | VARCHAR | 256 | NULL | API描述 |
| api_url | VARCHAR | 256 | NOT NULL | API路径 |
| api_method | VARCHAR | 32 | NOT NULL | HTTP方法(GET/POST/PUT/DELETE) |
| api_type | VARCHAR | 32 | NULL | API类型(PUBLIC/PRIVATE) |
| enable_status | VARCHAR | 32 | NOT NULL | API状态(ON/OFF) |
| create_user | VARCHAR | 64 | NOT NULL | 创建人 |
| create_time | DATETIME | - | NOT NULL | 创建时间 |
| update_user | VARCHAR | 64 | NOT NULL | 更新人 |
| update_time | DATETIME | - | NOT NULL | 更新时间 |
| version | INT | - | NOT NULL | 版本,从1累加 |
| deleted | TINYINT | - | NOT NULL | 未删除0、已删除1 |
索引:
- PRIMARY KEY (id)
- KEY idx_module_id (module_id)
- UNIQUE KEY uk_module_api_code (module_id, api_code)
- KEY idx_api_url_method (api_url, api_method)
说明:API属于模块,一个模块包含多个API。
6. 实体表 (entity)
| 字段名 | 类型 | 长度 | 是否为空 | 说明 |
|---|---|---|---|---|
| id | BIGINT | - | NOT NULL | 业务主键ID |
| entity_code | VARCHAR | 64 | NOT NULL | 实体编码 |
| entity_name | VARCHAR | 256 | NOT NULL | 实体名称 |
| entity_description | VARCHAR | 256 | NULL | 实体描述 |
| entity_type | VARCHAR | 32 | NULL | 实体类型 |
| table_name | VARCHAR | 128 | NULL | 对应数据库表名 |
| enable_status | VARCHAR | 32 | NOT NULL | 实体状态(ON/OFF) |
| create_user | VARCHAR | 64 | NOT NULL | 创建人 |
| create_time | DATETIME | - | NOT NULL | 创建时间 |
| update_user | VARCHAR | 64 | NOT NULL | 更新人 |
| update_time | DATETIME | - | NOT NULL | 更新时间 |
| version | INT | - | NOT NULL | 版本,从1累加 |
| deleted | TINYINT | - | NOT NULL | 未删除0、已删除1 |
索引:
- PRIMARY KEY (id)
- UNIQUE KEY uk_entity_code (entity_code)
- KEY idx_table_name (table_name)
说明:实体是业务对象的基础,可以关联到多个租户,一个租户可以包含多个实体。
7. 表单表 (form)
| 字段名 | 类型 | 长度 | 是否为空 | 说明 |
|---|---|---|---|---|
| id | BIGINT | - | NOT NULL | 业务主键ID |
| entity_id | BIGINT | - | NOT NULL | 实体ID |
| form_code | VARCHAR | 64 | NOT NULL | 表单编码 |
| form_name | VARCHAR | 256 | NOT NULL | 表单名称 |
| form_description | VARCHAR | 256 | NULL | 表单描述 |
| form_type | VARCHAR | 32 | NULL | 表单类型(ADD/EDIT/QUERY等) |
| form_dsl | TEXT | - | NULL | 表单DSL配置(JSON格式) |
| enable_status | VARCHAR | 32 | NOT NULL | 表单状态(ON/OFF) |
| create_user | VARCHAR | 64 | NOT NULL | 创建人 |
| create_time | DATETIME | - | NOT NULL | 创建时间 |
| update_user | VARCHAR | 64 | NOT NULL | 更新人 |
| update_time | DATETIME | - | NOT NULL | 更新时间 |
| version | INT | - | NOT NULL | 版本,从1累加 |
| deleted | TINYINT | - | NOT NULL | 未删除0、已删除1 |
索引:
- PRIMARY KEY (id)
- KEY idx_entity_id (entity_id)
- UNIQUE KEY uk_entity_form_code (entity_id, form_code)
说明:表单属于实体,一个实体包含多个表单(如新增表单、编辑表单等)。
8. 子表单表 (sub_form)
| 字段名 | 类型 | 长度 | 是否为空 | 说明 |
|---|---|---|---|---|
| id | BIGINT | - | NOT NULL | 业务主键ID |
| form_id | BIGINT | - | NOT NULL | 所属表单ID |
| sub_form_code | VARCHAR | 64 | NOT NULL | 子表单编码 |
| sub_form_name | VARCHAR | 256 | NOT NULL | 子表单名称 |
| sub_form_description | VARCHAR | 256 | NULL | 子表单描述 |
| sub_form_dsl | TEXT | - | NULL | 子表单DSL配置(JSON格式) |
| sub_form_sequence | INT | - | NULL | 排序 |
| enable_status | VARCHAR | 32 | NOT NULL | 子表单状态(ON/OFF) |
| create_user | VARCHAR | 64 | NOT NULL | 创建人 |
| create_time | DATETIME | - | NOT NULL | 创建时间 |
| update_user | VARCHAR | 64 | NOT NULL | 更新人 |
| update_time | DATETIME | - | NOT NULL | 更新时间 |
| version | INT | - | NOT NULL | 版本,从1累加 |
| deleted | TINYINT | - | NOT NULL | 未删除0、已删除1 |
索引:
- PRIMARY KEY (id)
- KEY idx_form_id (form_id)
- UNIQUE KEY uk_form_sub_form_code (form_id, sub_form_code)
说明:子表单属于表单,一个表单包含多个子表单。
9. 字段表 (field)
| 字段名 | 类型 | 长度 | 是否为空 | 说明 |
|---|---|---|---|---|
| id | BIGINT | - | NOT NULL | 业务主键ID |
| form_id | BIGINT | - | NOT NULL | 所属表单ID |
| field_code | VARCHAR | 64 | NOT NULL | 字段编码 |
| field_name | VARCHAR | 256 | NOT NULL | 字段名称 |
| field_description | VARCHAR | 256 | NULL | 字段描述 |
| field_type | VARCHAR | 32 | NOT NULL | 字段类型(STRING/INT/DECIMAL/DATETIME等) |
| field_length | INT | - | NULL | 字段长度 |
| is_required | TINYINT | - | NULL | 是否必填(0-否,1-是) |
| is_unique | TINYINT | - | NULL | 是否唯一(0-否,1-是) |
| default_value | VARCHAR | 256 | NULL | 默认值 |
| field_sequence | INT | - | NULL | 排序 |
| enable_status | VARCHAR | 32 | NOT NULL | 字段状态(ON/OFF) |
| create_user | VARCHAR | 64 | NOT NULL | 创建人 |
| create_time | DATETIME | - | NOT NULL | 创建时间 |
| update_user | VARCHAR | 64 | NOT NULL | 更新人 |
| update_time | DATETIME | - | NOT NULL | 更新时间 |
| version | INT | - | NOT NULL | 版本,从1累加 |
| deleted | TINYINT | - | NOT NULL | 未删除0、已删除1 |
索引:
- PRIMARY KEY (id)
- KEY idx_form_id (form_id)
- UNIQUE KEY uk_form_field_code (form_id, field_code)
说明:字段属于表单,一个表单包含多个字段。
10. 视图表 (view)
| 字段名 | 类型 | 长度 | 是否为空 | 说明 |
|---|---|---|---|---|
| id | BIGINT | - | NOT NULL | 业务主键ID |
| entity_id | BIGINT | - | NOT NULL | 实体ID |
| view_code | VARCHAR | 64 | NOT NULL | 视图编码 |
| view_name | VARCHAR | 256 | NOT NULL | 视图名称 |
| view_description | VARCHAR | 256 | NULL | 视图描述 |
| view_type | VARCHAR | 32 | NULL | 视图类型(LIST/DETAIL/SEARCH等) |
| view_dsl | TEXT | - | NOT NULL | 视图DSL配置(JSON格式,页面渲染DSL) |
| enable_status | VARCHAR | 32 | NOT NULL | 视图状态(ON/OFF) |
| create_user | VARCHAR | 64 | NOT NULL | 创建人 |
| create_time | DATETIME | - | NOT NULL | 创建时间 |
| update_user | VARCHAR | 64 | NOT NULL | 更新人 |
| update_time | DATETIME | - | NOT NULL | 更新时间 |
| version | INT | - | NOT NULL | 版本,从1累加 |
| deleted | TINYINT | - | NOT NULL | 未删除0、已删除1 |
索引:
- PRIMARY KEY (id)
- KEY idx_entity_id (entity_id)
- UNIQUE KEY uk_entity_view_code (entity_id, view_code)
说明:视图属于实体,一个实体包含多个视图。视图包含页面渲染的DSL,支持用户自定义配置。
租户与元数据关联表
11. 租户应用关联表 (tenant_application)
| 字段名 | 类型 | 长度 | 是否为空 | 说明 |
|---|---|---|---|---|
| id | BIGINT | - | NOT NULL | 业务主键ID |
| tenant_id | BIGINT | - | NOT NULL | 租户ID |
| app_id | BIGINT | - | NOT NULL | 应用ID |
| app_name | VARCHAR | 256 | NULL | 应用名称(冗余,便于查询) |
| enable_status | VARCHAR | 32 | NOT NULL | 关联状态(ON/OFF) |
| create_user | VARCHAR | 64 | NOT NULL | 创建人 |
| create_time | DATETIME | - | NOT NULL | 创建时间 |
| update_user | VARCHAR | 64 | NOT NULL | 更新人 |
| update_time | DATETIME | - | NOT NULL | 更新时间 |
| version | INT | - | NOT NULL | 版本,从1累加 |
| deleted | TINYINT | - | NOT NULL | 未删除0、已删除1 |
索引:
- PRIMARY KEY (id)
- KEY idx_tenant_id (tenant_id)
- KEY idx_app_id (app_id)
- UNIQUE KEY uk_tenant_app (tenant_id, app_id)
说明:租户与应用多对多关联,一个租户可以包含多个应用,一个应用可以应用到多个租户。
12. 租户实体关联表 (tenant_entity)
| 字段名 | 类型 | 长度 | 是否为空 | 说明 |
|---|---|---|---|---|
| id | BIGINT | - | NOT NULL | 业务主键ID |
| tenant_id | BIGINT | - | NOT NULL | 租户ID |
| entity_id | BIGINT | - | NOT NULL | 实体ID |
| entity_name | VARCHAR | 256 | NULL | 实体名称(冗余,便于查询) |
| enable_status | VARCHAR | 32 | NOT NULL | 关联状态(ON/OFF) |
| create_user | VARCHAR | 64 | NOT NULL | 创建人 |
| create_time | DATETIME | - | NOT NULL | 创建时间 |
| update_user | VARCHAR | 64 | NOT NULL | 更新人 |
| update_time | DATETIME | - | NOT NULL | 更新时间 |
| version | INT | - | NOT NULL | 版本,从1累加 |
| deleted | TINYINT | - | NOT NULL | 未删除0、已删除1 |
索引:
- PRIMARY KEY (id)
- KEY idx_tenant_id (tenant_id)
- KEY idx_entity_id (entity_id)
- UNIQUE KEY uk_tenant_entity (tenant_id, entity_id)
说明:租户与实体多对多关联,一个租户可以包含多个实体,一个实体可以应用到多个租户。
实体与引擎关联表
13. 实体流程关联表 (entity_workflow)
| 字段名 | 类型 | 长度 | 是否为空 | 说明 |
|---|---|---|---|---|
| id | BIGINT | - | NOT NULL | 业务主键ID |
| tenant_id | BIGINT | - | NOT NULL | 租户ID |
| entity_id | BIGINT | - | NOT NULL | 实体ID |
| workflow_code | VARCHAR | 64 | NOT NULL | 流程编码 |
| workflow_name | VARCHAR | 256 | NULL | 流程名称 |
| workflow_config | TEXT | - | NULL | 流程配置(JSON格式,包含实体属性匹配条件) |
| match_condition | TEXT | - | NULL | 匹配条件(JSON格式,基于实体属性) |
| workflow_sequence | INT | - | NULL | 优先级排序 |
| enable_status | VARCHAR | 32 | NOT NULL | 关联状态(ON/OFF) |
| create_user | VARCHAR | 64 | NOT NULL | 创建人 |
| create_time | DATETIME | - | NOT NULL | 创建时间 |
| update_user | VARCHAR | 64 | NOT NULL | 更新人 |
| update_time | DATETIME | - | NOT NULL | 更新时间 |
| version | INT | - | NOT NULL | 版本,从1累加 |
| deleted | TINYINT | - | NOT NULL | 未删除0、已删除1 |
索引:
- PRIMARY KEY (id)
- KEY idx_tenant_id (tenant_id)
- KEY idx_entity_id (entity_id)
- KEY idx_workflow_code (workflow_code)
说明:实体与流程引擎多对多关联,一个实体可以应用多个流程,根据实体属性进行配置匹配。
14. 实体规则关联表 (entity_rule)
| 字段名 | 类型 | 长度 | 是否为空 | 说明 |
|---|---|---|---|---|
| id | BIGINT | - | NOT NULL | 业务主键ID |
| tenant_id | BIGINT | - | NOT NULL | 租户ID |
| entity_id | BIGINT | - | NOT NULL | 实体ID |
| rule_code | VARCHAR | 64 | NOT NULL | 规则编码 |
| rule_name | VARCHAR | 256 | NULL | 规则名称 |
| rule_config | TEXT | - | NULL | 规则配置(JSON格式,包含实体属性匹配条件) |
| match_condition | TEXT | - | NULL | 匹配条件(JSON格式,基于实体属性) |
| rule_sequence | INT | - | NULL | 优先级排序 |
| enable_status | VARCHAR | 32 | NOT NULL | 关联状态(ON/OFF) |
| create_user | VARCHAR | 64 | NOT NULL | 创建人 |
| create_time | DATETIME | - | NOT NULL | 创建时间 |
| update_user | VARCHAR | 64 | NOT NULL | 更新人 |
| update_time | DATETIME | - | NOT NULL | 更新时间 |
| version | INT | - | NOT NULL | 版本,从1累加 |
| deleted | TINYINT | - | NOT NULL | 未删除0、已删除1 |
索引:
- PRIMARY KEY (id)
- KEY idx_tenant_id (tenant_id)
- KEY idx_entity_id (entity_id)
- KEY idx_rule_code (rule_code)
说明:实体与规则引擎多对多关联,一个实体可以应用多个规则,根据实体属性进行配置匹配。
设计说明
元数据分层关系:
- 应用 → 模块 → 菜单 → 按钮
- 应用 → 模块 → API
- 实体 → 表单 → 子表单 → 字段
- 实体 → 视图
租户关联:
- 应用与租户多对多关联
- 实体与租户多对多关联
- 其他元数据通过应用/实体间接关联租户
资源模型基于元数据:
- 租户菜单表(tenant_menu)基于菜单元数据(menu_metadata)
- 租户按钮表(tenant_button)基于按钮元数据(button_metadata)
- 支持用户自定义名称、图标等配置
引擎关联:
- 实体支持与流程引擎、规则引擎多实例关联
- 通过实体属性配置匹配条件
- 支持优先级排序
DSL配置:
- 表单、子表单、视图支持DSL配置
- 视图DSL用于页面渲染,支持用户自定义