目录

星型模型中只有一张事实表,以及0张或多张维表,事实表与维表通过主键外键相关联,维表之间不存在关联关系,当所有维表都关联到事实表时,整个图形非常像一种星星的结构,所以称之为“星型模型”。
星型模型是最简单最常用的模型。星型模型本质是一张大表,相比于其他数据模型更合适于大数据处理。其他模型可以通过一定的转换,变为星型模型。
星型模型的缺点是存在一定程度的数据冗余。因为其维表只有一个层级,有些信息被存储了多次。如在地域维度表中,存在国家 A 省 B 的城市 C 以及国家 A 省 B 的城市 D 两条记录,那么国家 A 和省 B 的信息分别存储了两次,即存在冗余。
星型模型强调的是对维度进行预处理,将多个维度集合到一个事实表,形成一个宽表。这也是我们在使用hive时,经常会看到一些大宽表的原因,大宽表一般都是事实表,包含了维度关联的主键和一些度量信息,而维度表则是事实表里面维度的具体信息,使用时候一般通过join来组合数据,相对来说对OLAP的分析比较方便。

当一个或多个维表没有直接连接到事实表上,而是通过其他维表连接到事实表上时,其图解就像多个雪花连接在一起,故称雪花模型。雪花模型是对星型模型的扩展,它对星型模型的维表进一步层次化,原有的各维表可能被扩展为小的事实表,形成一些局部的 "层次 " 区域,这些被分解的表都连接到主维度表而不是事实表。如将地域维表分解为国家,省份,城市等维表。
它的优点是:通过最大限度地减少数据存储量以及联合较小的维表来改善查询性能,去除了数据冗余,但是在分析数据的时候,操作比较复杂,需要join的表比较多所以其性能并不一定比星型模型高,并且不利于开发。

星座模型只跟数据和需求有关系,跟设计没关系,跟星型模型和雪花模型不是同一类。星座模型是基于多个事实表,而星型模型和雪花模型是基于一张事实表的。
基本上是很多数据仓库的常态,因为很多数据仓库都是多个事实表的。所以星座不星座只反映是否有多个事实表,他们之间是否共享一些维度表。
Ralph Kimball,数据仓库大师,讲述了三个例子。对于三个例子,使用雪花模型不仅仅是可接受的,而且可能是一个成功设计的关键。
根据上述总结我们可以看出:
总结:星型还是雪花,取决于性能优先,还是灵活更优先。并且在目前实际的企业开发中,不会绝对选择一种,根据情况灵活组合,甚至并存(一层维度和多层维度都保存)。但是整体来看,更倾向于维度更少的星型模型。尤其是Hadoop体系,减少Join就是减少Shuffle,性能差距很大。(关系型数据可以依靠强大的主键索引)
注:其他 离线数仓 相关文章链接由此进 -> 离线数仓文章汇总