先给结论:数据字段不够用,通常不是“加几个字段”就能解决,而是要先判断这次扩展属于兼容式加字段还是结构性重建。判断依据是旧数据能否在不改写含义的前提下继续使用,以及现有页面、接口和统计逻辑是否依赖旧字段的固定位置。选错路径的代价,往往比字段本身大得多。
第一种条件:新需求只是补充信息,旧字段含义不变,旧记录可以留空或填默认值。比如商品原来只记录“材质”,现在要增加“产地”,两者互不替代。这时可以在原数据结构上追加字段,旧页面继续读取原有字段,新页面按需读取新字段。
第二种条件:新需求改变了原有字段的含义或粒度。比如原来一个“价格”字段同时承担售价和促销价,现在要拆成两个独立概念。这时继续追加字段,会让同一条记录里出现两套语义,后续查询和统计容易把不同含义的数据混在一起。更稳妥的做法是新建字段并迁移,旧字段保留只读一段时间,确认没有调用方依赖后再停用。
区分这两种条件,可以看一个信号:如果新字段和旧字段能同时存在且互不冲突,偏向兼容式;如果新字段一旦写入,旧字段的取值就变得无法解释,偏向结构性重建。
字段不够用的表象相似,原因却可能不同。可以按下面几项逐一核对,避免把展示层问题误判成数据层问题:
一个常见反常现象是:后台加了字段,前端却“没变化”。这不一定说明扩展失败,也可能是模板仍绑定旧字段、缓存未更新,或接口返回结构未同步。抓取量、请求量归零同样不能单独证明改对了,它还可能来自入口调整、权限变化或统计口径改变。先定位是哪一层没有接上,再决定下一步。
假设一个内容站点原来只记录“作者”,现在要区分“撰稿人”和“审核人”。旧记录只有作者一个值,无法判断谁审核过。
这个动作的结果是:旧页面不受影响,新页面逐步获得更细的数据。下一步该做的是检查导出和接口是否也同步了新字段,而不是急着删除旧字段。删除动作应放在确认所有调用方都已切换之后。
当字段含义被拆分或合并,且历史数据需要保持可解释时,适合走重建路径:新建结构、写迁移脚本、双写或双读一段时间、对比新旧结果一致后再切换。这里的假设是:旧数据量可控,且业务能接受一段时间的双份维护成本。
例外情况有两种。其一,旧数据本身已不可信,迁移只会把错误放大,此时更合理的做法是标记旧数据为历史存档,新数据从新结构开始。其二,字段只用于内部临时统计,没有对外展示和长期对比需求,可以直接替换,不必保留过渡期。判断标准不是“新结构更规范”,而是旧数据是否还需要被正确解释。
字段加完不等于结束。第一,检查录入端是否真的在产生新数据,空字段比例过高说明表单或流程没接上。第二,检查读取端是否覆盖了所有入口,包括列表、详情、导出和接口。第三,检查统计口径是否因字段变化而失真,必要时在报表中标注口径切换时间。把这三件事做完,再决定是否清理旧字段,比上线当天就删更稳妥。