News & Insights

数据库设计预留字段是万能药吗?老程序员的说法有点不一样

数据库设计时预留几个备用字段,到底是老经验还是坏习惯?比格网络聊聊预留字段的三个真实代价,以及JSON字段、扩展子表等更稳妥的替代方案。顺手破除一个老印象:现在加字段早已不是想象中的锁库大事。看完再决定用不用。

数据库设计预留字段是万能药吗?老程序员的说法有点不一样

评审表结构的时候,十份设计里能看到八份带着reserve1、reserve2、extra之类的预留字段,问一句预留来干嘛,答曰「以后加需求不用改表,老经验了」。数据库设计里这个「老经验」,如今争议其实很大,值得掰开讲讲。

预留字段的三个真实代价

第一,没法用。预留字段没有索引、没有类型约束、没有注释,真到用的时候你会发现,它存不了金额也建不了索引,最后还是得老老实实改表。第二,污染代码。字段名叫reserve1,半年后没人记得里面存的是什么,新同事只能翻历史数据猜,猜错了就是事故。第三,掩盖设计懒惰。习惯性甩几个预留字段,往往说明开发者没认真想过业务接下来往哪走,真有明确预期的扩展,应该设计成明确的字段或表,而不是留一个黑洞。

比预留字段靠谱的几种做法

  • 有明确预期的,直接按预期设计:知道以后要多规格,现在就把规格子表建出来,哪怕先只支持单规格。
  • 属性确实杂且不可预期的,比如商品的各项参数,用JSON类型字段集中存,MySQL 5.7之后支持查询,比散着放预留字段干净得多。
  • 变化实在太频繁的模块,考虑拆出独立的扩展表,主表保持稳定,两边互不拖累。

顺手破一个老印象

顺带说一句,现在改表没想象中可怕:MySQL 5.6之后加字段基本是秒级操作,几百万行的表也能在线加。「改表要锁库」这个老印象,还停留在十多年前,别拿它当设计借口。

当然也不是一刀切地反对预留,极少数场景下留一个备用字段可以接受:比如接口报文里明说了下个版本会加某个固定含义的字段,提前建好类型对得上,将来直接启用。判断标准就是你能说出它将来装什么、什么类型。说不出来的预留,一律视为偷懒,评审时直接打回。

两条建议:新项目表结构里不要出现reserve1这种无意义字段,每个字段都要有名字有用途有注释;老项目里的预留字段,趁文档还全的时候赶紧把实际用途补记进数据字典。拿不准数据库设计该怎么留余量的,可以找比格网络把把脉,他们给出的设计一般都附一句「将来怎么扩」,这句话最值钱。

分享这篇文章:

准备好开启您的数字化之旅了吗?

让我们一起打造专业、高效、可增长的企业官网

✓ 链接已复制到剪贴板
电话咨询 免费咨询 获取方案
跳转咨询表单 免费获取方案 18942912117 在线咨询