先判断字段是“展示型不足”还是“结构型不足”:前者通常只影响页面呈现,可以在原表或原模型上追加可空字段;后者意味着同一实体要承载多套业务含义,继续追加字段会把查询、表单和导出逻辑拖乱。判断依据不是字段数量,而是同一字段是否被两类以上业务复用、是否出现大量空值、是否开始用拼接值承载多个含义。
如果新增需求仍描述同一对象,例如客户档案里原来只有“联系人”,现在要区分“签约联系人”和“对账联系人”,这仍属于同一实体。此时较稳妥的动作是新增可空字段,而不是改动旧字段含义。
实施时先做三件事:
这个动作的结果是:旧数据不会因为字段缺失而报错,新数据可以逐步补全。下一步要看的是空值比例和录入冲突——如果新字段长期大量为空,说明业务人员并不需要它,或入口放错了位置。
当出现“一个客户对应多个联系人”“一个产品对应多组价格”“一个订单对应多次交付”时,继续在主表加字段就会产生重复列,例如联系人1、联系人2、联系人3。这类情况不适合兼容式扩展,应拆成从表或独立内容类型。
拆分的判断证据可以看三点:
满足其中两点,就应把子项独立出来,用关联标识指回主记录。动作上先建新结构并双写,再迁移历史数据,最后切换读取来源。这样做的结果是查询和表单可以按子项独立增删,代价是后台操作步骤变多,需要给编辑人员补一段操作说明。
假设一家做设备租赁的中小企业,网站原来只有一个“联系电话”字段。后来业务要求区分“咨询电话”和“售后电话”。如果只是这两个固定用途,新增两个可空字段即可,属于条件一。
但如果继续要求“每个地区各有一个联系人,地区数量还会增加”,固定字段就不够用了。此时应建“地区联系人”子项,每个子项包含地区名、联系人、电话,并关联到设备或服务页面。这是条件二。这个例子只用于说明比较方法,不代表任何真实项目结果。
还要注意例外:如果网站只是展示,不提供筛选和导出,子项数量又很少,拆分带来的维护成本可能高于收益。反过来,如果已经出现按子项搜索、按子项统计的需求,即使当前只有两条数据,也应提前拆分,避免后期迁移时改动面过大。
字段扩展最容易出问题的地方不是加字段本身,而是命名和迁移顺序混乱。建议先写一份字段对照,至少包含旧字段名、新字段名、含义、是否必填、旧数据如何取值。
迁移顺序可以按以下方式执行:
其中“补不上的保留为空”很关键。用默认值填充会让后续判断失真,例如把所有未知来源都写成“直接访问”,之后就无法区分真实直接访问和未识别来源。空值虽然不美观,但保留了数据边界。
如果扩展涉及对外接口,还要确认调用方是否按固定字段顺序解析。字段顺序变化、字段改名、字段类型从文本改为数字,都可能让旧调用方失败。此时应保留旧字段一段时间,并让新字段与旧字段并存输出,而不是直接替换。
字段上线后,不能只看页面是否显示正常。至少验证三类现象:
如果发现某处仍读旧字段,先判断它是遗漏还是有意兼容。遗漏就补上;有意兼容就保留并标注停用条件。不要因为一处显示正常就认为整个扩展完成,字段问题往往在导出和统计环节才暴露。
最后,如果扩展后请求量或抓取量出现波动,不能直接归因于字段调整。缓存、发布频率、外部链接变化、抓取预算分配都可能造成类似现象。应结合服务端日志和发布时间线判断,而不是把相关性当成因果。