5.9 KiB
5.9 KiB
评查点数据库执行说明与验证SQL
适用范围:
evaluation_points旧表 tenant 化收尾
更新日期:2026-05-21
文档定位:给 DBA / 开发 / 审核人明确“评查点 tenant_code 补列脚本”执行前看什么、执行什么、执行后怎么验。
1. 本次要执行什么
P0 当前只处理评查点旧表 evaluation_points 的数据库收尾,不涉及业务逻辑大改。
本次数据库动作只有一条主线:
- 执行前预检
- 执行补列与历史回填脚本
- 执行后验收
当前对应文件:
- 预检 SQL
- 正式脚本
- 模块收尾说明
- 预检结果判读模板
补充说明:
- 预检脚本已经兼容“旧库尚未补
tenant_code / tenant_name列”的场景 - 也就是说,正式落库前就可以先在旧环境直接执行预检,不会因为缺列而先报错
2. 为什么现在要先做数据库
当前评查点模块代码已经进入“tenant-first 兼容态”:
- 有
tenant_code / tenant_name列时,service 会优先读写它们 - 没有列时,service 仍会回退到
area
这说明:
- 代码首轮收口已经做了
- 但数据库不补字段,模块永远停留在兼容态
- 只有把旧表补成真实
tenant_code模型,后续才能继续削掉areafallback
3. 执行前必须确认的 4 件事
3.1 表结构现状
先确认目标库里的 evaluation_points 目前到底有没有:
tenant_codetenant_nameevaluation_point_groups_idevaluation_point_groups_pid
预检脚本已经包含表结构查询。
3.2 area 值分布
必须先看真实分布,不要假设只有:
梅州公共省级default
否则容易在历史脏值上翻车。
3.3 无法映射租户的残留
需要先找出:
- 别名表映射不到
- 租户名映射不到
- 也不属于
PUBLIC / PROVINCIAL兼容集合
这些记录不能在执行前忽略,否则执行后仍会留下空 tenant_code。
3.4 code 唯一性现状
这点非常关键。
当前后端 evaluationPointServiceImpl.py 里的 _ensure_code_unique() 仍是:
- 按全局
LOWER(code)查重 - 不是按
tenant_code + code查重
所以本轮数据库补列后:
- 不能立刻把“编码唯一性”切成租户内唯一
- 只能先做预检,确认是否存在未来会影响规则切换的跨租户重复编码
4. 建议执行顺序
第一步:跑预检 SQL
执行:
\i scripts/创建sql/precheck_evaluation_points_tenant_cleanup.sql
重点看 5 类输出:
area分布- 无法映射租户的残留清单
- 共享域残留统计
- alias / tenant_name 冲突
- 编码重复情况
第二步:人工确认预检结果
至少确认:
- 是否存在无法映射租户的记录
- 是否存在 alias 映射冲突
- 是否存在 tenant_name 映射冲突
- 是否存在需要特殊处理的共享域值
如果这一步没确认,不建议直接执行正式脚本。
第三步:执行正式脚本
执行:
\i scripts/创建sql/schema_evaluation_points_tenant_cleanup.sql
本脚本会:
- 补
tenant_code / tenant_name - 建 3 个基础索引
- 确保
PUBLIC / PROVINCIAL与关键 alias 存在 - 对历史
area做首轮回填
第四步:执行后验收
执行完以后,至少重新确认:
tenant_code空值数量tenant_name空值数量PUBLIC / PROVINCIAL记录数- 无法映射残留是否归零或是否仅剩人工待处理项
5. 预检 SQL 已覆盖的风险点
当前预检脚本已经覆盖:
- 当前表结构确认
- 总记录数与缺失字段数
area分布统计- 无法映射租户的记录清单
公共 / 省级 / 省局 / default / 空值残留统计sys_tenants.tenant_name冲突预检sys_tenant_aliases.alias_value冲突预检code全局重复预检- “如果以后改成租户内唯一”时的跨租户重复预检
6. 执行后验收标准
6.1 数据层
至少满足:
evaluation_points.tenant_code已存在evaluation_points.tenant_name已存在- 大部分历史数据已具备可解析
tenant_code PUBLIC / PROVINCIAL共享域记录能稳定统计
6.2 服务层联动
执行完数据库后,下一步就应马上联调:
- 列表查询
- 详情查询
- 创建评查点
- 更新评查点
- 删除评查点
目标是确认:
- 新数据会真实落
tenant_code / tenant_name - 旧数据不会因为回填而突然查不到
- 共享域查询开始优先命中标准编码
6.3 规则约束提醒
当前不要误判为“补完字段就能立刻做按租户唯一编码”。
因为当前后端仍是全局校验 code 唯一。
所以本轮数据库执行后的正确状态是:
- 评查点归属边界先 tenant 化
- 编码唯一性策略保持原行为不变
- 后续若要改成“租户内唯一”,必须单独开一轮设计和回归
7. 本轮结论
P0 当前最合理的收口方式不是直接继续改 service,而是:
- 先把旧表补成真实 tenant 字段模型
- 再联调接口
- 再削减 service 中最厚的
area兼容层
这是目前最小、最稳、最容易审计的推进顺序。