雪花模型和星型模型和三范式

本文介绍了星型模型和雪花模型在商业智能解决方案中的应用。星型模型简单直观,冗余数据提高查询效率,常用于实际运用。雪花模型则通过规范化减少数据冗余,但可能降低查询性能。两者在数据优化、业务模型、性能和ETL过程方面各有优缺点。此外,文章还提及了三范式在数据建模中的作用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

星型模型和雪花模型

在多维分析的商业智能解决方案中,根据事实表和维度表的关系,又可将常见的模型分为星型模型和雪花型模型。在设计逻辑型数据的模型的时候,就应考虑数据是按照星型模型还是雪花型模型进行组织。


星型模型

当所有维表都直接连接到“ 事实表”上时,整个图解就像星星一样,故将该模型称为星型模型。

星型模型

 

星型架构是一种非正规化的结构,多维数据集的每一个维度都直接与事实表相连接,不存在渐变维度,所以数据有一定的冗余,如在地域维度表中,存在国家A 省B的城市C以及国家A省B的城市D两条记录,那么国家A和省B的信息分别存储了两次,即存在冗余。


雪花模型

当有一个或多个维表没有直接连接到事实表上,而是通过其他维表连接到事实表上时,其图解就像多个雪花连接在一起,故称雪花模型。雪花模型是对星型模型的扩展。它对星型模型的维表进一步层次化,原有的各维表可能被扩展为小的事实表,形成一些局部的" 层次" 区域,这些被分解的表都连接到主维度表而不是事实表。如图所示,将地域维表又分解为国家,省份,城市等维表。它的优点是:通过最大限度地减少数据存储量以及联合较小的维表来改善查询性能。雪花型结构去除了数

### 星型模型雪花模型事实星座模型的概念及区别 #### 星型模式 (Star Schema) 星型模式是最简单的数据仓库建模技术之一。这种结构由一个位于中心的事实表多个维度表组成,这些维度表直接连接到事实表上,形成星星形状的图示[^1]。 - **优点** - 查询性能高:由于其简单性较少的联接操作,查询速度较快。 - 设计容易理解:对于业务分析师来说直观易懂。 - **缺点** - 数据冗余度较高:为了简化查询而牺牲了一定程度上的规范化设计原则。 ```sql SELECT d.date_name, p.product_name, SUM(f.sales_amount) FROM sales_fact f JOIN date_dim d ON f.date_key = d.date_key JOIN product_dim p ON f.product_key = p.product_key; ``` #### 雪花模式 (Snowflake Schema) 相较于星型模式而言,雪花模式进一步对各个维度进行了分解,使得每个子维度都独立存储在一个单独的表格里,从而形成了更加复杂的树状结构。 - **优点** - 减少了数据重复率:通过增加额外层次来减少冗余字段的数量。 - 更好的维护性:当某个特定领域发生变化时只需更新相应的分支部分即可。 - **缺点** - 查询效率较低:因为涉及到更多的外键关联,在执行复杂查询时可能会变慢。 - 增加了系统的复杂度:需要管理更多数量的小规模表单。 ```sql SELECT d.date_name, pc.category_name, ps.subcategory_name, SUM(f.sales_amount) FROM sales_fact f JOIN date_dim d ON f.date_key = d.date_key JOIN product_subcategory_dim ps ON f.product_subcategory_key = ps.product_subcategory_key JOIN product_category_dim pc ON ps.product_category_key = pc.product_category_key; ``` #### 事实星座模式 (Fact Constellation Schema) 事实星座模式也被称为多维簇群或多主题区域架构,它允许存在多个相互之间有关联但又各自独立的事实表共享一组共同的核心维度表。 - **优点** - 支持更广泛的数据分析需求:可以处理跨不同业务流程之间的关系。 - 提供更高的灵活性:能够轻松扩展新的实体而不影响现有结构。 - **缺点** - 复杂性的提升:随着加入越来越多的不同类型的事件记录,整体逻辑会变得更加难以掌握。 - 维护成本上升:保持各组成部分同步一致的工作量较大。 ```sql SELECT c.customer_name, o.order_date, i.invoice_total FROM customer_dim c JOIN order_fact o ON c.customer_key = o.customer_key JOIN invoice_fact i ON o.order_key = i.order_key; ```
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值