Files
junhong_cmp_fiber/openspec/changes/archive/2026-08-10-fix-iccid-uniqueness-migration/design.md
break f15a64395f
All checks were successful
构建并部署到测试环境(无 SSH) / build-and-deploy (push) Successful in 8m30s
修复反馈
2026-08-10 16:30:38 +08:00

1.9 KiB
Raw Blame History

Context

见 proposal.md。000178 在版本 140 之后尚未应用于生产库;其迁移前校验和唯一索引均把所有 iccid_19 纳入唯一范围与双列模型中“20 位卡以完整 iccid_20 识别”的语义冲突。

Goals / Non-Goals

Goals:

  • 在测试环境验证版本 140 生产库所需的 ICCID 索引语义。
  • 为两种 ICCID 长度分别建立正确的唯一性约束。
  • 保持查询索引名称与现有代码兼容。

Non-Goals:

  • 不清理、合并或修改现有卡数据。
  • 不改变 ICCID 查询接口或导入逻辑。

Decisions

将 000178 的唯一范围限定为对应原始长度

iccid_19 冲突扫描和唯一索引增加 length(iccid) = 19iccid_20 冲突扫描和唯一索引增加 length(iccid) = 20

直接修正 000178而不是新增后续迁移生产库仍位于版本 140必须能连续执行历史链路新增迁移无法绕过 000178 的失败。该文件尚未在生产应用,变更需在上线前完成仓库内所有消费方同步。

保留双列格式校验

保留对 19/20 位原始值与派生列对应关系的校验,避免仅放宽唯一索引而掩盖错误回填。

Risks / Trade-offs

  • [测试库已处于更高迁移版本] → 直接按修正后的 000178 谓词定向重建两个索引并核对结果。
  • [其他环境已经执行旧版 000178] → 迁移内容不会自动重放;上线前以索引定义核对并按同一谓词重建。
  • [错误编辑已发布迁移] → 仅限生产首次执行前的本次兼容修正,发布说明记录文件校验值。

Migration Plan

  1. 在测试环境停止卡写入后,按修正后的 000178 谓词定向重建两个 ICCID 唯一索引。
  2. 验证两个索引均为唯一索引且谓词按原始 ICCID 长度限定,并执行 19/20 位重复组检查。
  3. 测试完成后保留修正后的索引;不对生产库执行迁移或验证操作。