答案不是“全保留”或“全砍掉”,而是先判断每个字段缺失后,哪个下游动作会失败。如果一个字段删除后,订单仍能发货、对账仍能闭环、客服仍能定位问题,它就可以不进入新库;反之,即使使用频率很低,也要保留或做替代映射。最容易出错的地方是:字段在旧系统里长期为空,看起来没有价值,但它可能承担着异常处理或审计线索。
迁移评审时,团队常把“空值率高”当成删除理由。假设旧客户表里有一个“原销售归属”字段,抽样一千条记录,九百条为空。按直觉,这个字段不值得迁。但上线后客服发现,少数投诉客户需要追溯当初由谁承诺过特殊条款,而新系统只保留了当前归属。问题不是字段本身常用,而是它决定了争议发生时的查找路径。
反过来,也有字段看起来重要却可以放弃。例如旧系统里的“页面显示顺序”,如果新方案已经改为按发布时间排序,这个数字只影响旧前台,不参与业务判断,保留它只会增加录入负担。判断关键不在字段名,而在它是否影响状态变化、金额计算、权限判断或对外承诺。
当迁移后出现异常,通常有两种解释。第一种是数据解释:旧库里的值本身不完整、格式混乱或存在多套编码,迁入后无法还原原意。第二种是流程解释:字段值其实完整,但新流程不再产生或不再读取它,导致原本依赖该字段的环节失效。两者表现相似,处理方式完全不同。
如果是数据问题,补历史值或建立映射表可能有效;如果是流程问题,补数据也没用,因为新系统根本不会在正确时机写入。比如旧系统要求每张工单填写“故障分类”,新系统改成标签,标签可以多选。此时不是把旧分类硬塞进标签,而是确认新流程里谁负责打标签、打错后谁复核。字段保留项应跟着责任动作走,而不是跟着旧表结构走。
要区分数据问题和流程问题,可以查三类证据。第一类是非空值分布:同一字段在旧库里是否集中在某些时间段、某些操作人或某些业务类型。如果集中,说明它可能只服务特定场景,不能按全局空值率判断。第二类是写入路径:在新方案里找出谁、在哪个步骤、因为什么动作会写入这个字段。如果找不到写入路径,保留它也只是静态历史。第三类是读取路径:列出哪些页面、报表、接口或人工决策会读取它。读取路径比字段名更能说明保留价值。
一个可操作的动作是建立“字段—动作”对照表。每行写字段名、旧系统里的写入动作、新系统里对应的动作、如果不迁会导致哪个具体动作失败。做完后,把“会导致动作失败”的字段标为保留候选,把“只影响历史查看”的字段标为归档候选,把“既无写入也无读取”的字段标为删除候选。这个动作的结果会直接决定下一步:保留候选进入映射设计,归档候选进入只读历史库,删除候选不再进入迁移脚本。
第一层是硬保留:字段缺失会导致金额算错、权限越界、订单状态无法推进或对外承诺无法追溯。这类字段即使旧值质量差,也要先迁入并标记可信度,不能直接丢弃。第二层是条件保留:字段只在特定业务线、特定合同类型或特定异常流程中使用。此时可以按条件迁移,例如只迁入近两年仍可能产生争议的记录,并保留原值来源。第三层是归档不迁:字段只用于旧页面展示、旧报表格式或已停止的统计口径。把它们留在只读历史库,比塞进新主库更安全。
假设一个旧系统有“客户等级”字段,取值是A、B、C,但新方案改用积分区间。直接迁移字母等级会制造两套标准。更合理的做法是:先确认新流程是否还需要人工调整等级。如果需要,保留一个“人工覆盖等级”字段,并记录调整人和原因;如果不需要,只把旧等级作为历史属性归档。这个例子的数字和取值仅用于说明比较方法,不代表任何真实系统。
一旦保留项确定,不要立刻全量导入。先选一条完整业务链路做验证:从旧记录读取、映射、写入新库,再到新页面或接口读取,最后触发一次实际动作,例如生成对账单或发出通知。验证时要记录哪些字段为空、哪些字段被默认值填充、哪些字段在读取时被忽略。如果默认值填充后业务动作仍能完成,说明该字段可以降级为可选;如果动作失败,说明它应回到硬保留层。
最终判断标准可以压缩成一句话:保留一个字段,是因为它改变了某个后续动作的结果;删除一个字段,是因为没有它,后续动作仍能闭环且争议可查。按这个标准做决定,迁移范围会更小,但关键链路更稳。