01 · DATA MODELINGP011 MIN
数据库 Migration
让表结构变化可审查、可排序、可部署,并兼容正在运行的旧代码。
MENTAL MODELSCHEMA EVOLUTION
01Expand 新结构
→02双写 / 回填
→03切换读取
→04Contract 旧结构
先把概念与边界说清楚
定义告诉你它是什么,边界告诉你它不负责什么;企业系统最常见的误解通常发生在两者混用时。
Migration
记录一次有顺序的结构或数据变化,例如建表、加列、回填和加约束。
Expand / Migrate / Contract
先添加兼容结构,再迁移数据与流量,最后删除旧结构,避免新旧版本互相阻塞。
Data Migration
除结构外还要转换存量数据,通常需要批次、进度和可重入设计。
给订单增加 tenant_id
生产库已有百万订单,直接添加 NOT NULL 列会失败或长时间锁表。
- 01
先加可空列和索引。
- 02
按主键批次回填 tenant_id。
- 03
应用改为写入并校验新字段,最后添加 NOT NULL。
迁移期间新旧版本都可工作,并能随时暂停回填。
马上动手
- 为“订单状态字符串改枚举”写 expand/migrate/contract 三阶段。
- 列出回滚代码与回滚数据的区别。
常见坑
- 修改已发布 migration
- 部署代码前先删除旧列
- 把百万行回填做成一次同步事务
05 · KNOWLEDGE CHECK为什么 migration 已成功执行后不应直接修改文件?查看答案⌄
答案
因为不同环境已经拥有不同历史;修改旧文件会让“同名版本”代表不同事实,后续无法可靠复现或审计。