个人觉得维度建模是展现分析数据的首选技术,主要是基于一下两个需要同时满足的需求:

  (1)以商业用户可理解的方式发布数据

  (2)提供高效的查询性能

  维度建模并不是一种新技术,例如数据库用这种方式来简化,简单性至关重要,因为他能够确保用户方便地理解数据,以及确保应用能快速,有效的发现及发布结果

  举一个例子:加入某个个业务经理描述业务为:“我们在各种各样的市场销售产品,并不断地对我们的表现进行度量。“经过分析我们额能知道其业务强调是产品,市场,时间。多数人发现其业务包含三维数据,即将其业务数据标识为产品,市场,时间。现在我们设想下,沿着上述三位进行切片和切块操作。多为数据库中的点表示度量结果,例如销售额或者利润,这一结果是满足特定产品,市场,时间的结果。将其某些事情以具体,有形式的方式抽象成数据集所在展示出来的能力是结果可理解能力的好的方法。如果上述场景表现得太简单,那么这正是我们所需要的!从简单的数据模型开始是保持设计简单性的基础。如果从复杂的数据模型起步,那么最终会导致模型过度复杂,从而导致查询性能地下。爱因斯坦曾经说过,"凡事应该尽量简单,直到不能再简单位置。"

  以上表达的宗旨就是两个字‘简单’,尽管维度模型通常应用在RDBMS之上,但是并不要求要维度建模必须满足第三范式(3NF),(对于范式在以后会一起讨论),数据库中强调的3NF主要是为消除冗余。规范化的3NF将数据划分为多个不同的实体,每个实体构成一个关系表。一个销售订单数据库开始可能是每个订单中的一行标识一条记录,到后来为满足3NF变成蜘蛛网样的,也许会包含几十,上百个规范化的表。

  业界有的时候将3NF模型及维度模型称为实体-关系模型(ER图  如不了解请百度)。ER图表示表 之间的交互关系。3NF模型及维度模型都可以用ERD(ER图)表示,因为他们都包含可连接的关系表。主要差别在于规范化的程度。因为两种模型都可以用ERD表示,我们强调不要将ER模型当成3NF模型,将3NF模型成为规范化弄醒以消除混淆。

  规范化的3NF主要应用与操作过程中,因为对事物的更新插入仅触及数据库的单一地方。然而,对BI查询来说,规范化模型太复杂。用户难以理解,检索,难以记住类似北京地铁那样既有复杂网络的模型。而且,多数关系数据管理系统不能有效的查询规范化模型,用户查询难以预测的复杂性将耗尽数据库的优化去,产生灾难性的查询性能,所谓的慢sql。在DW/Bi这样的产线系统中使用规范化的建模方法难以满足对数据高性能的检索需求,幸运的是,维度建模解决了模式过分复杂的问题。

  其实维度模型包含的信息与规范胡模型包含的信息相同,但对数据以一种用户可理解的,满足查询性能要求的,灵活多变的方式进行了包装。