结论先行:字段不够用通常不是“加几列”就能解决,而要先判断现有数据是否可迁移。只要旧记录没有丢失、且新增字段不改变已有业务含义,可以走增量扩展;如果旧记录需要重新解释、或字段之间存在互斥关系,就应做一次受控的结构调整,而不是边用边改。
两种条件对应两种做法,选择依据是“旧数据能否原样保留”。
判断动作很简单:随机抽十条旧记录,试着按新字段规则填一遍。如果十条里有三条以上填不出或含义模糊,说明属于条件二,不要直接加字段了事。
条件一成立时,最小动作是新增允许为空的字段,而不是立刻修改旧记录。具体顺序如下。
这个动作的结果会直接影响下一步:如果新增字段后旧页面访问正常、新数据也能落库,说明扩展是安全的,可以继续做筛选和导出;如果出现写入失败或旧页面报错,说明还有调用方依赖旧结构,应先修调用逻辑,而不是继续加字段。
条件二成立时,旧数据必须重新解释,直接改字段会让历史记录失真。这时有两种取舍。
取舍依据是“能否承受读取错误”。如果旧记录被错误解释会直接影响业务判断,就选双写过渡,多花一段维护时间换取可回退;如果数据量小、错误可人工修正,停机迁移更省事。假设一个只有几十条记录的展示型站点,停机十分钟迁移的风险远低于长期维护两套字段的成本;反过来,记录持续增长且对外查询频繁的站点,双写过渡更稳妥。这个例子只用于说明比较方法,不代表任何实际项目。
很多时候你拿不到全部旧数据,也没有直接改库的权限。这不等于只能等。可执行的最小动作是:先导出你能拿到的字段清单和样例记录,标出哪些字段含义模糊、哪些字段被多个页面共用。把这份清单交给有权限的人,明确说明“要新增什么、旧记录如何处理”。
需要说清楚的例外是:字段清单不全时,不能据此推断旧数据可以安全迁移。导出量少、样例看起来整齐,也可能只是因为你看到的是筛选后的子集。请求量或抓取量归零同样不能单独证明字段设计正确,它还可能来自入口调整、缓存或统计口径变化,需要结合写入日志一起看。
这三项验证通过后,才适合把新字段接入对外展示或统计逻辑。任何一项不通过,都应先回到字段定义本身,而不是在展示层做临时兼容。