欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  数据库

【问】如何应对关系型数据库中列的不断增加

程序员文章站 2022-04-24 11:54:45
...

光看文章的题目可能很难明白我想说什么,还是先描述一下项目中遇到的问题吧。 我们项目中一张这样的表用来保存各种资源,假设为资源1、资源2等等,用ResGenre来标识。 我们可以认为资源类型是一个抽象的概念,资源1、资源2这些都是资源子类。一开始所有这些

光看文章的题目可能很难明白我想说什么,还是先描述一下项目中遇到的问题吧。

我们项目中一张这样的表用来保存各种“资源”,假设为资源1、资源2……等等,用ResGenre来标识。

【问】如何应对关系型数据库中列的不断增加

我们可以认为资源类型是一个抽象的概念,资源1、资源2这些都是资源子类。一开始所有这些子类型都只有ResId,ResName等几个字段,一张ResInfo表就可以满足需求了。但是我们都知道项目千变万化,唯一不变的就是“变化”。随着业务的发展可能资源子类型越来越多,头疼的是原来的这张表的几个字段已经满足不了需求了,各个子类型的字段在不断扩充,最头疼的是它们加的字段都各不相同……这时该怎么办?

大概有以下几种办法:

单表继承

所谓单表继承就是所有的字段都保存在一张表上,增加字段时就扩充原来的表。

【问】如何应对关系型数据库中列的不断增加

这种方法优点简单粗暴,当子类型很少以及子类型的特殊属性很少的时候还是可取的。但是如果子类型达到了10几个,而且子类型的字段很多时缺点也显而易见:冗余太多,某一行记录存在许多与当前子类无关的属性,而且页面管理起来也相当繁琐,每次增加一个字段的时候,所有子类型都受到影响。

每个子类型创建一个表

添加一个子类型就增加一张表。

【问】如何应对关系型数据库中列的不断增加

【问】如何应对关系型数据库中列的不断增加

……

两个子类型存储完全独立,,每增加一张表页面就要重新管理一张表,子类型很多的时候这种方式也不是很好。

多表继承

既有基表,又有子类型表,就像面向对象里面的继承。

【问】如何应对关系型数据库中列的不断增加

多表继承的方式可以减少字段的冗余,但是同样的子类型很多时,表较多,管理起来比较麻烦。

半结构化数据模型

如果有很多子类型或者必须经常增加新的字段支持,那么可以用一个BLOB列来存储数据,用XML或者JSON格式。

【问】如何应对关系型数据库中列的不断增加

Property是一个属性列:它可以用Json来存储额外增加的字段:同时包含了字段名字和值。

{ "Field1":"Value1","Field2":"Value2" }