(数据仓库)数据仓库建模篇(转载) (4)

8. 谈你对星形模型和雪花模型理解和认识?
星型模型
核心是一个事实表及多个非正规化描述的维度表组成。
雪花模型
它是星型模型的扩展,不同的是维度表被规范化,进一步分解到附加表中。
星座模型
由多个事实表组合,维表是公共的,可以被多个事实表共享。星座模型是数据仓库最常使用的模型。
数据仓库建模 — 星型模式
Example of Star Schema


数据仓库建模 — 雪片模式
Example of Snowflake Schema

节省存储空间
一定程度上的范式

星形 vs.雪花型

Which one is better?
长期以来的争论
两种观点各有支持者
争论在继续……
目前看来,大部分更加倾向于星型
支持星形维度的论点

事实表总会是很大的,在维度表上节省的空间相对来说是很小的
增加了数据模型的复杂度
查询操作概念上更复杂了
从数据仓库到多维数据库的加载时间会更长
因此,只有当维度表极大,存储空间是个问题时,才考虑雪花型维度
简而言之,最好就用星型维度即可
支持雪花型维度的论点

从数据仓库到多维数据库的加载过程中,雪花型维度的效率更高;
雪花型维度描述了更清晰的层次概念;
只有当最终用户可能直接访问数据仓库时才考虑星形(而这是不被建议的);
我的个人经验

星形结构效率上优于雪花型;
多数情况下,我会选择星型,但是不排除使用雪花型的情况;
9. 什么叫维度和度量值?(一个是出发点,一个是观察值)
事实表
在多维数据仓库中,保存度量值的详细值或事实的表称为“事实表”。一个按照州、产品和月份划分的销售量和销售额存储的事实表有5个列,概念上与下面的示例类似。

在这些事实表的示例数据行中,前3个列——州、产品和月份——为键值列。剩下的两个列——销售额和销售量——为度量值。事实表中的每个列通常要么是键值列,要么是度量值列,但也可能包含其他参考目的的列——例如采购订单号或者发票号。

事实表中,每个度量值都有一个列。不同事实表将有不同的度量值。一个销售数据仓库可能含有这两个度量值列:销售额和销售量。一个现场信息数据仓库可能包含3个度量值列:总量、分钟数和瑕疵数。创建报表时,可以认为度量值形成了一个额外的维度。即可以把销售额和销售量作为并列的列标题,或者也可以把它们作为行标题。然而在事实表中,每个度量值都作为一个单独的列显示。

事实表数据行中包含了您想从中获取度量值信息的最底层级别的明细。换句话说,事实表中对每个维度的最详细的项目成员都有数据行。如果有使用其他维度的度量,只要为那些度量和维度创建另一个事实表即可。数据仓库中可能包含拥有不同度量值和维度的不同事实表。

前面表格中的示例数据行显示了事实表的概念布局。事实是事实表几乎总会使用一个整数值来表示(维度)成员,而不使用描述性的名称。因为事实表往往会包含数量多得无法想象的数据行——在一个中等大小的数据仓库中,事实表动辄包含上百万行数据——使用整数键值可以有效地减小事实表的大小。事实表真正的布局如下所示。

在事实表中使用整数键值时,维度成员的名称需要放到另一种表中——也就是维度表。通常,事实表中的每个维度都有一个维度表。

事实表前缀为Fact。

归纳:

每个数据仓库都包含一个或者多个事实数据表。事实数据表可能包含业务销售数据,如现金登记事务。

所产生的数据,事实数据表通常包含大量的行。事实数据表的主要特点是包含数字数据(事实),并且这些数字信息可以汇总,以提供有关单位作为历史的数据,每个事实数据表包含一个由多个部分组成的索引,该索引包含作为外键的相关性纬度表的主键,而维度表包含事实记录的特性。事实数据表不应该包含描述性的信息,也不应该包含除数字度量字段及使事实与纬度表中对应项的相关索引字段之外的任何数据。

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/zzfwwz.html