先判断一件事:所谓“不够用”,是字段数量少了,还是字段之间的关系变了。前者可以增量补字段,后者往往要改数据模型。区分方法很简单——看新需求是否要求把原来一条记录拆成多条、把原来写死的选项改成可维护的字典、或者让同一实体在不同业务阶段拥有不同字段集。只要命中其中一条,直接加列通常会在几个月内再次卡住。
第一种解释是容量问题。比如最初只给客户表留了“联系人、电话”,后来业务要求记录多个联系人、多个地址、多个跟进记录。这类需求的特征是:新数据仍然挂在同一个主体下,只是条数变多。此时把字段拆成子表、用一对多关系承接,比继续在主表加列更稳。
第二种解释是模型错位。比如最初把“订单状态”做成一个下拉字段,值写死为“待付款、已付款、已完成”;后来业务出现部分退款、分批交付、售后中,状态之间还有先后和依赖。这时问题不在字段不够,而在于状态本应是独立实体,带有时间、操作人、原因。继续加字段只会让同一条记录承载互相矛盾的语义。
还有一种容易被误判的情况:字段其实够用,但录入端把多个含义塞进一个字段。例如“备注”里同时写着来源、意向和下次联系时间。查询时无法筛选,于是感觉字段不够。这类问题的证据是:导出数据后,同一列里出现大量格式不统一的内容。
找三组证据即可。
假设一个场景:某遵义本地服务类网站,最初留言表只有姓名、电话、留言内容。后来需要区分“咨询价格、预约上门、售后投诉”,还要记录每条留言由谁跟进、跟进到哪一步。此时若只在留言表加一个“类型”字段,短期内能筛选;但“跟进”本身会产生多条记录,且需要时间线。证据就是:同一个留言会被多次跟进,每次结果不同。看到这个证据,就应把跟进拆成独立表,而不是继续在主表加“跟进1、跟进2”。
先做一次字段盘点,把现有字段按“主体属性、关系、状态、过程记录”四类归位。归位后,主体属性留在主表;关系拆成关联表;状态改为带时间的独立记录;过程记录单独建表。这个动作的结果会直接影响下一步:如果盘点后发现多数新需求都落在“过程记录”,说明扩展重点是新增表而不是改主表,风险更低,也更容易回滚。
接着处理兼容。新增字段或新表时,旧数据需要给出默认值或迁移规则。对无法自动判断的旧记录,宁可留空并标记“待补全”,也不要用猜测值填充。因为一旦用错默认值,后续统计会把错误当成事实,反而让扩展后的数据不可信。
然后调整录入端。字段扩展后,如果表单仍然把所有字段平铺展示,录入人员会跳过非必填项,导致新字段长期为空。可行做法是按业务阶段分组:初次提交只收必要信息,跟进阶段再逐步补充。这样做的结果是新字段的填充率更接近真实业务节奏,而不是上线当天看起来齐全、之后逐渐荒废。
满足以下条件时,增量扩展通常够用:新需求只是增加同层属性;旧数据可以容忍为空;查询仍以单条记录为主;变更频率低。此时新增字段、补索引、更新表单即可。
满足以下条件时,应准备重构:同一主体需要多条同类记录;状态需要保留历史;不同业务类型字段差异大;旧数据已经出现一列多义。重构不一定要一次完成,可以先为新业务建新表,旧数据只读保留,新数据写入新结构,等查询和报表都切换后再决定是否迁移旧数据。这样做的代价是短期内存在两套结构,收益是避免在业务高峰期做高风险迁移。
无论选哪条路,都要先确认一件事:扩展后的字段是否有明确的负责人和录入时机。没有这两点,字段设计再合理也会退化成一堆空列。下一步动作可以是先在一个业务线试运行新结构,观察两周内新字段的实际填写情况和查询需求,再决定是否推广到全部业务。这个观察结果,比上线前的任何设计评审都更能说明扩展是否成立。