数据仓库模型中的雪花模式

⚡ 智能摘要

数据仓库建模中的雪花模式将规范化的维度表从中心事实表分支出来,形似雪花。它扩展了星型模式,减少了数据冗余,并组织了跨多个相关查找表的层次结构。

  • 🧩 核心结构: 中央事实表连接到维度表,维度表被规范化为进一步的子维度表和查找表。
  • ❄️ 正常化: 将每个维度拆分成相关表可以消除重复属性,并将层次结构推向第三范式。
  • 🌟 与星型模式的关系: 雪花模式通过规范化星形模式中扁平的、非规范化的维度表来扩展星形模式。
  • 💾 存储优势: 更小的规范化查找表可以降低磁盘使用率并消除冗余数据,从而简化维护。
  • 🔗 查询权衡: 表越多,连接就越多,这会降低查询性能并使报表复杂化。
  • 🧭 何时使用: 对于具有深层次结构的大型场景,如果存储空间节省和数据完整性至关重要,则应选择此方法。
  • 🪐 相关模式: 星系和星团的设计是在星星和雪花的概念基础上发展而来的,形成更复杂的模型。

数据仓库中的雪花模式,其规范化维度表从中心事实表分支而出。

什么是雪花模式?

A 雪花模式 数据仓库中的表是多维数据库中表的逻辑排列,其 实体关系(ER)图 形状像雪花。它是一种 维度模型 其中,中心事实表链接到维度表,而这些维度表又进一步细分为相关的子维度表。

雪花模式是星型模式的扩展。星型模式将每个维度保存在一个扁平的表中,而雪花模式则对这些维度进行规范化,将重复的数据组拆分到额外的查找表中。这种规范化消除了冗余,并创建了分支状的层级结构,这也是雪花模式名称的由来。

雪花模式示例

在以下雪花模式示例中,销售事实表位于中心,周围环绕着产品、日期和商店等维度表。地理信息并非存储在一个维度表中,而是经过规范化处理,将国家/地区移至单独的表中。

这是一个包含中心事实表和规范化国家维度表的雪花模式示例
雪花模式示例

这里,“商店”维度引用“城市”表,“城市”表引用“州/省”表,“州/省”表引用“国家/地区”表。每个值只存储一次,并通过外键链接,因此国家/地区名称不会在数百万行数据中重复出现。这种分层规范化正是雪花模式与扁平星型模式的区别所在。

雪花模式的特点

雪花模式具有以下几个主要特征:

  • 它占用更少的磁盘空间,因为规范化的维度表避免了存储重复值。
  • 只需相对较少的努力即可向模式中添加新的维度。
  • 查询性能可能会下降,因为检索数据需要连接多个表。
  • 由于需要管理更多的查找表,因此需要投入更多的维护精力。

如何设计雪花模式

设计雪花模式的第一步与任何维度模型相同,但需要额外进行规范化步骤。其目标是确定要分析的业务流程,首先将其建模为星型模式,然后规范化包含深层层次结构的维度。请按以下步骤操作:

  1. 确定业务流程和粒度。 确定事实表中的一行代表什么,例如一笔销售交易,并定义你需要报告的数值度量或事实。
  2. 构建中心事实表。 将数值度量值与指向每个维度的外键相加;这些外键通常共同构成复合主键。
  3. 定义维度表。 为每个描述性维度(例如产品、客户、日期和商店)创建一个表,并为每个表分配一个代理主键。
  4. 规范化层级结构。 将包含重复属性的每个维度拆分为子维度表,例如将“类别”从“产品”维度中移出,或者将“城市”、“州/省”和“国家/地区”从“商店”维度中移出。
  5. 使用外键连接表。 将每个子维度链接回其父表,使分支形成清晰的一对多层次结构,类似于雪花。
  6. 使用查询进行验证和测试。 运行代表性报表查询,以确认连接返回正确的结果,并且整体性能保持在可接受的范围内。

由于该设计将数据规范化为第三范式,因此需要清晰地记录连接路径,以便分析人员了解如何遍历每个分支。结构定义完成后,值得权衡该模式的收益和成本。

Snowflake模式的优势

雪花模式具有以下几个优点:

  • 它的主要优点是减少了磁盘存储空间,因为合并较小的规范化查找表可以避免重复维度数据。
  • 它提高了组件和维度级别之间关系的可扩展性。
  • 它消除了冗余,从而提高了数据完整性,并使模型更容易维护。
  • 描述性属性只需在一个地方更新,这样可以降低数据不一致的风险。

雪花模式的缺点

这种设计也存在一些需要考虑的权衡取舍:

  • 规范化的结构增加了管理许多相关表所需的维护工作量。
  • 涉及多个连接的复杂查询可能难以编写和理解。
  • 表的数量越多,连接就越多,查询执行时间就越长。
  • 企业用户通常发现分支模型比简单的星型模式更难操作。

雪花模式与星型模式

