先给结论:如果旧字段仍要保留历史数据、且新需求只是补充属性,优先做“加字段+兼容读写”;如果旧结构本身把一类业务塞进了错误粒度,比如把多规格产品压成一个文本字段,那么继续加列只会让后续每次改版都更痛,此时应新建扩展表或独立内容类型,再做一次性迁移。判断依据不是“字段够不够多”,而是新增数据是否与旧记录一一对应、旧记录能否在不改语义的前提下补空值。
第一种条件:新增信息与原有记录保持一对一关系。例如企业站原来只存“联系人姓名、电话”,上线后市场部希望每个联系人再记录“所属部门、可联系时段”。这类字段对每条旧记录最多填一个值,旧数据留空也不影响前台展示。此时直接增加可空字段最省事,表单、列表和详情页按需读取即可。
第二种条件:新增信息与原有记录是一对多关系。例如原来“产品”只有一段参数描述,上线后要拆成规格名、规格值、单位、排序,且一个产品有多组规格。若继续在旧表加“规格1、规格2、规格3”,很快就会遇到规格数量不固定、查询和排序困难的问题。这时应新建规格表,用产品ID关联,旧描述字段暂时保留作为过渡展示。
可核对的证据是:拿三条真实旧记录,尝试用新字段填写。如果每条都只需填一次,属于第一种;如果同一条记录需要重复填写同一组字段,且重复次数不确定,属于第二种。这个检查动作会直接决定下一步是改表还是建新表。
确定要加字段后,实施顺序建议如下:
这个动作的结果是:旧页面不会因为字段扩展立刻出错,新录入的数据又能进入新结构。下一步才有条件做数据清洗和模板切换。若跳过兼容读写,直接改字段名或删除旧列,旧记录会丢失展示依据,回滚成本远高于多加一个可空列。
出现以下信号时,加字段是在拖延问题:同一类信息已经出现三组以上带编号的字段,例如“卖点1、卖点2、卖点3”;运营人员需要反复复制粘贴同一组结构;查询时需要把多个字段拼起来才能还原一条业务记录。这些信号说明数据粒度错了,应改为独立内容类型或子表。
例外是:如果网站只是内部展示、记录量很小、且没有筛选和统计需求,继续用文本字段也能维持。但一旦要按规格筛选、按部门统计或对外接口输出,文本字段的维护成本会迅速超过迁移成本。此时新建结构并做一次性映射,比逐条修补更可控。
假设某企业站产品表只有description一个长文本字段,里面写着“尺寸:A;材质:B;颜色:C”。上线后要按材质筛选。若直接在原表加material字段,旧产品仍要从描述里人工摘取,且一个产品多材质时无法表达。更稳妥的做法是新建product_spec表,字段为产品ID、规格名、规格值、排序,再把旧描述保留为“补充说明”。迁移时先只迁移能明确拆分的记录,无法拆分的继续展示原文。这样筛选功能可以先对新数据生效,旧数据逐步补齐,而不是等全部清洗完才上线。
这三项验证通过后,再考虑是否把旧字段下线。若验证中发现旧记录大量缺失新字段所需信息,说明迁移范围应缩小,先保证新数据质量,而不是强行补全历史数据。