先别急着改数据库表。正确顺序是:拿一个已经产生真实内容的页面(比如某条产品详情或某条业务记录),把现在缺的字段按“展示用、筛选用、流程用”分成三类,再决定是加独立字段、加扩展表,还是把一段内容整体改为可解析结构。这个判断做完,后续动作才有方向。
打开你手里那条记录,对照前台页面和后台录入表单,逐项问:这个信息现在写在哪里?如果它只是被塞进“备注”“简介”这类长文本框,前台靠整段输出,那么它属于展示型缺口。如果它需要被单独筛选、排序、参与统计,或者要驱动某个状态变化,就属于结构型缺口。
两类缺口的扩展代价差别很大。展示型缺口通常只需在录入表单增加一个输入项,并在模板中多输出一处;结构型缺口则要考虑已有数据怎么回填、空值怎么处理、查询条件怎么改。把两者混在一起做,往往会把本来简单的改动拖成一次数据迁移。
选一条内容最完整的记录,把它涉及的全部信息写下来,再标注每项现在的存放位置。可以用下面这个顺序:
第3项是重点信号。当同一类信息反复以文字形式嵌入标题或正文,说明它本来应该是一个独立字段。第4项则相反,它可能只是录入习惯,不一定要变成结构。
扩展方式大致有三种,选择取决于数据量和查询需求,而不是取决于哪种听起来更先进。
如果已有记录数量不多,直接加字段往往最快;如果同类信息会持续增加条数,扩展表更稳;如果长文本格式混乱,先做解析规则反而会制造大量脏数据,此时应先统一录入规范再迁移。
假设某条产品记录的备注里写着“尺寸可选,颜色三种,支持定制”,而前台需要按尺寸筛选。此时直接加一个“尺寸”字段并不能解决已有记录,因为旧数据仍在那段文字里。可行做法是:先新增尺寸字段,再写一段只针对已知格式的解析逻辑,把能识别的记录回填,识别不了的标记为待处理。回填后抽查若干条,确认筛选结果与人工判断一致,再决定是否把备注中的对应文字删除。这个顺序的关键在于:先验证解析结果,再清理原始文本,否则一旦解析有误,原始信息已经丢失。
字段扩展上线后,优先观察三件事:新录入的记录是否都填了必要字段;筛选和列表是否出现空值异常;旧记录的展示是否出现空白或错位。如果发现某些页面抓取量或请求量下降,不能直接归因于这次字段改动,因为模板调整、URL 变化、缓存策略、外部链接变动都可能造成类似现象。更可靠的做法是对比改动前后同一类页面的实际输出内容,确认字段是否正确渲染。
最后,把这次扩展涉及的字段、回填规则和待处理记录整理成一份简短说明,交给后续维护的人。字段设计不够用不是一次性的问题,业务前提变化时它还会再出现;留下判断依据,比留下一个改好的表更有用。