先给结论:不要按“新旧字段一一对应”来决定保留项,而要先判断字段承载的是业务状态还是历史痕迹。前者必须在新系统里找到承接方式,后者可以归档为只读记录。迁不进去的字段,通常不是技术能力问题,而是旧系统的字段语义已经和新业务流程脱节。决定保留项的正确顺序是:先确认这个字段现在还有没有业务动作依赖它,再确认迁移后谁会读它、什么时候读,最后才讨论用主表、扩展表还是附件归档来承载。
同样表现为“旧字段无法完整迁入”,背后往往是两类问题,处理方式相反。
解释一:字段本身是历史遗留,业务早已不用。这类字段常见于早期建站时随手加的备注、来源标记、内部编号。它们在新流程里没有任何判断动作依赖,只是数据库里还留着。对这类字段,保留项的正确做法是归档,而不是硬塞进新表。
解释二:字段仍被某个业务动作依赖,只是旧结构表达得不够规范。比如旧系统把“客户等级”和“结算方式”压在一个文本字段里,新系统要求拆成两个独立字段。这种情况下字段不能直接迁,但语义必须保留,否则迁移后业务会断。
两种解释的差别不在于字段多少,而在于:去掉这个字段后,是否还有业务流程会走错。
不要凭印象判断,用下面三类可核查的证据来区分。
这里有一个容易踩的坑:字段查询量归零,不能单独证明它可以删除。查询为零还可能是因为报表被停用、权限被收紧、或者大家改用了别的入口。要结合写入记录和依赖搜索一起看,而不是只看一个指标。
把候选字段分成三档,每档对应不同的保留策略。
假设一个场景:旧系统里有个“旧客户编号”字段,新系统已改用统一客户 ID。如果这个旧编号还被财务对账引用,它属于条件承接,应放进扩展表并保留索引;如果只是当年录入时留下的痕迹,没有任何下游引用,归档即可。这个判断的依据是下游是否还在用,而不是字段看起来是否重要。
具体动作是:在动迁移脚本之前,先产出一份字段依赖清单,逐字段记录三列——被哪些逻辑引用、最近写入时间、迁移后谁读取。
这份清单会直接影响下一步:依赖清单里“无引用、无近期写入、无明确读取方”的字段,可以直接进入归档流程,不再占用迁移和校验资源;而三列中任意一列有明确答案的字段,必须先确定承载表再写迁移逻辑。换句话说,清单不是文档工作,它决定了哪些字段值得花时间做值映射和校验。
如果跳过这一步直接迁移,常见结果是:把历史痕迹字段硬迁进主表,导致新表字段膨胀、校验规则互相冲突;或者反过来,把仍被对账依赖的字段当作垃圾丢掉,上线后才发现报表对不上。
保留项决策不是一次性的,它依赖两个前提:一是新业务流程已经确定,二是下游消费方已经确认。如果新流程还在调整,此时把半业务字段全部归档,后面很可能要重新补迁;如果下游消费方还没确认,把历史字段全部承接,又会给新系统留下大量无人使用的字段。
因此更稳妥的做法是:对拿不准的字段先按条件承接处理,放进独立扩展表并保持只读,等新流程稳定、消费方明确后,再决定是提升为主表字段还是彻底归档。这样既不会因为过早删除而丢数据,也不会因为过早合并而污染新结构。字段迁移的取舍,本质上是在“现在少做”和“以后返工”之间找一个可回退的位置。