雪花模式和 星型模式 星型模式和雪花模式是数据仓库中最常见的两种多维设计,它们之间的主要区别在于规范化方式。星型模式将每个维度保存在一个扁平的、非规范化的表中,以最大限度地提高查询速度;而雪花模式则将这些维度规范化到多个相关的表中,以节省存储空间并保护数据完整性。因此,这两种模式适用于不同的需求。

方面星图雪花模式
维度表非规范化,每个维度一张表规范化为子维度表
存放由于冗余而占用更多空间占用空间更小,无冗余
查询性能更快、更少的连接速度变慢,加入次数更多
查询复杂性易于编写更复杂
最适合快速报告和商业智能大的、层级式的维度

简而言之,当查询速度和报表简洁性至关重要时,选择星型模式;当存储效率、清晰的层级结构和低数据冗余是首要考虑因素时,选择雪花型模式。许多实际的数据仓库会根据每个维度的大小和深度,将这两种模式结合起来使用。

何时使用雪花模式

雪花模式并非总是最佳选择,因此根据工作负载和报表需求来选择合适的设计至关重要。它在以下情况下往往效果最佳:

  • 维度非常大,并且包含许多重复属​​性,当它们被反规范化时会浪费存储空间。
  • 维度具有深厚的、定义明确的层次结构,例如从地区到国家到州到城市,这些层次结构自然地映射到不同的表格中。
  • 对于项目而言,数据的完整性和一致性比原始查询速度更重要。
  • 存储成本是一个真正令人担忧的问题,而大型维度表的磁盘节省意义重大。
  • 该模型馈送 OLAP 能够高效地浏览规范化层级结构的工具。

相反,当业务分析师需要快速简便地生成报告时,星型模式或混合星型集群设计通常是更合适的选择。 数据仓库架构 刻意将这两种方法结合起来,以平衡速度和存储。

什么是 Galaxy Schema?

A 银河模式 包含两个或多个事实表,这些事实表之间共享维度表。它也被称为事实星座模式,由于它可以被视为星群,因此也被称为星系模式。

示例:一个包含两个事实表并共享一致维度表的星系模式
星系模式示例

如上例所示,有两个事实表:

  1. 收入
  2. 产品

在星系模式中,事实表之间共享的维度称为一致性维度。

星系模式的特征

星系结构图具有以下特征:

  • 根据层次结构的不同层级,这些维度被划分为不同的维度。
  • 例如,如果地理有四个层次结构——地区、国家、州和城市——那么星系模式应该有四个维度。
  • 可以通过将单个星型模式拆分成多个星型模式来构建这种类型的模式。
  • 此模式中的维度很大,必须按照层次结构级别进行构建。
  • 该模式有助于汇总事实表,从而支持更好的分析和理解。

什么是星 Cluster 架构?

雪花模式包含完全展开的层级结构,这会增加复杂性并需要额外的连接操作。而星型模式则包含完全折叠的层级结构,这可能会导致冗余。最佳解决方案通常是在这两种设计之间取得平衡,这种方案被称为星型模式。 Cluster 架构。

星团示意图示例,兼具星形和雪花状设计
星号示例 Cluster 架构

交叠ping 维度在层级结构中表现为分支。当一个实体在两个不同的维度层级结构中都作为父级时,就会出现分支。这些分支实体随后被识别为具有一对多关系的分类,从而限制了设计创建的额外表的数量。

常见问题

该模式之所以得名,是因为其实体关系图像雪花一样向外辐射。将每个维度规范化为子维度表和查找表,创建了多个从中心事实表辐射出去的连接层级,形成类似雪花晶体的形状。

规范化将维度表拆分成更小的相关表,以消除重复数据。在雪花模式中,诸如类别或国家/地区之类的属性会移至各自的表中,通常达到第三范式,从而减少冗余并确保每个值只存储一次。

事实表存储可衡量的数值型业务事件,例如销售额,以及指向维度表的外键。维度表存储描述性属性,例如产品名称或地区,这些属性为事实表提供上下文信息。事实表通常比维度表大得多。

子维度(有时也称为外延表)是从主维度分支出来的规范化表。例如,“产品”维度可以链接到单独的“类别”表。这些额外的表构成了雪花模型特有的多级层次结构。

是的。许多仓库会混合使用这两种模式,只对那些受益于标准化的大尺寸物料进行标准化,同时保留……ping 较小的维度采用扁平化设计。这种混合模式,有时被称为星型模式,兼具星型模式的查询速度和雪花模式的存储节省优势。

是的。雪花模式馈送 OLAP 星型模式系统表现出色,因为其规范化的层级结构能够清晰地映射到国家、州/省和城市等下钻级别。然而,额外的连接操作会降低多维数据集的处理速度,因此,对于查询密集型的 OLAP 工作负载,星型模式有时更为合适。

AI助手可以建议需要规范化的维度,根据业务描述生成表结构,并推荐能够提升性能的索引或连接路径。它们还可以检测冗余和不一致的键,但数据工程师在应用每项建议之前都应该进行审核。

是的。 ChatGPTGitHub 副驾驶 可以根据简短的提示,为雪花模式生成 CREATE TABLE 语句和连接查询。在生产环境中运行之前,务必检查生成的键、数据类型和关系。

总结一下这篇文章: