数据字段不够用,通常不是字段本身太少,而是当初把“展示什么”当成了“存什么”。扩展时先判断一件事:新需求是旧字段含义变了,还是旧字段装不下新信息。前者适合迁移语义,后者适合新增字段并保留旧值,两条路的改动范围完全不同。
第一种解释是模型从一开始就错了。比如把地址写成单个文本字段,后来要按城市筛选、按区域统计,才发现无法拆开。第二种解释是需求在增长。比如原来只记录订单状态,现在需要记录每次状态变化的时间和操作人。前者需要重构,后者只需追加。
区分两者的证据很具体:看旧数据在新需求下是否仍然成立。如果旧地址字段里的内容无法可靠拆成省市区,说明模型确实不够用;如果旧状态值仍然有效,只是缺少变化记录,说明追加一张关联表就能解决。这个判断决定了下一步是改结构还是加结构。
扩展之前,把现有字段分成三类:仍在使用且含义稳定的、仍在使用但含义模糊的、已无人读取的。第三类不要急着删,先确认没有页面、接口或导出任务在依赖它。一个实际动作是导出最近一批真实数据,逐字段检查空值比例和取值分布。如果某个字段大量为空或取值高度集中,它很可能不是设计不足,而是从未被正确填写。
这个动作的结果会直接影响下一步:若字段本身有效但填写率低,问题在录入环节,扩展字段只会增加更多空值;若字段取值已经超出原设计假设,比如枚举值被硬塞进备注字段,才需要正式扩展。
能新增就不要改写。新增字段、新增关联表、新增状态记录,通常比修改旧字段类型更安全。旧字段保留原值,新字段承接新信息,页面按需读取两者。这样旧内容、旧接口和旧合作关系仍然可以继续工作,退出或迁移可以分阶段进行。
需要改写时,先明确适用条件:只有当旧字段确实无法承载新含义,并且所有读取方都能同步调整,才考虑迁移。迁移前保留一份旧值快照,迁移后验证页面展示、筛选和导出是否一致。假设一个商品表原本只有一个价格字段,后来需要区分原价和促销价,直接改原字段会让历史订单失去依据;新增促销价字段并保留原价,历史订单仍可解释,新页面则读取两个字段做展示。这是假设例子,用于说明比较方法,不代表任何具体系统的实现。
反过来,如果扩展后旧页面开始报错、导出结果对不上、同一含义出现两个字段各写一半,说明扩展方式选错了。此时应回退到新增方案,而不是继续在旧字段上打补丁。
字段扩展往往伴随旧内容、旧系统或旧合作关系的退出。保留仍然有价值的部分,比如历史数据、旧接口的只读能力、旧页面的展示逻辑;退出已经无法维护的部分,比如在备注字段里拼装结构化信息的做法。判断标准不是新旧,而是这个字段是否还有明确的读取方和维护方。
如果两者都不存在,它可以进入冻结状态,而不是立刻删除。冻结意味着不再写入、不再依赖,但保留可查。这样既不会让旧数据丢失,也不会让新设计继续背负模糊字段。扩展完成后,把新增字段的写入规则、读取范围和退出条件写清楚,下一次字段不够用时,才有依据判断是继续追加还是重新设计。