在数据仓库建模中,**雪花模型(Snowflake Schema)**是在星型模型(Star Schema)基础上的规范化扩展。它的核心思想是:把星型模型中冗余的维度表进一步拆分成多个规范化的子维度表,以减少数据冗余。
下面从设计步骤、表结构示例、设计原则与注意事项三个层面说明如何设计雪花模型的维度表。
雪花模型不是凭空设计的,而是从星型模型“规范化”而来。
在星型模型中,维度表通常是反规范化的,例如:
产品维度(星型)
| product_id | product_name | category | sub_category | brand |
|---|
其中:
把冗余属性拆分到子维度表中:
产品维度(雪花)
product_dim
├─ product_id
├─ product_name
├─ brand_id (FK)
├─ sub_category_id (FK)
brand_dim
├─ brand_id
├─ brand_name
sub_category_dim
├─ sub_category_id
├─ sub_category_name
├─ category_id (FK)
category_dim
├─ category_id
├─ category_name
这样就形成了“雪花”形状。
示例:
fact_sales (
sales_id,
date_id,
product_id,
store_id,
amount
)
一般建议:
事实表
fact_sales (
sales_id PK,
date_id FK,
product_id FK,
store_id FK,
sales_amount
)
维度表(雪花)
dim_product (
product_id PK,
product_name,
brand_id FK,
sub_category_id FK
)
dim_brand (
brand_id PK,
brand_name
)
dim_sub_category (
sub_category_id PK,
sub_category_name,
category_id FK
)
dim_category (
category_id PK,
category_name
)
dim_store (
store_id PK,
store_name,
city_id FK
)
dim_city (
city_id PK,
city_name,
province_id FK
)
dim_province (
province_id PK,
province_name
)
| 对比项 | 星型模型 | 雪花模型 |
|---|---|---|
| 冗余 | 高 | 低 |
| 查询性能 | 快 | 较慢 |
| 可维护性 | 一般 | 好 |
| 用户理解成本 | 低 | 高 |
如果你有具体业务场景(如电商、金融、日志分析),我可以帮你直接画一张雪花模型维度设计图。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。