数仓理论【范式】【维度建模】

news2024/9/28 13:18:01

数仓理论

1 范式理论

1.1 范式概念

数据建模要遵循一定的规则,在关系建模中,这种规则就是范式

采用范式结构,可以有效的降低数据的冗余性

范式在获取数据时,需要通过join拼接出数据

范式有第一范式(1NF),第二范式(2NF),第三范式(3NF),巴斯-科德范式(BCNF),第四范式(4NF),第五范式(5NF)

一般只遵循到第三范式

1.2 函数依赖

1.2.1 完全函数依赖

通过(学号,课程)可以推断出分数,但是单独用学号或者课程都不能推断出分数,这时可以说分数完全依赖于(学号,课程)

即AB能推断出C,但是A和B单独不能推断出C,这时C完全依赖于AB

1.2.2 部分函数依赖

通过(学号,课程)可以推断出姓名,但是只通过学号就能推断出姓名,这时可以说姓名部分依赖于(学号,课程)

即AB能得出C,A或B单独也能得出C,这时C部分依赖于AB

1.2.3 传递函数依赖

学号可以推断出学院名,学院名可以推断出院长,但是院长推断不出来学号,这时可以说院长传递依赖于学号

即A得出B,B得出C,但是C得不到A,这时C传递依赖于A

1.3三范式的区分

1.3.1 第一范式

1NF的核心原则为:属性不可切割

比如下面的表格,商品列中的数据可以分割成 3台 和 电脑 ,所以下面的表格不遵循1NF

商品ID商品商家ID用户ID
0013台电脑001001

修改成遵循1NF的表格为

商品ID商品商家ID用户ID数量
001电脑0010013

1NF时关系型数据库的最基本的要求,在RDBMS中创建表时,如果不符合1NF的要求,操作是不会成功的

1.3.2 第二范式

2NF的原则为:不存在部分函数依赖

比如下面的表格,属性不可切割,满足第一范式,但是课名不完全依赖于(学号,姓名),所以不满足2NF的要求

请添加图片描述

这时将表拆分成以下两个,这时就满足了2NF

请添加图片描述

请添加图片描述

1.3.3 第三范式

3NF的原则为:不存在传递函数依赖

拿上面满足2NF的第二章表来说,系主任传递依赖于学号,所以需要进行进一步的拆解

拆分之后的如下两张表满足3NF

请添加图片描述

请添加图片描述

2 关系建模和维度建模

2.2 关系建模

关系建模将数据抽象成两个概念:实体和关系,使用规范化的方式表示出来,如图所示,关系建模较为松散。
请添加图片描述

关系建模遵循三范式,数据冗余性低,但是查询相对复杂,join操作比较多导致MR较多,查询效率较低

2.3 维度建模

维度建模以数据分析为出发点,不遵循三范式,存在一些数据冗余

面向业务,将业务用事实表和维度表的方式表现出来

查询效率较高

请添加图片描述

3 维度表和事实表

3.1 维度表

维度表一般是对事实的描述信息,比如:用户、商品、日期等

维度表很宽,具有多个属性,列多

与事实表相比,行数相对较小

内容相对固定

  • 比如:时间维度表
日期IDday of weekday of year季度
2023-2-153461
2023-2-164471

3.2 事实表

事实表中每行数据代表了一个业务事件(下单,支付等)

实时表示的是实践的度量值(次数,个数,金额等)

比如:2023年2月15日,jx在京东花了40元买了一本书

维度表存储:时间、用户、商家、商品等

实时表存储:数量、价钱(40元,一本)

一个事实表的行包括:度量值、与维度表相连的外键(通常有多个外键)

事实表非常大,相对较窄,列数较少,主要存储的是外键id和度量值

经常会发生变化,会产生很多的新增数据

3.2.1 事务型事实表

以单个事务或时间为单位

比如:一笔支付记录、一个订单记录

事实表中的一行数据,一旦事务被提交,数据被插入,就不能在进行更改

更新方式为增量同步

3.2.2 周期型快照事实表

不会保留所有的数据,只保留固定时间间隔的数据

比如:每天的营业额、每月的账户余额等

再比如:购物车随时都有可能增减商品,但是只关心每天结束时购物车的情况

3.2.3 累积型快照事实表

用于跟踪业务事实的变化

比如:要累积订单从下单开始,到订单商品打包、运输、签收的各个业务阶段的数据来追踪进展情况

这个业务进行时,事实表的记录也要不断更新

4 维度模型的分类

4.1 模型的介绍

维度模型分为三种:星型模型、雪花模型、星座模型

  • 星型模型

请添加图片描述

标准的星型模型只有一层

  • 雪花模型
    请添加图片描述

雪花模型和星型模型的区别主要在于维度的层级

雪花模型较为靠近3NF,但是无法完全遵守

  • 星座模型
    请添加图片描述

星座模型包含多个事实表,多个事实表共享维度表

多个星型模型或者雪花模型会形成星座模型

4.2 模型的选择

星座模型不用进行原则,多个事实表共享维度表是正常的,是数据仓库的常态

选择星型模型还是雪花模型,取决于是性能优先还是灵活优先,在实际的开发中不会只选择一种,需要根据情况灵活组合

星型模型维度更少,可以减少join,进而减少shuffle

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/349452.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

双击-jar包无法运行解决方法

我自己是通过探索出来的方法解决的,网上的方法适合普通问题 网络流传方法 那种-jar和run.bat的就是曲解了问题意思,问题不是如何运行,而是如何双击jar包就可以直接运行。 普通小问题就是修改注册表,将java路径写进去后面加个 %1…

基于JDBC框架的事务管理

事务: Transaction, 是数据库中的一种能够保证多个写操作要么全部成功, 要么全部失败的机制在基于Spring JDBC的数据库编程中, 在业务方法上添加Transactional注解, 即可使得这个业务方法是事务性的举例, 一个银行转账操作, 转账时需要执行的sql语句大致是:UPDATE 存款表 SET 余…

前端必学的CSS制作Switch动画开关按钮演示

目录 前言 CSS 制作的 Switch 动画开关按钮 1.Html构建 2.CSS编写 3.完整代码 index.html文件 style.css文件 总结 前言 随着前端技术的不断发展与进步,界面交互的样式要求和美感也越来越高,很多网页的交互都加上了css动画,这里作者给大家分享一…

【参加CUDA线上训练营】共享内存实例1:矩阵转置实现及其优化①

