能不能扩展,取决于字段是“展示层问题”还是“存储层问题”。如果新需求只是把已有数据换个方式组合呈现,通常改模板和查询即可;如果新需求要记录当前数据库里根本不存在的维度,就必须改表结构并迁移历史数据。判断依据不是页面好不好看,而是新字段是否需要被保存、检索、统计或导出。
第一种是伪扩展:数据已经存在,只是没有单独字段。例如联系方式原本整段存在备注里,现在想拆出电话单独筛选。这种情况可以先加一个派生字段,用脚本从旧内容中提取,再人工核对,不必立刻重构整张表。
第二种是真扩展:需要新增一个此前没有采集过的属性,例如产品增加“适用车型”或“交付周期”。它必须新增列或新增关联表,并决定历史记录填什么值。
第三种是关系扩展:一个对象要对应多个值,例如一个案例对应多个标签、一个客户对应多个联系人。此时继续在原表加列会越加越乱,应改为独立的关联表。
不要直接在生产库上改。可以先在本地或测试环境复制一份脱敏数据,只加一个新字段,跑通“写入—读取—列表展示—导出”这条链路。动作的结果会直接决定下一步:如果只改数据库就能跑通,说明影响面小,可以安排低峰期迁移;如果发现列表页、详情页、后台表单、导出文件、接口返回都要同步改,说明这是一次跨层改动,需要排期而不是临时补丁。
这里有一个必须说明的假设:上述验证假设你至少能拿到测试环境的数据库副本和代码改动权限。如果只有网站后台的操作权限,看不到表结构,那么能做的只是评估字段是否可通过现有自定义字段功能添加,不能据此推断底层可以任意扩展。
新增字段后,旧记录该填什么,是比加列更容易出错的地方。可选做法有三种:留空、填默认值、按规则回填。留空适合该字段只对新增记录有意义的情况;填默认值适合所有旧记录共享同一业务含义的情况;按规则回填适合能从旧数据推导的情况,但必须抽样核对,不能假定推导规则百分之百准确。
一个简化的假设例子:某企业站原有“新闻”表只有标题和正文,现在要加“所属园区”。如果旧新闻无法判断园区,强行统一填成某一个园区,会让后续按园区筛选的结果失真;更稳妥的做法是留空并标记为待补充,只对新发布的新闻要求必填。这个例子说明,字段能加上不等于数据可用,回填策略才是决定扩展质量的关键。
如果新需求要求对历史数据做精确统计,而历史数据从未采集过该维度,那么无论怎么改表结构都无法补出真实值。此时“扩展字段”只能面向未来生效,不能反推过去。遇到这种情况,应先确认统计口径是否接受“仅统计某时间点之后的数据”,如果不接受,就要重新设计采集流程,而不是继续在旧表上想办法。
先列出新需求涉及的字段清单,逐项标注“已存在可提取”“需新增单值”“需新增多值关系”。然后按影响面排序:只影响后台录入的先做,影响前台展示和导出的后做,影响接口和第三方对接的最后做。每完成一项,都在测试环境验证一次写入和读取,确认无误后再动生产数据。扩展不是一次改完就结束,而是让字段、录入规则和历史数据三者保持一致。