数据仓库建模中的星型模式是什么?

⚡ 智能摘要

数据仓库建模中的星型模式将中心事实表置于周围维度表的核心,创建出非规范化的星形设计,从而简化分析查询、加快报表生成速度,并为跨商业智能平台的 OLAP 多维数据集提供支持。

  • 🌟 核心结构: 中央事实表直接链接到非规范化维度表,形成星形结构,该结构也因此得名于该模式。
  • 📊 事实表: 事实表存储诸如销量和收入之类的度量,以及连接到每个周围维度的外键。
  • 🗂️ 尺寸表: 维度表包含产品、经销商、分支机构和日期等描述性属性,使分析师能够对事实进行切片和筛选。
  • ⚡ 查询性能: 非规范化维度意味着更少的连接,因此星型模式可以简化 SQL 并快速处理大型数据集并生成报告。
  • ❄️ 星蝶公主 vs 雪花: 星型模式将每个维度保存在一个表中,而雪花模式将维度规范化为链接的子维度表。
  • 🛠️ 设计步骤: 构建星型模式遵循 Kimball 流程:选择业务流程,设置粒度,选择维度,然后定义事实。
  • 🧊 OLAP 和 BI: 星型模式为 OLAP 多维数据集提供数据,并被 BI 工具广泛支持,但严重的非规范化会削弱数据完整性。

数据仓库建模中的星型模式,具有一个中心事实表和围绕它们的维度表。

什么是星型模式?

A 星型模式 数据仓库中的星型模式是一种建模结构,其中一个中心事实表连接到多个相关的维度表。它被称为星型模式,因为其布局类似于星星,事实表位于中心,维度表像星点一样向外辐射。

星型模式是数据仓库中最简单的模式,也称为星型连接模式。由于其维度表是非规范化的,因此该模型针对查询超大型数据集进行了优化,使其成为一种常见的选择。 维度建模 和报告。

什么是多维模式?

A 多维模式 专为数据仓库系统建模而设计。这些模式满足了为分析目的而构建的超大型数据库的独特需求。 OLAP 而不是用于日常交易处理。

数据仓库模式类型: 多维模式主要有三种类型,每一种都有其自身的优势。

  • 星图 – 一个直接连接到非规范化维度表的中心事实表。
  • 雪花模式 – 星型模式的扩展,其中维度被规范化为额外的子维度表。
  • 星系图 – 也称为事实星座,它使用多个共享公共维度表的事实表。

由于雪花模式直接建立在星型模式之上,因此在详细学习星型模式示例之前,比较这两个模型会很有帮助。

星型模式与雪花模式

星形图和 雪花模式 两者都围绕事实表和维度表组织数据,但它们在维度的存储方式上有所不同。星型模式将每个维度保存在单个非规范化的表中,而雪花模式则将这些维度规范化到多个相关的表中。

  • 结构体: 星形模式扁平而简单;雪花模式将维度分支成子维度。
  • 查询速度: 星型模式需要的连接更少,因此查询通常运行速度更快,SQL 也更简单。
  • 存储: Snowflake模式消除了冗余,因此占用空间更少,但增加了设计复杂性。
  • 数据的完整性: 归一化的雪花维度能更好地保证完整性,而非归一化的星形维度则有利于性能。
  • 易于使用: 星型模式更容易被分析人员理解和维护,而雪花型模式则需要更精心的设计。

在实践中,团队通常会为需要快速、直接报告的数据集市和仪表板选择星型模式,而当节省存储空间和严格一致性更为重要时,则会选择雪花模式。

星形图示例

在以下星型模式示例中,事实表位于中心,并保存每个维度表的键,例如 Dealer_ID、Model_ID、Date_ID、Product_ID 和 Branch_ID,以及可衡量的属性,例如销售数量和收入。

星型模式数据建模示例,其中包含一个中心销售事实表,该表与产品、经销商、分支机构、日期和型号维度表连接。
星型模式图示例

每个周围的维度表都为这些度量值添加了描述性上下文,因此单个查询可以按经销商、型号、日期、产品或分支机构对销售事实进行分组或筛选,而无需连接任何其他表。

事实表

星型模式中的事实表包含事实信息,并与维度表相连。事实表包含两种类型的列:

  • 用于存储事实或指标的列。
  • 链接到每个维度表的外键。

通常情况下,事实表的主键是一个复合键,由构成该表的所有外键组成。

事实表可以包含详细级别的事实,也可以包含汇总级别的事实。包含汇总事实的事实表通常称为汇总表,它们通常包含已经汇总到一定级别的事实。

尺寸表

维度是一种将数据按层次结构分类的结构。没有层次结构和级别的维度称为扁平维度或列表。每个维度表的主键都是事实表复合主键的一部分。

维度属性是描述性的文本属性,用于描述维度值,例如产品名称或城市。由于维度表存储的是这种描述性上下文,而不是事务事件,因此事实表通常比维度表大得多。

如何设计星型结构

