在开始这篇博客之前,我先提出一个问题,看你是否遇到过?这个问题就是在你开发软件的时候,有没有遇到过发现数据库中表的字段不够,需要添加字段的情况?如果没有的话,那么我很佩服你,你们的初期设计做得很好,如果有的话,不知道你们是怎么解决的?如果和这个话题不同的话,还请留言指点一下。

好,以目前我的技术水平,在关系型数据库上,遇到这种问题我是考虑用横表结合纵表来解决的,横表大家可能很熟,但是,可能没听过纵表,因此,这里就和大家聊聊纵表是怎么一回事。

首先,大家看一下这个数据库表:

姓名 语文 数学 英语
张三 70 80 90
李四 90 80 70

这是一张我们熟悉的数据库记录表,这样的表我们称之为横表,也就是属性值都是字段,一条记录可以构成一个完整的对象。好,接下来我们再来一张表,大家看看这张表是怎么来描述的:

姓名 科目 成绩
张三 语文 70
张三 数学 80
张三 英语 90
李四 语文 90
李四 数学 80
李四 英语 70

看到这张表,大家可能有点明白了,所谓的纵表就是将横表一条记录拆分成每个属性一条记录,这样的话,要构成一个完整地对象需要查询多条记录。但是,好处也很明显,就是增加一个属性的话直接增加一条记录即可。

有得有失,一切都是取舍的过程,下面就来对比一下两种方式: -
横表:后台数据库管理员操作简单,直观,清晰可见,一目了然。但若要给横表中添加一个或者多个字段,就须重建表。 -
纵表:对于横表的弊端,纵表中只需要添加一条记录,就可以添加一个字段,所消耗的代价远比横表小。但是纵表的对于数据描述不是很清晰,而且会造成数据库数量很多。在查询的时候用到group等函数会大大降低执行效率。纵表的初始映射要慢一些,纵表的变更的映射可能要快一些,如果只是改变了单个字段时,毕竟横表字段比纵表要多很多。

OK,这就是横表纵表的简单介绍和比较,欢迎交流更多关于设计以及架构方面的知识。