在做项目的时候,发现刚刚开始设计的数据库表,到了后期需求的变更,会增加其属性字段,由此涉及到数据库字段动态扩展。
有几种方法:
1. 动态添加属性字段。
需要时,添加需要的属性时。显然这种方式不利于灵活扩展,而且在一张大表添加一个字段需要较长时间,这也不适合7*24的服务。
2. 先预留字段,到时再用。
就是先给表定义几个扩展字段,以商品表为例。给product添加field1,field2,field3三个varchar(200)类型的字段,这样任何数据类型都可以解析为字符串,把编码后的数据存进去就行了。
它的缺点是字段是公用的,不能顾名思义,得先查对应关系。另外扩展字段的数量无法精确定义,也存在数据量大时添加字段卡顿的风险。
3. JSON 格式保存。
把需扩展的一组字段都到到一个字段里,各个字段用json的方式组成一个大的字符串。这种方式,添加、修改、删除问题都不大,但查询不方便,比如要查询的时候,就要遍历所有数据才行。如果有复杂查询,比如group by ***,这将更麻烦。所以这种方式只能用于数据量很少的方式,比如就10行数据,且没有复杂查询。