星型模式的设计遵循 Ralph Kimball 推广的维度建模方法。其目标是围绕清晰、可重用的维度组织业务度量,从而使最终模型易于查询和快速生成报告。以下五个步骤概述了大多数维度建模项目遵循的流程,从最高层次的业务问题逐步深入到物理事实表和维度表。

  1. 确定业务流程: 选择您要分析的活动,例如销售、发货ping或者库存。此决策定义了事实表将衡量的内容。
  2. 申报粮食: 确定每行事实所代表的详细程度,例如每行代表一个商品项、每笔交易或每天。清晰的粒度有助于保持模型的一致性。
  3. 确定尺寸: 列出对事实进行切片所需的描述性上下文,例如产品、客户、经销商、分店和日期。每一项都将成为一个属性维度表。
  4. 找出事实: 确定企业想要的数值指标 track,例如销量、收入或成本,并将它们放入中央事实表中。
  5. 打造明星: 通过外键将事实表连接到每个维度表,保持ping 维度被非规范化,因此该图形成一个由维度包围的单一中心事实表。

构建好星型表之后,为每个维度添加代理键,确保每个事实表都关联一个日期维度,并确认所有事实表的粒度一致。此外,最好先加载原子性的、最低级别的数据,因为汇总表可以稍后生成。遵循这些规则可以优化模式,使其兼具高性能和简洁性。 数据仓库 报告。

星型模式的特点

  • 星型模式中的每个维度都仅由一个维度表表示。
  • 每个维度表都包含自己的一组属性。
  • 维度表通过外键与事实表连接。
  • 维度表之间没有连接。
  • 事实表包含键和度量。
  • 星型架构易于理解,并能实现最佳磁盘利用率。
  • 维度表未规范化。例如,在上面的示例中,Country_ID 没有像其他维度表那样单独的 Country 查找表。 OLTP 设计将会。
  • 该模式被众多商业智能工具广泛支持。

星型模式的优点

星型模式具有诸多优点,使其成为数据仓库设计的热门起点:

  • 从高度规范化的事务数据源获取数据时,星型模式使用比其他模式更简单的连接逻辑。
  • 星型模式简化了常见的业务报告逻辑,例如期间报告和截至报告。
  • 星型模式被 OLAP 系统广泛用于高效构建多维数据集,并且在大多数主流 OLAP 系统中,星型模式可以作为数据源,而无需设计多维数据集结构。
  • 通过启用可应用于查询的特定性能调优,查询处理器可以提供更好的执行计划。

星形图的缺点

  • 由于模式高度非规范化,数据完整性没有得到严格执行。
  • 它在满足高级分析需求方面不够灵活。
  • 星型模式不会强化业务实体之间的多对多关系。

何时使用星形图

当快速、可预测的查询性能比节省存储空间更重要时,星型模式是理想之选。由于该模型保持维度表的非规范化状态,并减少了连接次数,因此非常适合业务用户需要反复对大量历史数据运行类似报表、仪表板和聚合操作的分析型工作负载。

星型模式非常适合的典型情况包括:

  • 数据集市: 部门 数据集市 结构清晰易懂,关系简单明了。
  • 商业智能仪表盘: 商业智能 工具可以清晰地映射到星型模式,因此可以快速构建报告和可视化效果。
  • OLAP 多维数据集: 星型模式是 OLAP 多维数据集、聚合和切片分析的天然来源。

如果优先级转向最小化存储、严格的数据完整性或深度且不断变化的层级结构,那么雪花模式或更规范化的设计可能更合适。许多团队甚至将两者结合起来,从星型模式开始,然后仅对真正需要规范化的维度进行规范化。

常见问题

事实表存储可衡量的数值型业务事件,例如销量或收入,以及外键。维度表存储描述性属性,例如产品、日期或分支机构,这些属性为事实表提供上下文信息。事实表通常比维度表大得多。

星型模式是反规范化的。每个维度都存储在单个表中,没有查找子表,这减少了连接次数并加快了查询速度。但缺点是存在一些数据冗余,并且与规范化的雪花模式相比,数据完整性的执行力度较弱。

星系模式(也称为事实星座)包含多个事实表,这些事实表共享公共维度表。它适用于复杂的数据仓库。 trac可以同时处理多个业务流程,但与单一事实星型模式相比,设计和查询起来更困难。

经典的星型模式使用一个中心事实表。当数据仓库需要多个共享维度的事实表时,设计就变成了星系模式或事实星座模式。ping 每个星型一个事实表,这样查询简单,模型也易于理解。

代理键是由系统生成的标识符(通常为整数),用作维度表的主键,而不是业务键。它能保持连接速度快,在源键更改时保持稳定,并支持 trac国王的历史性变化及其维度。

是的。 Power BI 针对星型模式进行了优化,因此将数据建模为一个事实表,并用维度包围,可以提高性能,简化 DAX 度量,并且比雪花或扁平设计更容易管理关系。

AI助手可以根据模式描述建议事实表和维度表,推荐数据粒度,并标记缺失的日期维度或代理键。它们可以加快建模速度,但数据工程师在将其部署到生产环境之前应该审核所提出的设计方案。

是的。 ChatGPT 和 GitHub 副驾驶 可以根据简短提示编写事实表和维度表的 CREATE TABLE 和连接查询。 Rev在运行 SQL 之前,请查看生成的键、数据类型和粒度,因为 AI 可能会误读需求。

总结一下这篇文章: