上线后字段不够用,通常不是“当初想少了”这么简单,而是业务在真实使用中长出了新维度。扩展前先判断一件事:新增字段是补充描述,还是改变了原有数据的归属关系。前者可以增量加列,后者往往需要拆表或建关联表,代价完全不同。
很多益阳网站开发项目上线后遇到字段不够用,第一反应是加一个文本字段先顶上。加完之后表单能提交、后台能保存,报错确实没了。但过一段时间会发现:同一个字段里有人填“3吨”,有人填“3000kg”,有人填“电话另议”。数据量越大,越没法统计和筛选。
这说明“加字段”这个动作本身没有错,错在把结构化需求塞进了非结构化容器。字段扩展的第一层判断,不是能不能加,而是加完之后这条数据还能不能被稳定查询。
面对字段不够用,通常有两种成立条件不同的解释。
解释一:字段数量不够。适用于新增信息和原有记录是一对一关系。比如原来只记录客户姓名和电话,现在想补一个“来源渠道”,每个客户只有一个来源,直接加一个字段即可。这种情况下扩展成本低,历史数据可以留空或批量补默认值。
解释二:字段关系没建对。适用于新增信息和原有记录是一对多关系。比如一个客户有多次咨询、多个联系人、多份报价。如果继续在主表里加“联系人2”“报价2”这样的字段,字段会无限膨胀,而且查询时要用大量条件拼接。正确做法是新建一张关联表,用客户ID把多条记录挂上去。
判断方法很直接:问一句“这条新信息,对同一条主记录会不会出现多次”。会,就是关系问题;不会,才是字段数量问题。
不用等新需求上线,从已有数据就能找到线索。
这些证据不能单独证明某种解释一定正确。字段格式混乱也可能只是前端校验没做,而不是关系设计错了。所以下一步要做的动作是:把最近一批真实提交记录导出,人工标注其中有多少条包含“一条记录多个值”的情况。如果比例明显偏高,优先按关系问题处理;如果只是零星几条,按字段数量问题增量扩展即可。
假设一个益阳本地服务类网站,最初客户表只有姓名、电话、需求描述三个字段。上线两个月后,业务方提出要记录“每次跟进的时间和结果”。
如果按加字段处理,可能会加“跟进1时间”“跟进1结果”“跟进2时间”“跟进2结果”。做到第三轮跟进时,字段已经很难维护,查询“所有未完成二次跟进的客户”要写很长的条件。
如果按拆表处理,新建一张跟进记录表,字段为:跟进ID、客户ID、跟进时间、跟进结果。主表不变,每次跟进插入一行。查询未完成二次跟进的客户,只需要按客户ID分组计数。这个例子里,字段数量没有增加多少,但数据可查性完全不同。
假设这个项目后续还要加“报价记录”“合同记录”,同样是一对多关系,继续拆表比继续加字段更稳。反过来,如果只是想补一个“客户行业”字段,每个客户只有一个行业,那就直接加列,不必拆表。
确定要扩展后,动作顺序会影响后续返工量。
做完第三步之后,如果发现新表查询结果和旧字段拼接结果对不上,说明历史数据里存在脏值,需要先清洗再切换。这个结果会直接决定是否推迟切换,而不是硬上。
字段扩展有一个临界点:当新增需求连续三次都指向同一类关系,说明最初的主表设计已经承载不了当前业务。这时候继续加字段只是拖延,应该安排一次小范围重构。重构范围可以只限于相关表和对应表单,不必推翻整个网站。
判断是否到达临界点,可以看一个信号:开发人员每次接到新需求,第一反应是“又要加字段”,而不是“这个数据应该放在哪里”。出现这个信号时,先停下来画一张实体关系草图,比直接改表更省后续时间。