先给结论:字段不够用,通常不是“数据库容量不够”,而是当初把一类信息压进了一个字段,或把可变属性写死在表结构里。扩展前要先判断是表达方式问题还是结构问题。前者改代码和录入规则即可,后者才需要迁移数据。判断依据不是页面报错,而是同一份数据在导出、筛选、对接时是否反复需要人工拆解。
很多新手做网站上线时一切正常:表单能提交、后台能看、列表能显示。几个月后想按“地区+品类”筛选,或想把留言同步到邮件工具,才发现字段不够。直觉会认为“再买更大空间就行”,但空间大小与字段是否够用无关。真正的问题往往出在数据模型没有跟上业务变化。
典型信号有三个:同一列里出现“北京-批发”“上海-零售”这类混合值;备注字段被拿来存电话、预算、跟进状态;导出后必须用表格公式拆列才能统计。出现这些信号,说明字段设计已经承担了它不该承担的职责。
解释一:录入约定缺失。数据库里其实有足够的列,但录入时没有统一规则。例如“行业”字段有人写“教育”,有人写“教育培训”,有人写“K12”。筛选时看起来像字段不够,实际是取值不统一。这类情况不需要改表,只需要固定选项、增加校验或补一个映射表。
解释二:一对多关系被压进单列。一个客户可以属于多个标签,一个产品可以有多张图片,一个订单可以包含多个规格。如果当初只留了一个“标签”或“图片地址”字段,后续每增加一个值就要改表。这不是录入习惯能解决的,属于结构问题。
还有一种容易被误判的情况:把未来可能变化的属性写成了固定列。例如先有“微信”,后有“企业微信”“钉钉”,每加一个渠道就加一列。列数会持续膨胀,查询和表单也越来越难维护。
不要凭感觉决定是否迁移。可以做一次小范围核对:随机抽取二十条记录,逐条检查目标字段。如果同一字段内出现分隔符、空格混排、同义不同写,且去掉分隔符后能还原成有限几个标准值,更接近录入问题。如果去掉分隔符后每个值都不同,或一个记录天然需要多个并列值,更接近结构问题。
第二个证据是查询动作。尝试回答一个具体问题,例如“上个月来自华东、咨询过价格、尚未成交的线索有多少”。如果必须写多条模糊匹配、导出后再人工统计,说明字段粒度不足以支撑筛选。如果只是选项名称不一致,统一取值后同一查询就能成立。
第三个证据是新增需求的频率。假设过去三个月里,同一类信息已经新增过两次以上(例如又多了两个渠道、又多了两个规格),那么继续加列大概率只是推迟问题,而不是解决问题。
先做低风险动作:为现有字段补一份取值规范,把同义值映射到统一选项,并在录入端加必填或下拉限制。做完后重新跑一次上面的查询。如果查询能稳定返回结果,说明结构暂时够用,下一步重点放在录入校验和定期抽查。
如果统一取值后仍然无法筛选,再考虑结构扩展。常见做法是把“一个主体对应多个值”的部分拆成独立表,用主体标识关联;或者增加一个可扩展的属性表,把字段名和字段值分开存储。迁移前先备份,并在测试环境用一小批真实数据验证导出、筛选和展示是否一致。验证通过再全量迁移;验证不通过,先修正映射规则,而不是继续加列。
一个假设例子:某站点把“咨询渠道”存成一列,最初只有“电话”和“表单”。后来增加“公众号”“朋友介绍”,于是不断加列。若先统一为一张渠道表,每条咨询记录对应一个渠道标识,新增渠道只需增加一行数据,不需要改表结构。这个例子的数字仅用于说明比较方法,不代表任何实际项目结果。
反之,如果字段已经影响导出、对接或日常查询,即使页面看起来正常,也应优先处理结构,而不是继续在备注里堆信息。扩展的目标不是字段越多越好,而是让同一类问题能用同一种查询方式回答。