先给结论:字段不够用,通常不是“加几个字段”能解决,而是要先判断新增数据是补充旧对象、还是已经变成新对象。若是前者,加字段并回填;若是后者,应新建表或新内容类型,用关联字段挂回旧数据,再分批迁移。下面用一个假设情境,把判断和动作串起来。
假设你通过建站一条龙做了一个产品展示站,最初每个产品只有名称、简介、主图和分类四个字段。上线半年后,运营希望每个产品记录多组参数、多个规格、若干附件和不同地区的适配说明。此时如果继续往原产品表里加“参数1、参数2、附件1、附件2”,字段会迅速膨胀,编辑界面也会变得难用。
这个情境的关键不是字段数量,而是数据关系变了:参数、规格、附件各自都是一对多关系,继续塞进主表等于把三种不同对象压进一张表。判断依据可以看三条:同一字段是否会被重复填写多次;新增内容是否独立于原对象存在;未来是否需要对新增内容单独筛选或排序。满足其中两条,就应优先考虑拆表。
动手前先导出当前字段清单,标注每个字段的用途、是否必填、是否被模板调用、是否参与筛选。重点是找出三类字段:已经废弃但仍在数据库里的;被多个页面共用的;只在某个旧模板里出现的。这个动作的结果会直接影响下一步——如果存在大量废弃字段,先清理再扩展,能减少迁移时的映射负担。
盘点时还要确认旧内容是否仍有价值。若旧产品页仍有访问和转化,就不能直接删除旧结构,而应保留旧字段作为过渡,把新字段放到新表或新内容类型中,通过关联关系读取。这样旧页面继续可用,新页面逐步切换。
路径一:在原对象上加字段。适用条件是新增数据一对一、数量固定、不需要独立管理。例如给产品加一个“上架日期”或“负责人”。动作是新增字段、设置默认值、对旧记录做一次性回填,然后更新编辑模板和前台模板。结果是旧数据不受影响,但字段数量会持续累积。
路径二:新建独立对象并关联。适用条件是一对多、需要单独筛选、未来还会继续增加。例如规格、参数组、附件库。动作是建立新表或新内容类型,加一个指向原产品的关联字段,再把旧数据按规则导入。结果是编辑界面更清晰,但前台模板需要同时读取两个对象,迁移期间要处理关联缺失的兜底显示。
取舍标准可以概括为:如果新增字段未来可能变成列表,就现在拆;如果确定只有一条且不会独立查询,就加在原对象上。不要为了“以后可能用得上”提前拆出大量空表,那会让维护成本提前发生。
确定路径后,按以下顺序执行:先在测试环境复制一份数据;建立新字段或新对象;导入或回填数据;修改模板读取逻辑;抽查新旧页面对比;确认无误后再在生产环境重复。每一步的结果决定下一步能否继续——如果抽查发现关联字段为空,就先补映射规则,而不是直接上线。
回滚点要设在修改模板之前。数据库结构变更和模板变更分开进行,一旦前台显示异常,可以只回退模板,不影响已经写入的新数据。对于仍在使用的旧合作关系或旧系统接口,保留只读访问一段时间,确认没有调用后再关闭。
字段扩展完成后,旧字段不必立刻删除。先改为隐藏或只读,观察一个内容更新周期,确认没有编辑流程依赖它,再考虑移除。旧内容如果仍有搜索流量,保留其可访问状态,用新字段补充信息,而不是整体重发。这样既完成扩展,又不会让已有页面突然失效。
最终判断标准是:编辑能否在不看说明的情况下填完新内容,前台能否在关联缺失时正常显示,旧页面是否仍然可访问。三者都满足,这次字段扩展才算收尾。