先给一个可执行的判断:把每个字段按“迁移后是否还有唯一数据来源”分成三类——有替代来源的降级为展示字段,无替代来源但影响业务闭环的升级为独立存储,既无替代来源又不影响闭环的暂存在归档表并停止写入。决定保留项的关键不是字段数量,而是这个字段消失后,哪个下游动作会立刻失败。下面以你手头的一份旧字段清单为对象,逐步走完这套判断。
旧系统里的字段名往往和实际用途脱节。比如一个叫 ext_info 的字段,可能同时存了客服备注、订单来源标记和一段手工拼接的物流信息。直接按字段名迁移会漏掉真实结构。
做法是:对每个字段,找出写入它的页面或接口,再找出读取它的页面、报表或对外接口。写入方和读取方都为空,说明它已经是死字段,可以直接不迁;只有写入没有读取,说明它被采集但从未被使用,优先考虑不迁;只有读取没有写入,说明数据来自更早的系统,需要先确认历史数据是否还在被业务引用。
这一步产出的不是结论,而是一张“字段—写入方—读取方”的对照表。它决定后面每一步的判断依据,如果这张表本身不完整,后面的取舍都会建立在错误前提上。
字段是否保留,取决于它消失后第一个失败的动作是什么。可以按下面的顺序判断:
这里常见的误判是把“有人看过”当成“必须保留”。看过不等于依赖。判断依据应当是:有没有一个程序或固定流程会因为读不到它而报错或中断。如果只是人偶尔翻看,归档即可。
旧系统常见一个字段承载多种含义,典型的是用分隔符拼接的备注字段。这种字段不能整体保留或整体放弃,需要先拆语义再决定。
假设某个 memo 字段里同时存在三类内容:客服沟通记录、渠道来源标记、人工标记的优先级。处理方式是:
拆分的依据是“这段内容是否被程序读取”,而不是它看起来是否重要。拆分后如果发现某类内容在新系统里没有任何承载位置,说明新系统的字段设计需要补一个位置,而不是硬塞回备注。
决定保留之后,还要决定它存在哪里、由谁写。这两件事没定清楚,迁移完成后的字段很快会再次变成脏数据。
可以按下面的规则分配:
一个实际动作是:在迁移脚本里为每个保留字段标注写入来源。如果某个字段找不到明确的写入方,说明它在迁移后也不会被更新,应当归入归档而不是主表。这个标注结果会直接影响下一步的验证方式——主表字段要验证写入,归档字段只需验证可读。
清单确定后,不要直接全量迁移。先按下面的方式抽样:
如果抽样中发现某个“必须保留”的字段实际上没有任何下游流程读取,应当把它降级为归档;如果某个原本打算放弃的字段导致下游流程报错,应当升级为主表字段。抽样结果修正的是保留清单本身,而不是迁移脚本的容错能力。假设某次抽样中十个字段里有三个需要调整分类,那么调整后应重新抽样,而不是直接进入全量迁移。
这套判断的适用条件是:你手里已经有旧字段清单,并且能查到字段的写入方和读取方。如果查不到读取方,说明当前系统缺少调用关系记录,此时应先补这一步,而不是凭字段名猜测保留项。