【参加CUDA线上训练营】共享内存实例1:矩阵转置实现及其优化①1.完整代码2.原理介绍2.1 将各block 线程对应元素放入共享内存tile2.2 实现转置2.3 在此基础上修改参考文献本文参考Nvidia官方blog[An Efficient Matrix Transpose in CUDA C/C及其对应的github代码tra…

表情包可视化编辑、生成配置信息数据工具

合成GIF图片 - 表情包 后续,用于快速、便捷生成 img_config.js 中 要生成的GIF每一帧数据(写入头像图片信息参数); 1、先上传 写入GIF中头像 标准图,同时获取图片信息,更新 写入GIF中头像 初始值&#xff0…

5-HT2A靶向药物|适应症|市场销售-上市药品前景分析

据世界卫生组织称,抑郁症是一种多因素疾病,影响全球约3.5 亿人。中枢神经系统最广泛的单胺 - 血清素 (5-HT) 被认为在这种情况的病理机制中起着至关重要的作用,并且神经递质的重要性被“血清素假说”提升,将抑郁症的存在联系起来 …

配置Qt Creator

前言 为了使Qt Creator更像您最喜欢的代码编辑器或IDE,您可以更改键盘快捷键、配色方案、通用高亮显示、代码片段和版本控制系统的设置。 检查生成和运行设置 Qt Creator是一个集成开发环境(IDE),可以用来开发Qt应用程序。虽然您可以使用Qt Installer…

聊天不发表情包会不习惯吗,Python带你轻松采集上万个表情包

前言 (。・∀・)ノ゙嗨 大家好,这里是小圆 聊天没表情包你会有点不习惯的感jio吗 就比如新注册了个qq或者微信再或者企业微信 emmm我就是这样拿到新账号后,跟别人聊聊天想发送表情包 ,…

C++-类和对象(下)

C-类和对象(下)一,const成员函数二,再谈构造函数1,初始化列表2,explicit关键字三,static成员四,友元(friend)1,全局函数做友元2,类做友…

冷冻电镜 - ChimeraX Density Map 密度图 操作

欢迎关注我的CSDN:https://spike.blog.csdn.net/ 本文地址:https://blog.csdn.net/caroline_wendy/article/details/129055160 由冷冻电镜所生成的Volume,需要观察其内部结构,使用ChimeraX进行操作。 加载Volumes,例如my_volume.mrc 效果如下: 高斯滤波 在命令行(Co…

python 数据分析可视化实战 超全 附完整代码数据

代码数据:https://download.csdn.net/download/qq_38735017/873799141.1 数据预处理1.1.1 异常值检测①将支付时间转为标准时间的过程中发生错误,经排查错误数据为‘2017/2/29’,后将其修改为‘2017/2/27’。②经检测发现部分订单应付金额与实付金额都为…

解决jupyter以及windows系统中pycharm编译器画图的中文乱码问题大全

一、jupyter环境下中文乱码问题解决 我们在jupyter的notebook中使用matplotlib画图的时候,经常性的会遇见一些中文乱码显示□的情况,如下所示: 在此,网上给出的方法大多是以下的解决方法: import matplotlib.pyplot as pltplt.rcParams[fo…

界面组件Telerik UI for WinForms R1 2023——全新的Windows 11主题

Telerik UI for WinForms拥有适用Windows Forms的110多个令人惊叹的UI控件。所有的UI for WinForms控件都具有完整的主题支持,可以轻松地帮助开发人员在桌面和平板电脑应用程序提供一致美观的下一代用户体验。Telerik UI for WinForms组件发布了2023年第一个重大版本…

QCon演讲实录(下):多云管理关键能力实现与解析-AppManager

在上篇中,我们已经基本了解了多云管理。现在,我们将深入探讨多云管理关键能力实现:AppManager。 什么是AppManager? 上面我们讲了理论、我们自己使用的交付流程和整体架构,下面我们进入关键能力实现与解析的环节&…

Allegro如何通过视图显示区分动态和静态铜皮操作指导

Allegro如何通过视图显示区分动态和静态铜皮操作指导 用Allegro做PCB设计的时候,通常动态和静态铜皮是无法通过视图显示区分的,只能通过show element查看得知,如下图 左边铜皮是动态铜皮,右边是静态铜皮 但Allegro可以通过一些设置让动静态铜皮以不同效果显示出来 具体操…

Elasticsearch:使用 intervals query - 根据匹配项的顺序和接近度返回文档

Intervals query 根据匹配项的顺序和接近度返回文档。Intervals 查询使用匹配规则,由一小组定义构成。 然后将这些规则应用于指定字段中的术语。 这些定义产生跨越文本正文中的术语的最小间隔序列。 这些间隔可以通过父源进一步组合和过滤。 上述描述有点费解。我…

【计算机网络】HTTPS协议原理

文章目录一、认识HTTPS协议二、为什么要发明HTTPS三、HTTP与HTTPS的区别四、常见的加密方式1. 对称加密2. 非对称加密3. 数据摘要4. 数字签名五、HTTPS的原理探究方案1:只使用对称加密方案2:只使用非对称加密方案3:双方都使用非对称加密方案4…

2.15学习总结

上次被学长的问题给问住了,突然发现自己动规有点糊涂,然后就去屁颠屁颠的复习,找几个之前做过的题,突然发现,竟然还是写了好久才写出来,怎么说呢,信心被强烈打击到,然后自己找了一个…

MyBatis 之二(增、删、改操作)

文章目录1. 修改操作1.1 在 mapper&#xff08;interface&#xff09;里面添加修改方法的声明1.2 在 XMl 中添加 <update> 标签和修改的 sql 代码1.3 在 UserMapper 中右键 Generate 点击 Test 生成 update 测试类2. 删除操作2.1 在 mapper &#xff08;interface&#x…

重生之我是赏金猎人-SRC漏洞挖掘(六)-记一次有趣的客户端RCE+服务端XXE挖掘

0x01 起因 朋友给某甲方做渗透测试&#xff0c;奈何甲方是某知名保险&#xff0c;系统太耐艹&#xff0c;半天不出货 兄弟喊我来一块来看&#xff0c;于是有了本文 0x02 客户端RCE一处 朋友把靶标发给我看了下&#xff0c;除了两个下载链接啥也没有 链接下载下来的东西如图…