维度建模方式与过程

原址:https://blog.csdn.net/qq_37312857/article/details/123322490

1.星型模式

  星型模式是最常用的维度建模方式,星型模式是以事实表为中心,所有维度表直接连接在事实表上,像星星一样;

  构成:一个事实表与一堆维表构成

  特点:1.维表只和事实表关联,维表之间没有关联;2.每个维表主键为单列,且该主键放在事实表中,作为两边连接的外键;

     3.以事实表为核心,维表围绕核心呈星型分布;

 

 2.雪花模式

  雪花模式是对星型模式的扩展,雪花模式的维度表是可以拥有其他维度表的主键,虽然这种模式相对星型更加规范一些,但是由于这种模式不太容易理解,维护成本高,性能方面需要关联多层维表,相对较低,所以一般不常用;

 

 3.星座模式

  星座模式由星型模式延伸而来,星型模式是基于一个事实表,而星座模式是基于多张事实表,而且共享维度信息,此前两种维度建模方式都是多维表对应单事实表,但是很多时候维度空间内的事实表不止一个,而一个维度表也会被多个事实表用到,在业务发展后期,绝大部分的维度建模都采用的是星座模式;

 

 

4.维度建模过程

  维度建模表类型有事实表,维度表;模式有星型模式,雪花,星座;那么在实际业务中我们拿到一堆数据,怎么进行数仓建设呢;

  数仓工具箱中维度建模四步走:(无论什么业务,按照这四个步骤,顺序不能乱)

 

 1.选择业务过程

  维度建模是紧贴业务的,所以必须以业务为根基进行建模,那么选择业务过程,即在整个业务流程中选取我们需要建模的业务,根据运营提供的需求及日后的易扩展性等选择业务,比如商城,整个商城流程分为商家端,用户端,平台端,运营需求是总订单量,订单人数,及用户购买情况等;那么我们就选择用户端数据,其他两个先不考虑,,业务的选择非常重要,因为后续所有的步骤都是基于此业务数据展开的;

2.声明粒度

  例如:对于用户来说,一个用户有一个身份证号,一个户籍地址,多个手机号,多张银行卡,那么与用户粒度相同的粒度属性有身份证粒度,户籍地址粒度,比用户粒度更细的粒度有手机号粒度,银行卡粒度,存在一对一关系的就是相同粒度;为啥要相同粒度,因为维度建模中要求我们在同一事实表中,必须具有相同的粒度,不同粒度的数据建立不同的事实表,并且从给定的业务过程获取数据时,最好从关注原子粒度开始设计,也就是从最细粒度开始,因为原子粒度能够承受无法预期的用户查询,但是上卷对于查询性能的提升很重要,所以对于有明确需求的数据,我们建立针对需求的上卷汇总粒度,对于需求不明朗的数据我们建立原子粒度;

3.确认维度

  维度表是作为业务分析入口和描述性标识,所以也被称为数据仓库的灵魂,在一堆数据中怎么确定哪些是维度属性呢,如果该列是对具体值的描述,是一个文本或常量,某一约束和行标识的参与者,此时该属性往往是维度属性,数仓工具箱中告诉我们牢牢掌握事实表的粒度,就能将所有可能存在的维度区分开,并且要确保维度表中不能出现重复数据,应使维度主键唯一;

4.确认事实

  事实表是用来度量的,基本上都以数量值表示,事实表中每行对应一个度量,每行的数据是一个特定级别的细节数据,称为粒度,维度建模的核心原则之一是同一事实表中的所有度量必须具有相同的粒度,这样能确保不会出现重复计算度量的问题,有时往往不能确定该列数据是事实属性还是维度属性,记住最实用的事实就是数值类型和可加类事实,所以通过分析该列是否是一种包含多个值并作为计算的参与者的度量,这种情况下该列往往是事实;

 

posted @   M_Fight๑҉  阅读(274)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 一个费力不讨好的项目,让我损失了近一半的绩效!
· 实操Deepseek接入个人知识库
· CSnakes vs Python.NET:高效嵌入与灵活互通的跨语言方案对比
· 【.NET】调用本地 Deepseek 模型
· Plotly.NET 一个为 .NET 打造的强大开源交互式图表库
点击右上角即可分享
微信分享提示