先判断一件事:现有字段是“语义错了”还是“容量不够”。如果只是缺一个可选属性,扩展通常比迁移便宜;如果多个角色对同一字段的理解已经分叉,继续加字段只会把分歧埋得更深。可行的做法是先冻结写入,把分歧整理成一份字段对照表,再决定保留、改写还是退出旧结构。
“字段不够用”常被混为一谈,但处理成本差别很大。
判别方法是抽样十条旧记录,让两个角色分别解释每个字段的含义。如果解释不一致,问题在语义;如果解释一致只是缺内容,问题在容量。这个动作的结果直接决定下一步:语义问题要先对齐定义,容量问题才适合直接加字段。
当旧字段仍被模板、订阅或外部引用依赖,而新需求只是补充信息时,保留旧字段并新增一个字段是常见选择。前提是:旧字段的语义没有被污染,只是不够用。
具体动作可以是:给旧字段加一个明确的适用范围说明,新增字段只在新内容上填写,旧内容暂不回填。结果是新旧两套数据短期并存,模板按“新字段为空则回退旧字段”的顺序读取。这样做的代价是查询和展示逻辑变复杂,收益是不必一次性改动全部历史内容,出错时可以快速退回。
如果分歧已经涉及多个角色对同一事实的不同理解,单纯并行新增会让两套解释长期共存,这时应优先考虑改写。
改写适合旧字段名仍然合理、但取值规则需要收紧的情况。关键不是改数据库,而是先把分歧转成可以核对的清单。
假设一个博客的“分类”字段,作者按主题填,运营按栏目填,于是同一篇文可能被两边填成不同结果。此时可以新建“主题”和“栏目”两个字段,把旧分类按对照表拆分。这个例子是假设的,用于说明比较方法:先看旧值能否被规则稳定拆分,再决定是否改写。如果拆分后仍有大量值无法归类,说明规则还没对齐,应暂停改写。
出现以下信号时,继续在旧字段上叠加通常不划算:同一字段被三个以上角色赋予不同含义;多值关系已经靠分隔符硬塞进单字段;每次新增需求都要改动读取逻辑。此时更合理的是新建结构,把旧数据整体迁移或只迁移仍需展示的部分。
退出的前提是能接受一段时间的展示降级或人工核对。动作上先冻结旧结构的写入,新内容只进新结构,旧内容按需迁移。结果是新旧两套在一段时间内并存,但边界清晰:新内容不再污染旧字段,旧内容只读。若无法接受并存期,就不适合退出,应回到改写路线。
无论选哪条路,先做一次范围受控的核对:取二十条旧记录,按你倾向的方案手工处理一遍,记录哪些字段填不出来、哪些值产生冲突、哪些展示需要改模板。核对结果会给出明确信号——如果大部分记录能顺利映射,扩展或改写可行;如果冲突集中在少数记录,可以单独处理例外;如果冲突普遍存在,说明字段定义本身需要重新讨论,而不是继续加字段。
把这个核对结果写成一份简短记录,注明假设、样本范围和未解决的分歧点,再据此决定保留、改写还是退出。这样做的价值不在于一次做对,而在于让下一次扩展有据可依,避免同一分歧反复出现。