开发个学生系统,数据库设计。
传统数据库学生表行设计
学号 |
姓名 |
性别 |
年龄 |
1 |
张三 |
男 |
16 |
2 |
李红 |
女 |
15 |
3 |
王五 |
男 |
16 |
当想扩展属性时,相对应的会增加字段。
学号 |
姓名 |
性别 |
年龄 |
住址 |
1 |
张三 |
男 |
16 |
河南 |
2 |
李红 |
女 |
15 |
湖北 |
3 |
王五 |
男 |
16 |
北京 |
实际开发中这样做的缺点:
1:属性字段向主表加,会导致列越来越多,增加表拆分成本。
2: 增加字段,程序中实体模型,SQL查询字段,DTO及文档数据模型都要跟着发生变化,增加成本。
3:查询单个字段,也需要查询整个行。增加Io消耗。
Ps:优点就不多说了。
怎么解决这个问题呢?其实很简单,只是一个思路的转变。
我们把一个对象==一条行记录,转化成列式存储。
学号 |
属性key |
值value |
1 |
姓名 |
张三 |
1 |
性别 |
男 |
1 |
年龄 |
16 |
1 |
住址 |
河南 |
.... |
..... |
.... |
这样做就完美解决上面的问题了。数据量也会N倍增加。
本文仅仅是思路,具体设计看需求,个人习惯。
索引字段不需要查询整行,查询需要行转列等等,这类问题不做讨论。
相关资料
1:列式数据库 http://zh.wikipedia.org/wiki/%E5%88%97%E5%BC%8F%E6%95%B0%E6%8D%AE%E5%BA%93
2:五大存储模型 http://www.csdn.net/article/2012-03-12/313041
原文地址:http://www.cnblogs.com/mushroom/p/3764171.html