问小白 wenxiaobai
资讯
历史
科技
环境与自然
成长
游戏
财经
文学与艺术
美食
健康
家居
文化
情感
汽车
三农
军事
旅行
运动
教育
生活
星座命理

星型模型(Star Schema):详解与案例

创作时间:
作者:
@小白创作中心

星型模型(Star Schema):详解与案例

引用
CSDN
1.
https://blog.csdn.net/weixin_45940433/article/details/142876194

星型模型(Star Schema)是数据仓库设计中最常用的维度建模方法之一。它通过一个中心事实表连接多个维度表,形成类似于星星的结构。这种模型简单易用,特别适合快速查询和数据分析,在企业数据仓库和商业智能(BI)系统中应用广泛。

一、星型模型的核心概念

星型模型由一个中心的事实表(Fact Table)和多个维度表(Dimension Table)组成:

  • 事实表:存储的是业务过程中的数值度量,如销售数量、销售额、利润等。这些数值通常是与业务相关的指标数据。
  • 维度表:存储的是对事实表中的度量数据进行描述的属性,如时间、产品、客户、地点等。

在星型模型中,维度表是非规范化的,这意味着维度表中的属性信息通常会重复存储,以便于简化查询。这种非规范化的设计提高了查询效率,但可能会导致一定程度的数据冗余。

二、星型模型的优缺点

优点:

  • 查询效率高:由于维度表是非规范化的,数据查询时不需要过多的表连接,查询性能很高。
  • 易于理解和使用:星型模型的设计简单直观,用户可以轻松理解其结构,并基于它进行自助式分析。
  • 便于扩展:随着业务需求的变化,可以轻松地添加新的维度或扩展现有维度表,具有良好的扩展性。

缺点:

  • 数据冗余:由于维度表没有规范化,某些维度属性可能会在不同记录中重复出现,造成一定的数据冗余。
  • 不适合频繁更新:星型模型的数据更新通常涉及大量记录的变化,性能较低,通常更适合OLAP查询,而不适合频繁的事务处理。

三、案例分析:零售业中的星型模型

为了更好地理解星型模型的应用,我们以零售企业的销售数据分析系统为例,展示如何构建一个星型模型的数据仓库。

1. 业务场景描述

假设我们为一家零售企业设计一个销售分析数据仓库,该企业希望能够从不同维度对销售数据进行分析,如:

  • 时间维度:按日、月、季度、年分析销售数据。
  • 产品维度:按产品类别、品牌分析销售数据。
  • 客户维度:按客户的基本信息和所在地区分析。
  • 地点维度:按销售门店进行分析。

2. 星型模型设计

  1. 事实表(Sales Fact Table)

事实表是模型的中心,存储的是与销售相关的度量值。在这个例子中,事实表包含销售数量、销售金额、成本等度量数据。

销售ID
时间ID
产品ID
客户ID
门店ID
销售数量
销售金额
利润
1
101
1001
501
301
3
300
50
2
102
1002
502
302
2
200
30
  1. 时间维度表(Time Dimension)

时间维度表存储与日期相关的属性,如日期、月份、季度和年份。

时间ID
日期
月份
季度
年份
101
2024-01-01
1月
Q1
2024
102
2024-01-02
1月
Q1
2024
  1. 产品维度表(Product Dimension)

产品维度表存储产品的相关信息,包括产品名称、类别、品牌等。

产品ID
产品名称
类别
品牌
1001
iPhone 15
手机
Apple
1002
Galaxy S23
手机
Samsung
  1. 客户维度表(Customer Dimension)

客户维度表存储客户的基本信息,如客户姓名、性别和地区。

客户ID
客户姓名
性别
国家
省份
城市
501
Alice
中国
北京
北京
502
Bob
美国
加州
旧金山
  1. 门店维度表(Store Dimension)

门店维度表存储门店的相关信息,包括门店名称和位置。

门店ID
门店名称
国家
省份
城市
301
Store A
中国
北京
北京
302
Store B
美国
加州
旧金山

3. 查询示例

基于这个星型模型,我们可以执行一些典型的查询。例如,假设我们想要查询2024年1月在“中国”的所有门店销售的总销售金额和利润,我们可以编写如下SQL查询:

SELECT SUM(Sales_Fact.销售金额) AS 总销售金额, SUM(Sales_Fact.利润) AS 总利润
FROM Sales_Fact
JOIN Time_Dimension ON Sales_Fact.时间ID = Time_Dimension.时间ID
JOIN Store_Dimension ON Sales_Fact.门店ID = Store_Dimension.门店ID
WHERE Time_Dimension.年份 = 2024
AND Time_Dimension.月份 = '1月'
AND Store_Dimension.国家 = '中国';

在这个查询中,我们通过事实表和维度表的外键进行连接,获取销售金额和利润的总和。由于星型模型的结构简单,维度表与事实表之间的连接关系清晰明了,这样的查询能够快速得到结果。

四、星型模型的应用场景

星型模型广泛应用于各种需要进行OLAP分析的场景,尤其是那些对查询性能要求较高的企业。以下是一些常见的应用场景:

  • 零售业:分析销售、库存、客户行为等。
  • 金融业:分析交易记录、客户账户信息等。
  • 电信行业:分析通话记录、网络使用情况等。
  • 制造业:分析生产线效率、供应链管理等。

五、总结

星型模型是一种简单、易于理解且查询性能高的维度建模方法,广泛应用于各种业务分析场景。通过将业务数据划分为事实表和维度表,星型模型能够有效地支持复杂的分析需求,并提供快速的查询响应能力。

在本文的案例中,我们展示了如何为零售企业设计一个星型模型的数据仓库,通过中心的销售事实表和多个维度表,满足企业的销售分析需求。星型模型虽然存在数据冗余问题,但其简化的结构使得查询更加高效,特别适合业务决策支持系统中的分析场景。

© 2023 北京元石科技有限公司 ◎ 京公网安备 11010802042949号