如果字段不够用,优先判断它是“展示层缺字段”还是“业务对象缺结构”。前者可以不改库,只调整输出模板;后者必须在数据库里新增字段或新表,并同步改录入、校验和历史数据回填。判断依据不是页面好不好看,而是同一类信息是否已经出现多个值、是否需要被检索或汇总。
假设你在乌海做的是本地设备租赁类企业站,上线时“产品”只有名称、型号、日租金和一张主图。运行一段时间后,业务人员希望同一型号能按吨位、工况、库存状态分别筛选,还希望每台设备记录最近的维保日期。此时页面上加几个下拉框并不能解决,因为原始数据里根本没有吨位、库存状态和维保日期这三类值。真正的缺口在数据结构,不在前端样式。
这个情境的关键不是“字段越多越好”,而是先确认新需求属于哪一类:只是换一种说法展示已有数据,还是引入了新的业务事实。只有后者才需要扩展字段。
可以用一个简单规则区分:如果一条记录对某个属性只能取一个值,加字段;如果可能取多个值,且这些值需要独立增删改查,就新建关联表。例如每台设备只有一个“当前库存状态”,适合在原表加一列;但一台设备可能对应多次维保记录,每次有日期、内容和负责人,就应新建维保记录表,用设备 ID 关联。
把这条规则落到前面的假设里:吨位和库存状态各加一列,维保记录单独建表。这样后续筛选、导出和统计都能落到具体列上,而不是从一段自由文本里猜。
新增字段最容易出问题的地方不是写 SQL,而是旧数据怎么办。可执行的动作是:先加允许为空的字段,让新录入流程立刻可用;再单独写一次回填脚本,把能确定的历史值补上;最后才把字段改为必填。顺序颠倒会直接导致旧记录无法保存。
回填时要接受一个现实:不是所有历史数据都能补全。假设有 200 条旧产品记录,其中只有 120 条能从旧描述里识别出吨位,剩下 80 条只能留空并标注“待确认”。这时不要为了凑满而编造数值,而是让前台在字段为空时隐藏该筛选项,后台保留待补清单。下一步动作就是按清单逐条确认,而不是继续加新字段。
只改数据库,录入端和输出端不改,字段等于不存在。扩展完成后至少检查三处:
一个可验证的结果是:新增一条带完整新字段的记录,能在前台按该字段筛到;再新增一条只填旧字段的记录,页面不报错、只是不出现在该筛选项里。这个结果说明扩展没有破坏旧数据,可以进入下一步:把回填后的数据重新核对一遍。
如果一次扩展需要同时加五六个字段,且它们之间互相依赖,说明原来的对象划分可能已经不合适。此时继续加列会让表越来越宽,录入表单越来越长,维护成本反而更高。更稳妥的做法是把这部分信息拆成独立对象,重新定义关系,再迁移数据。
判断信号很直接:新字段是否只在特定条件下才有意义,是否经常整组一起出现,是否已经有别的表在存类似内容。满足其中两条,就值得停下来重新设计,而不是继续在原表上打补丁。扩展字段是解决遗漏条件的手段,不是替代结构设计的办法。