首页 > 其他分享 >数仓:建模理论

数仓:建模理论

时间:2023-02-15 19:45:03浏览次数:28  
标签:数仓 快照 函数 理论 202301 建模 业务 维度 事实

数仓建模理论

范数理论

函数依赖

完全函数依赖

设 \(X,Y\) 是关系 \(R\) 的两个属性集合,\(X'\) 是 \(X\) 的真子集,存在 \(X\rightarrow Y\),但是对每一个 \(X'\) 都有 \(X'!\rightarrow Y\),则称 \(Y\) 完全函数依赖于 \(X\)。

例如:学号和课程可以推断出分数,但是单独靠学号是不能推断出分数,所以分数完全函数依赖于学号和课程。

部分函数依赖

假如 \(Y\) 函数依赖于 \(X\),但是 \(Y\) 并不完全函数依赖于 \(X\),则称 \(Y\) 部分函数依赖于 \(X\)。

例如:学号和课程可以推断出姓名,但是单独靠学号也可以推断出姓名,所以姓名部分函数依赖于学号和课程。

传递函数依赖

设 \(X,Y,Z\) 是关系 \(R\) 中互不相同的属性集合,存在 \(X\rightarrow Y(Y!\rightarrow X),Y\rightarrow Z\),则称 \(Z\) 传递函数依赖于 \(X\)。

例如:学号可以推断出院系,院系可以推断出系主任,而院系推断不出学号,则称系主任传递函数依赖于学号。

第一范式

核心原则:属性不可分割

ID 商品 商家
01 5台电脑 XXX旗舰店

上述表格设计不符合第一范式,因为“商品”这一列的数据不是原子数据项,是可以分割的。

ID 商品 数量 商家
01 电脑 5 XXX旗舰店

第一范式是所有关系型数据库最基本的要求。

第二范式

核心原则:不能存在部分函数依赖

学号 姓名 课程名 分数
202301 小明 数据结构 90
202301 小明 高数 88

上述表的主键为(学号,课程名),显然分数是完全函数依赖于(学号,课程名)的,但是姓名是部分函数依赖于(学号,课程名)。因此要去掉部分函数依赖,得到以下两张表。

学号 课程名 分数
202301 数据结构 90
202301 高数 88
学号 姓名
202301 小明

第三范式

核心原则:不能存在传递函数依赖

学号 姓名 系名 系主任
202301 小明 计软系 张三
202302 小红 经济系 李四

上述表存在函数依赖,学号可以推出系名,系名可以推出系主任,但是系主任推不出学号。因此要去掉传递函数依赖,得到以下两张表。

学号 姓名 系名
202301 小明 计软系
202302 小红 经济系
系名 系主任
计软系 张三
经济系 李四

维度模型

维度模型将复杂的业务通过事实维度两个概念进行呈现。事实通常对应业务过程,而维度通常对应业务过程发生时所处的环境。维度建模以数据分析作为出发点,为数据分析服务。

维度模型

事实表

包含与该业务过程有关的维度引用(维度表外键)以及该业务过程的度量(通常是可累加的数字类型字段)。

事实表通常列较少,但行较多,且行的增速快。

事实表有三种类型:事务型事实表、周期快照事实表和累积快照事实表。

事务型事实表

记录各业务过程,保存各业务过程的原子操作事件(最细粒度的操作事件)。

  1. 选择业务过程:业务过程可以概括为一个个不可拆分的行为事件,如下单、付款和退单等。
  2. 声明粒度:精确定义每张事务型事实表的每行数据表示什么,应该尽可能选择最细粒度。
  3. 确定维度:确定与每张事务型事实表相关的维度有哪些。
  4. 确定事实:事实是指每个业务过程的度量值(通常是可累加的数字类型的值,例如次数、个数和金额等)。

对于某些特定类型的需求,事务型事实表的逻辑可能会比较复杂,或者效率会比较低下。

  • 存量型指标:有一需求要统计截至当日的各用户虚拟货币余额。由于获取货币和使用货币均会影响到余额,故需要对两张事务型事实表进行聚合,且区分两者对余额的影响。
  • 多事务关联统计:有一需求要统计最近30天,用户下单到支付的时间间隔的平均值。需要找到下单事务事实表和支付事务事实表,过滤出最近 30 天的记录,然后按照订单 id 对两张事实表进行关联。

周期快照事实表

以具有规律性的时间间隔来记录事实,主要用于分析一些存量型(例如商品库存,账户余额)或者状态型(空气温度,行驶速度)指标。

状态型指标往往是连续的,无法捕获其变动的原子事务操作,所以只能定期对其进行采样,构建周期型快照事实表。

  1. 确定粒度:粒度可由采样周期(常选择每日)和维度(统计每个仓库中每种商品的库存)描述。则该表粒度为每日-仓库-商品。
  2. 确认事实:可根据统计指标决定,例如指标为统计每个仓库中每种商品的库存,则事实为商品库存。

累积快照事实表

基于一个业务流程中的多个关键业务过程联合处理而构建的事实表,如交易流程中的下单、支付、发货、确认收货业务过程。主要用于分析业务过程(里程碑)之间的时间间隔等需求。

订单 id 用户 id 下单日期 支付日期 发货日期 收货日期 订单金额 支付金额
1001 0001 2023-2-12 2023-2-13 2023-2-13 2023-2-13 1000 1000
  1. 选择业务过程:选择一个业务流程中需要关联分析的多个关键业务过程,多个业务过程对应一张累积型快照事实表。
  2. 声明粒度
  3. 确认维度:每各业务过程均需要一个日期维度。
  4. 确认事实

维度表

维度表围绕业务过程所处的环境进行设计。主要包含一个主键各种维度字段(维度属性)

设计步骤

  1. 确定维度:理论上每个相关维度均需对应一张维度表,但是可能存在多个事实表与同一个维度都相关的情况,这时只创建一张维度表。当维度属性很少时,则不创建维度表,把属性添加到事实表中,这个操作叫维度退化
  2. 确定主维表和相关维表:相关维表的粒度通常与主维表相同。
  3. 确定维度属性:尽可能生成丰富的维度属性,尽量不使用编码,尽量沉淀出通用的维度属性。

维度设计要点

  • 规范化:使用一系列范式设计数据库的过程,减少数据冗余,增强数据的一致性。规范化后得到的维度模型称为雪花模型
  • 反规范化:将多张表的数据冗余到一张表,减少 \(join\) 操作,提高查询性能。反规范化后得到的模型称为星型模型

维度属性通常不是静态的,而是会随时间变化的,保存维度数据的历史状态有如下方法:

  • 全量快照表:优点是简单而有效,缺点是浪费存储空间。
  • 拉链表:记录每条信息的生命周期,一旦生命周期结束,就重新开始一条新的记录,并把当前日期放入生效开始日期。该方法适用于每天变化的比例不高的维度。

标签:数仓,快照,函数,理论,202301,建模,业务,维度,事实
From: https://www.cnblogs.com/fireonfire/p/17124434.html

相关文章

  • 数据仓库建模
    一、建模方法论数仓的建模或者分层,其实都是为了更好的去组织、管理、维护数据,所以当你在更高的维度去看的话,所有的划分都是为了更好的管理。1.访问性能 能够快速查询......
  • 农村高中生源转型期提升学生二次函数建模能力的课堂探究
     ......
  • 网络流与各种建模(I)
    网络流与各种建模(I)网络流基础这里默认读者学习过网络流和MCMF,这里仅作复习网络流解决的问题是给一个源点和汇点,每个边有最大流量,最大化从源点放水到汇点的速率。网络......
  • Spider理论系列-bs4
    写在前面bs4最直接的应用就是我在爬取​​Spider实战系列-爬取鬼吹灯小说_浅辄的技术博客_51CTO博客​​这一篇里,我同时使用了bs4和xpath,相对于特定的情况,速度也会有所......
  • 期末复习 | CUMT数据结构理论
    数据结构复习基础知识O(1)<O(logn)<O(n)<O(nlogn)<O(n^2)<O(n^3)<O(2^n)线性表掌握顺序表的存储结构以及基本操作操作的代码实现以及它的优缺点——代码......
  • 极限理论
    极限理论数列极限的定义数列:无穷多个数排成一列:a1,a2,a3....;记成{an};an叫做数列的一般项或通项;n叫做项的下标或项数;N->R;{an}是一个函数;几种数列 (1):1,2,3...........
  • 代码随想录算法Day10 | 理论基础 232.用栈实现队列 225. 用队列实现栈
    理论基础栈是先进后出,队列是先进先出。如图所示。232.用栈实现队列题目链接:232.用栈实现队列-力扣(LeetCode)题目请你仅使用两个栈实现先入先出队列。队列应当支......
  • Spider理论系列-Re(正则表达式)
    正则是抓取网页数据的入门技能之一,正则可以全局通配你想要的数据,就比如:​​Spider实战系列-抓取《一人之下第三季》_浅辄的技术博客_51CTO博客​​这篇文章里,我想要通过源......
  • 数仓:分层
    数据来源层ODS(OperationDataStore):数据基本上从源表中拉过来,经过抽取、洗净、传输(ETL)后装入本层,大体上按源业务的分类方式而分类的。数据仓库层DW(DataWarehouse):从OD......
  • MySQL——优化(一)理论基础
    一、InnoDB和MyISAM的存储方式1、InnoDB存储方式使用的B+Tree数据结构,物理存储角度是聚簇索引对于主键索引:叶子节点会存储主键以及主键所对应数据块的指针;对应非主......