数据库 频道

星型模型、雪花模型、星座模型各有什么优缺点?

数据产品求职面试过程中,经常会被问到数据仓库相关的知识,尤其是对于数据资产管理与数据治理方向,可以说是必答题,其中一个高频的问题就是对数仓建模理论知识的了解,比如,数据仓库分层理论以及常用的建模方法,星型模型和雪花模型有什么区别,各种有何优劣势,适用场景是什么等。

一、星型模型

星型模型中有一张事实表,以及零个或多个维度表,事实表与维度表通过主键外键相关联,维度表之间没有关联,当所有维表都直接连接到“ 事实表”上时,整个图解就像星星一样,故将该模型称为星型模型。星形模型是最简单,也是最常用的模型。由于星形模型只有一张大表,因此它相比于其他模型更适合于大数据处理。其他模型可以通过一定的转换,变为星形模型。星型架构是一种非正规化的结构,多维数据集的每一个维度都直接与事实表相连接,不存在渐变维度,所以数据有一定的冗余,如在地域维度表中,存在国家 A 省 B 的城市 C 以及国家 A 省 B 的城市 D 两条记录,那么国家 A 和省 B 的信息分别存储了两次,即存在冗余。星型模型是数据仓库设计中使用的一种常见模型,其结构类似于一颗星星,由一个中心的事实表(Fact Table)和围绕在其周围的多个维度表(Dimension Table)组成。事实表包含业务过程中的度量值(如销售额、数量等),而维度表则包含用于描述这些度量值的上下文信息(如时间、地点、产品等)。

优点:

  • 简化查询:由于模型结构简单,查询逻辑较为直接,能够快速响应查询需求。

  • 简化业务报表逻辑:与高规范化的事务模型相比,星型模型简化了业务报表的生成逻辑。

  • 提升查询性能:对于只读报表类应用,星型模型能够显著提升查询性能。

  • 便于向立方体提供数据:星型模型被广泛用于高效地建立OLAP立方体,几乎所有的OLAP系统都支持这种模型。

缺点:

  • 数据完整性不足:一次性地插入或更新操作可能会造成数据异常,而在规范化模型中这种情况是可以避免的。

  • 灵活性不足:星型模型更偏向于特定目的的数据视图,对于全面的数据分析支持不够灵活。

  • 难以支持多对多关系:星型模型不自然地支持业务实体之间的多对多关系,需要额外的桥接表。

应用案例:

以电商数据仓库建设为例,星型模型可以应用于销售数据分析。例如,事实表可以记录每笔交易的销售金额、数量等信息,而维度表则包括时间维度(如交易日期)、产品维度(如产品ID、产品名称)、客户维度(如客户ID、客户姓名)等。通过星型模型,可以方便地查询和分析不同时间段、不同产品、不同客户的销售情况。

二、雪花模型

雪花模型是星型模型的一种扩展,它通过进一步规范化维度表来减少数据冗余和节省存储空间。在雪花模型中,维度表被分解为多个相关的子表,每个子表包含维度的一个子集,从而形成一个类似于雪花的结构。当有一个或多个维表没有直接连接到事实表上,而是通过其他维表连接到事实表上时,其图解就像多个雪花连接在一起,故称雪花模型。雪花模型是对星型模型的扩展。它对星型模型的维表进一步层次化,原有的各维表可能被扩展为小的维度表,形成一些局部的 " 层次 " 区域,这些被分解的表都连接到主维度表而不是事实表。如图,将地域维表又分解为国家,省份,城市等维表。

优点:

  • 减少数据冗余:通过规范化处理,雪花模型减少了数据冗余,提高了存储效率。

  • 数据一致性好:由于减少了数据冗余,更新和维护数据变得更加容易,降低了数据不一致的风险。

缺点:

  • 查询复杂:由于维度表之间的连接增多,查询操作变得更加复杂,可能会影响查询性能。

  • 性能可能受影响:在处理大量数据时,频繁的表连接操作可能会影响查询性能。

应用案例:

雪花模型可以应用于更加复杂的数据分析场景。例如,对于产品维度,可以将其拆分为产品基本信息表、产品类别表、产品供应商表等多个子表。这样,在查询产品相关信息时,可以通过连接这些子表来获取更详细的数据,同时减少数据冗余。

三、星座模型

星座模型是一种多维数据结构,它将一个维度分解成多个表来实现,每个表包含一个维度的不同层次。这种模型允许用户根据具体需求自由组合维度,进行灵活的数据分析。星座模型是由星型模型延伸而来,星型模型是基于一张事实表而星座模式是基于多张事实表,并且共享维度表信息,这种模型往往应用于数据关系比星型模型和雪花模型更复杂的场合。星座模型需要多个事实表共享维度表,因而可以视为星形模型的集合,故亦被称为星系模型

优点:

  • 结构清晰:通过规范化维度表,星座模型使数据仓库的结构更加清晰易懂,便于维护和管理。

  • 灵活性高:允许用户根据具体需求自由组合维度,进行灵活的数据分析。

  • 存储效率高:通过减少冗余数据来提高存储效率。

缺点:

  • 数据更新复杂:由于维度的规范化,当需要更新维度数据时,需要同时更新多张表,增加了数据更新的复杂性。

  • 查询性能不稳定:在某些情况下,由于多张表之间的关联操作,星座模型可能导致查询性能不稳定。

应用案例:

星座模型可以应用于具有复杂维度层次的数据分析场景。例如,对于产品维度,可以将其拆分为产品类别、产品子类别、产品等多个层次。这样,在查询产品相关信息时,可以根据需要选择不同的层次进行组合查询,从而获得更详细和灵活的分析结果。


0
相关文章