先判断一件事:现有数据是“还能迁移”还是“已成孤岛”。如果核心业务表仍有稳定主键、字段含义清晰,扩展通常意味着加表、加关联、加中间层;如果旧字段被写进模板、接口和报表多处,且没有文档,扩展前要先做字段冻结与映射,否则越改越乱。
当后台还能正常写数据、数据库能连、业务方愿意继续用一段时间时,不必推倒重来。实际动作是:先列出“现在不够用”的字段属于哪一类——是产品属性、报价阶梯、物流时效,还是客户询盘来源。然后为每一类建独立的扩展表,用产品ID或询盘ID关联,而不是在原表上无限加列。
这样做的影响是:原表和旧页面继续工作,新字段只在新表单和新查询里出现。下一步可以按模块逐个切换,比如先让产品详情页读取扩展表,再让报价单读取,最后才动导出和统计。每切换一个模块,观察旧数据是否仍能正常显示,再决定是否继续。
假设旧产品表只有材质、尺寸、颜色、重量、起订量五个字段,现在要支持不同市场的认证、包装方式、交期区间。若直接在旧表加25列,旧编辑页面会变得难维护,导出模板也容易错位。更稳的做法是建一张产品参数扩展表,字段为产品ID、参数名、参数值、语言、排序。旧页面不动,新页面按产品ID查询扩展表。结果是旧产品仍可显示原有五项,新产品可显示完整参数。下一步再决定是否把旧五项也迁入扩展表,但那要等新页面稳定后再做。
当旧后台无法登录、源码缺失、原开发方不再响应,或者数据库结构无人能解释时,继续在原系统上扩展风险很高。此时实际动作不是“修旧”,而是导出全量数据、冻结旧库、在新数据层重建字段模型。导出后要保留原始文件,不要只保留转换后的版本。
重建时先确定最小可用字段集:哪些字段是报价、下单、发货必须用的,哪些只是展示。把必须字段放进主表,其余放进扩展表或键值表。这样做的结果是新系统上线后,旧数据可以按映射关系导入,缺失字段留空而不是编造。下一步是抽样核对,比如随机抽20条旧记录,对比新旧系统中的关键字段是否一致,再决定是否批量导入。
如果旧字段从未被任何页面、邮件或报表使用,或者含义已经失效,可以不迁。判断依据是:搜索旧代码和模板中是否出现该字段名,询问业务方是否记得用过。若两边都无证据,迁过去只会增加新系统的维护负担。例外情况是合规或财务要求保留原始记录,那就只归档不进入日常查询。
不要只看“新字段能保存”。更有用的信号是:旧页面是否仍能正常打开;新字段是否在至少一个真实业务流程中被读取;导出文件是否仍能被下游工具识别;回滚旧版本时数据是否不丢。若这些信号都正常,说明扩展没有破坏原有链路。若某个信号异常,先回到该模块的映射关系检查,而不是继续加更多字段。
扩展数据字段不是一次性的技术动作,而是对旧内容、旧系统和旧合作关系的取舍。保留仍然有价值的部分,冻结无法维护的部分,用可验证的映射关系逐步替换,才能让上线后的调整不至于变成第二次重建。