跳到主要内容

System:映射约定与实测差异

公共字段与映射规则​

本服务 32 个 MySQL DO 均继承 BaseDO,其中 7 个经 TenantBaseDO 增加租户字段。各业务域表格已展开继承字段;此处集中记录证据与边界。

来源字段及 Java 类型注解 / 行号
BaseDOcreateTime: LocalDateTimeINSERT 填充,30
BaseDOupdateTime: LocalDateTimeINSERT_UPDATE 填充,35
BaseDOcreator: StringINSERT、JdbcType.VARCHAR,42
BaseDOupdater: StringINSERT_UPDATE、JdbcType.VARCHAR,49
BaseDOdeleted: Boolean@TableLogic,54
TenantBaseDOtenantId: Long19

BaseDO:ik_project/yudao-cloud/yudao-framework/yudao-spring-boot-starter-mybatis/src/main/java/cn/iocoder/yudao/framework/mybatis/core/dataobject/BaseDO.java:24。

TenantBaseDO:ik_project/yudao-cloud/yudao-framework/yudao-spring-boot-starter-biz-tenant/src/main/java/cn/iocoder/yudao/framework/tenant/core/db/TenantBaseDO.java:14。

配置 doc/数据库设计管理/nacos/application-common.yaml:216 开启下划线转驼峰。本文 SQL 字段按该约定映射;id-type: NONE 位于 220 行,不能仅据此或 KeySequence 注解推定 AUTO_INCREMENT。真实列型、默认值、主键、自增以实测字典为准。

JSON 集合与 Map 字段的 JacksonTypeHandler 表示序列化策略,并不等价于数据库 JSON 类型。比如实库中实际存储可以是 varchar。BaseDO 的 TransPojo 接口提供翻译能力,不额外声明 trans_map 列。静态常量不计入列;VisitMinuteDO 不继承上述审计字段。

租户拦截与继承不同。 TenantDatabaseInterceptor.java:39(位于上述 tenant/core/db 目录)按上下文和 ignoreTables 决定 SQL 是否注入租户条件,不以 DO 是否继承 TenantBaseDO 为判据。因此实库存在 DO 未显式声明的 tenant_id 并不能直接认定列无用或失配;见差异清单。

返回 System 总览

代码与实际结构对照​

核验时间:MySQL 2026-09-18T12:51:14.474650+00:00,TDengine 2026-09-18T12:51:31.419241+00:00(均为 UTC)。本次主代理通过独立只读采集器读取元数据,未读业务记录。结果是该测试实例当时的结构,不代表所有部署环境。

MySQL 8.0.35 的 ik_yudao_system 有 32 张表、472 列、35 个索引、0 个物理外键;32 个源码 MySQL 对象全部找到,对象级遗漏 0 个、额外对象 0 个。所有源码映射字段均存在,实库另外有 13 个未由对应 DO 声明的列。

完整列型、长度、可空性、默认值、注释、索引、约束见MySQL 实测字典;TDengine 实测字典记录超级表结构与子表数量。临时原始证据文件名为 mysql-ik_yudao_system.json 和 tdengine-monitor.json,不以临时路径作为站点链接。

逐对象覆盖​

表源码列数(含继承)实库列数源码缺失于实库实库额外列
system_dept1414无无
system_post1112无tenant_id
system_user_post89无tenant_id
system_dict_data1414无无
system_dict_type1111无无
system_login_log1415无tenant_id
system_operate_log1820无success、tenant_id
system_mail_account1313无无
system_mail_log2121无无
system_mail_template1515无无
system_notice1011无tenant_id
system_notify_message1617无tenant_id
system_notify_template1414无无
system_oauth2_access_token1515无无
system_oauth2_approve1213无tenant_id
system_oauth2_client2121无无
system_oauth2_code1415无tenant_id
system_oauth2_refresh_token1313无无
system_menu1919无无
system_role1515无无
system_role_menu99无无
system_user_role89无tenant_id
system_sms_channel1313无无
system_sms_code1415无tenant_id
system_sms_log2727无无
system_sms_template1616无无
system_social_client1414无无
system_social_user_bind1011无tenant_id
system_social_user1516无tenant_id
system_tenant1515无无
system_tenant_package1010无无
system_users2020无无

额外 tenant_id 为 12 张表各一列,需结合租户 SQL 拦截器解释,不能据此删除。另有 system_operate_log.success:实库列存在,当前 OperateLogDO 不声明该字段,不能声称当前实体写入操作成功状态。

索引与约束​

所有 32 张表均有 PRIMARY(id) BTREE 主键。除此之外仅采集到以下三个非唯一索引:

表索引列唯一性
system_oauth2_access_tokenidx_access_tokenaccess_token非唯一
system_oauth2_access_tokenidx_refresh_tokenrefresh_token非唯一
system_sms_codeidx_mobilemobile非唯一

未采集到物理外键、其他唯一索引。用户名、角色编码、模板编码、租户名等“唯一”注释属于业务约束描述,不能改写为数据库唯一约束。文档所列实体关联均为逻辑关联。

其他差异与未核验边界​

  • system-server.yaml:15 引用 datasource.td_api_visit,但提供的 datasource.yaml 无该项;td_server_monitor 是另一数据源,不能替代前者。统一采集沿用同一测试 TD 实例的已有连接信息,额外读取 SQL 明确使用的 monitor 库;成功不证明服务有效配置已补齐。
  • monitor.visit_minute 实测存在,12 个结构字段,含 2 个 TAG;20 个子表,无普通表。DO 中 tbname 为伪列/动态表名语义,不能按普通实体字段要求实库拥有 tbname 列。
  • Redis 只核对源码与导出的连接配置;未读取 Redis key、值或 TTL。微信 SDK 生成的内部 key 结构未从第三方依赖反编译,列为框架管理范围。
  • 本服务源码未找到 ES 索引实体、ES Mapper 或独立动态 MySQL 表规则;这只说明当前服务直接访问边界,不表示共享 ES 实例为空。
  • 本次未启动 Spring、未编译、未执行单元/集成/UI 测试;不据结构采集推断运行期路由和业务调用成功。

返回 System 总览

用户文档
AI 助手
Agent 列表
请选择一个 Agent 开始对话
AI 问答