什么是星型模型和雪花模型

星型模型(Star Schema)雪花模型(Snowflake Schema) 是数据仓库中两种经典的维度建模(Dimensional Modeling) 结构,用于组织事实表和维度表,以支持高效、直观的业务分析。

它们的核心区别在于维度表是否被规范化(Normalization)


一、星型模型(Star Schema)

✅ 定义
  • 以一个事实表为中心,多个去规范化的维度表直接连接到事实表,形成类似“星星”的结构。
  • 维度表不拆分,所有属性都冗余存储在一张宽表中。
✅ 特点
优点缺点
查询性能高:只需1次JOIN(事实表 ↔ 维度表)存储冗余:维度属性重复存储(如“手机”类目在每个商品记录中都存一遍)
结构简单直观:易于理解,适合业务人员和BI工具维度表可能很宽:属性多时,表字段数量庞大
ETL逻辑简单:维度处理逻辑集中更新维度属性时需更新整张表(对Type 1 SCD)
✅ 示例结构
                +------------------+
                |  fact_sales      |
                +------------------+
                | order_id         |
                | product_id  ─────┼───┐
                | user_id     ─────┼─┐ │
                | date_id     ─────┼─┼─┼──→ +------------------+
                | sales_amount     | │ │    | dim_product      |
                +------------------+ │ │    +------------------+
                                     │ │    | product_id (PK)  |
                                     │ │    | product_name     |
                                     │ │    | category_name    | ← 所有类目信息直接存在这里
                                     │ │    | brand            |
                                     │ │    +------------------+
                                     │ │
                                     │ └──→ +------------------+
                                     │      | dim_user         |
                                     │      +------------------+
                                     │      | user_id (PK)     |
                                     │      | user_name        |
                                     │      | city             |
                                     │      | province         | ← 省/市信息直接存在这里
                                     │      +------------------+
                                     │
                                     └────→ +------------------+
                                            | dim_date         |
                                            +------------------+
                                            | date_id (PK)     |
                                            | year, month, day |
                                            | is_holiday       |
                                            +------------------+

💡 适用场景:绝大多数BI分析、报表、即席查询。是维度建模的首选推荐模型


二、雪花模型(Snowflake Schema)

✅ 定义
  • 是星型模型的规范化扩展
  • 维度表被进一步拆分成多个关联的子维度表,形成“雪花”状的层次结构。
✅ 特点
优点缺点
节省存储空间:消除维度属性的冗余(如类目名称只存一次)查询性能较低:需要多次JOIN(事实表 → 商品表 → 类目表)
数据一致性好:维度属性集中管理,更新只需改一处结构复杂:对业务人员和SQL编写者不友好
适合高规范化要求的场景BI工具配置复杂,可能影响自助分析
✅ 示例结构(对比星型模型)
                +------------------+
                |  fact_sales      |
                +------------------+
                | product_id  ─────┼───→ +------------------+
                | ...              |     | dim_product      |
                +------------------+     +------------------+
                                         | product_id (PK)  |
                                         | product_name     |
                                         | category_id ─────┼──→ +------------------+
                                         | brand            |     | dim_category     |
                                         +------------------+     +------------------+
                                                                  | category_id (PK) |
                                                                  | category_name    | ← 类目单独成表
                                                                  +------------------+

                +------------------+
                |  dim_user        |
                +------------------+
                | user_id (PK)     |
                | user_name        |
                | city_id ─────────┼──→ +------------------+
                +------------------+     | dim_city         |
                                         +------------------+
                                         | city_id (PK)     |
                                         | city_name        |
                                         | province_id ─────┼──→ +------------------+
                                         +------------------+     | dim_province     |
                                                                  +------------------+
                                                                  | province_id (PK) |
                                                                  | province_name    |
                                                                  +------------------+

💡 适用场景

  • 存储成本极其敏感(如超大规模数据)
  • 维度属性层级极深且变化频繁(如多级组织架构)
  • 底层使用支持高效多表JOIN的MPP数据库(如Redshift, Snowflake)

三、核心对比总结

特性星型模型(Star Schema)雪花模型(Snowflake Schema)
维度表结构去规范化(宽表)规范化(拆分成多表)
JOIN次数少(通常1次)多(2次或以上)
查询性能⭐⭐⭐⭐⭐ 高⭐⭐☆ 较低
存储空间较大(有冗余)较小(无冗余)
模型复杂度简单直观复杂
维护难度
BI工具友好度非常友好一般
推荐程度首选⚠️ 谨慎使用

四、如何选择?

  • 90%以上的场景,选择星型模型
    因为现代数据仓库(如Hive, ClickHouse, Doris, Snowflake)存储成本已大幅降低,而查询性能和开发效率更重要

  • 仅在以下情况考虑雪花模型

    • 维度属性存在严重的重复(如一个类目被百万商品引用)
    • 有严格的数据库规范化要求
    • 使用的查询引擎对多表JOIN优化极好,且存储成本是瓶颈

✅ 终极建议:

“先建星型,再看是否需要雪花化。”
从星型模型开始,保持简单高效。只有当出现明确的存储或维护问题时,才局部将某些维度“雪花化”,而非全盘采用雪花模型。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

走过冬季

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值