结论先说:字段不够用通常不是“数据库加一列”那么简单,而是要先判断是展示层缺字段还是存储层缺结构。如果只是前台想多显示一项信息,优先用已有字段组合或映射表补足;如果业务已经产生新的独立实体或一对多关系,就必须做结构扩展,并同步处理历史数据、表单、接口和旧页面。判断错这一步,后面每加一个字段都会牵动一次改版。
很多梧州本地项目上线后遇到的情况是:运营提了“再加一个字段”,开发直接在主表新增一列,结果前台出现大量空白、旧记录显示默认值、筛选条件互相冲突。直觉上“字段越多信息越全”,实际却是可维护性下降。
原因通常有两个方向。其一,新需求本质是同一实体的补充属性,比如产品多了一个规格说明,加列合理;其二,新需求其实是新的关系,比如一个产品对应多个供应商、多个价格档位,这时加列只会制造重复和空值。两者外表都表现为“字段不够”,处理方式却相反。
不要凭感觉判断,去看三类可核对的东西:
假设有一个梧州本地服务类站点,上线后想给每个服务项目增加“可预约时间段”。若每个项目只有一个时间段,加一列可行;若一个项目有多个时间段,加列会导致一行塞多个值、难以按时间筛选。这时正确动作是新建时间段表,用项目 ID 关联。做完这一步,前台预约页才能按时间段独立查询,后续加“已约满”状态也不必再动主表。
确认要扩展结构后,按下面顺序做,能减少返工:
其中第 3 步最容易被跳过。回填规则一旦含糊,前台就会出现同一字段有的显示、有的空白,运营会误以为程序有 bug,实际是数据口径没定。
并非所有“字段不够”都要改表。如果新信息只用于少数页面的补充说明,可以先用现有富文本或备注字段承载,等需求稳定后再结构化。反过来,如果这个字段已经进入筛选、统计或对外接口,就不要长期塞在备注里,否则查询会越来越慢、口径越来越乱。取舍标准是:它是否已经成为可独立查询的业务对象。是,就扩展;只是临时说明,就先观察。
扩展完成后,回头看最初那个“加一列”的冲动,多数问题其实出在没先分清属性与关系。把这一步判断对,后续每次新增需求都能沿用同一套检查顺序,而不是反复推翻表结构。