数仓模型示例

数仓模型案例
一、范式建模
1.零范式
为便于分级说明三范式的特点,我们将不满足任何范式即无范式的数据称为零范式,假设它只满足一个最基本的条件——数据中不存在重复数据。
假设根据零范式的定义数据库中有一张保险订单统计表,表中包含了用户id、保险id、用户名、注册省份、注册城市、注册区县、保险名称、购买信息(价格、数量)、总保费、购买日期。具体情况如下图:

2.一范式
在零范式的基础上加上字段具有原子性即属性不可分这个条件后便形成了符合一范式的表。基于上面的保险订单统计表一范式和零范式的区别主要在于将表中的“购买信息”这个字段进行了拆分,形成了“保险价格”和“购买数量”两个字段,这样的数据表我们称其满足一范式。

3.二范式
相对于一范式,二范式的条件更为严苛。如果要满足二范式,则数据表需要确保每一列都和主键完全相关,而不能只与主键的某一部分相关(主要针对联合主键而言,我们这里的保险订单统计表使用的即为联合主键)。
在保险订单统计表中,购买数量、总保费和购买日期属于完全依赖联合主键(用户ID,保险ID),但是保险名称和保险价格只依赖于保险ID,用户信息则只依赖于用户ID,它们都属于对主键部分依赖。显然,这个时候保险订单统计表不满足二范式,下面对其进行调整。
将用户信息和保险信息从原表中拆出来单独建表存放,形成如下三张表:保险订单统计表,保险信息表和用户信息表。

4.三范式
三范式需要确保数据表中的每一个字段都直接依赖该表的主键,而不能间接依赖。经过二范式的拆解后,已经将最初的一张表变成了三张表。在这三张表中,我们发现用户信息表中的用户ID和注册地址信息是存在传递依赖的,即:用户ID决定地址ID,地址ID决定省份、城市、区县,这属于传递依赖。
因此,需要将用户信息表地址信息表中的地址单独拎出来才满足三范式。

以上即为三范式建模的一个大致流程,从上面的模型可以看出三范式建模可以最大限度避免数据的冗余,同时整个业务看起来也更加清晰,不足点是使用起来需要多表关联,不太方便。这类模型比较适合用于数仓公共层中的比较稳定的业务。
二、维度建模
维度建模主要以分析决策的目的进行模型构建,构建的数据模型为分析需求提供服务,因此它重点解决用户如何更快速完成分析需求,同时还有较好的大规模复杂查询的响应性能。维度建模的核心部分为事实表和维度表。
事实表:用于存储某一主题下的主干信息。比如上面的保险订单统计,各个用户保险的购买情况即为该主题的主要关注内容。
维度表:指对事实表中主题进行分析的角度数据。比如保险维度表表和用户维度。
用维度建模的方式进行设计,有如下三张表:保险订单统计事实表、保险维度表和用户维度表。这种设计,在范式理论上符合二范式,也称为反三范式。

使用维度建模形成的模型也称为星型模型,可以将事实表当作是中间最大的一颗星星,维度表围绕在事实表周围。星型模型进行扩展后可以形成雪花模型,两者之间的主要区别在于维度表是否都和事实表直接相连。星型模型是将同一主题的维度信息冗余在了一张维表中。雪花模型如下图(其中购买月份还可以继续拆分为月和年的维表):

有冗余的事实表
维度建模中星型模型的设计符合范式建模中的二范式的设计,但是在实际工作中我们经常会在事实表中存放更多的信息,以便使用起来更方便。
如下图,冗余后的事实表的设计在范式建模中就只满足一范式了。

三、数据仓库和数据库的侧重点
在大部分的数据仓库设计中,一般是不怎么考虑是否满足第几范式的,特别是互联网场景下的数据建设就更少考虑数据仓库和范式之间的关系,但是这并不妨碍我们去理解它们设计背后的出发点。至少我们可以搞明白为什么数据仓库设计不用过多关注范式。
我们这里聊到的数据库的设计,可以理解是联机事务处理OLTP(On-Line Transaction Processing),主要是基本的、日常的事务处理,例如银行交易。直白点讲,就是各种增删改查,需要对数据进行操作。而数据仓库,我们可以理解为是联机分析处理OLAP(On-Line Analytical Processing),主要是面向日常数据分析,它的数据主要是插入和查询,基本不涉及删除和修改操作。
本文的主人公-范式,主要优化的是增删改的问题,比如数据冗余、更新异常、删除异常等。这些也正是数据库设计比较关注的点。而数据仓库对这方面的关注度则比较少,数据仓库更关注的是使用是否方便,查询效率是否高,因此在设计数据仓库的时候不必太多关注范式的设计,一般一范式或者二范式就已经够用。
另外,数据仓库不同层级的设计也会用到不同的建模方式,比如说接近业务数据的层次,会更倾向使用范式建模,接近数据分析的层次则会更倾向于维度建模。

原文地址:http://blog.51cto.com/abezoo/2338399

时间: 2024-10-13 23:51:06

数仓模型示例的相关文章

干货:解码OneData,阿里的数仓之路。

免费开通大数据服务:https://www.aliyun.com/product/odps 据IDC报告,预计到2020年全球数据总量将超过40ZB(相当于4万亿GB),这一数据量是2013年的10倍.正在"爆炸式"增长的数据的潜在巨大价值正在被发掘,它有可能成为商业世界的"新能源",变革我们的生产,影响我们生活.当我们面对如此庞大的数据之时,如果我们不能有序.有结构的进行分类组织和存储,那么在价值被发现前,也许数据成本灾难已经来临.它犹如堆积如山的垃圾,给我们企业

调度、模型、同步与任务——阿里云大数据数仓建设性能优化方案

摘要:对于阿里云大数据数仓建设性能优化而言,主要可以从调度优化.模型优化.同步优化以及任务优化这四个方面着手.其实,对于性能优化而言,最终还是会归结到"资源"之上,所以资源是否足够,分配是否合理也是我们在进行性能优化时必须考虑的关键所在. 本文将主要围绕以下四个方面进行介绍:调度优化.模型优化.同步优化以及任务优化.对于调度优化而言,将分享任务调度如何进行优化,以及如何看到调度的瓶颈点,以及在初步进行建设和使用数据仓库的任务之后,对于任务如何进行调整来满足业务的时间要求.对于模型优化而

企业大数据平台下数仓建设思路

免费开通大数据服务:https://www.aliyun.com/product/odps 介然(李金波),阿里云高级技术专家,现任阿里云大数据数仓解决方案总架构师.8年以上互联网数据仓库经历,对系统架构.数据架构拥有丰富的实战经验,曾经数据魔方.淘宝指数的数据架构设计专家. 与阿里云大数据数仓结缘 介然之前在一家软件公司给企业客户做软件开发和数仓开发实施,数仓开发和实施都是基于传统的基础架构.2008年加入阿里进入淘宝数据平台部后,他开始接触分布式计算平台Hadoop. 初始时在Hadoop平

数仓1.4 |业务数仓搭建| 拉链表| Presto

电商业务及数据结构 SKU库存量,剩余多少SPU商品聚集的最小单位,,,这类商品的抽象,提取公共的内容 订单表:周期性状态变化(order_info) id 订单编号 total_amount 订单金额 order_status 订单状态 user_id 用户id payment_way 支付方式 out_trade_no 支付流水号 create_time 创建时间 operate_time 操作时间 订单详情表:(order_detail) order_detail.order_id 是要一

如何才能让数仓构建成本降低80%,维护成本降低70%?

构建数据仓库的核心是建模,在数据仓库的构建中,ETL贯穿于项目始终,它是整个数据仓库的生命线.从数据源中抽取数据,然后对这些数据进行转化,最终加载到目标数据库或者数据仓库中去,这也就是我们通常所说的 ETL 过程(Extract,Transform,Load). 通常数据抽取工作分抽取.清洗.转换.装载几个步骤: 抽取主要是针对各个业务系统及不同服务器的分散数据,充分理解数据定义后,规划需要的数据源及数据定义,制定可操作的数据源,制定增量抽取和缓慢渐变的规则. 清洗主要是针对系统的各个环节可能出

数仓建模

基本概念: DW (Data Warehouse) 是一个面向主题的(Subject Oriented), 集成的(Integrated), 相对稳定的(Non-Volatile), 反映历史变化(Time Variant)的数据集合,用于支持管理决策(Decision Making Support). ODS (Operational Data Store) 是一个面向主题的, 集成的, 可变的, 当前细节数据集合. 用于支持企业对于即时性的, 操作性的, 集成的全体信息的需求. 与数据仓库(

DP之数塔模型poj1157

题目:poj1157LITTLE SHOP OF FLOWERS 题意:假设以最美观的方式布置花店的橱窗,有 F 束花,每束花的品种都不一样,同时,至少有同样数量的花瓶,被按顺序摆成一行,花瓶的位置是固定的,并从左到右,从 1 到 V 顺序编号, V  是花瓶的数目,编号为 1 的花瓶在最左边,编号为 V 的花瓶在最右边,花束可以移动,并且每束花用 1 到 F  的整数惟一标识,标识花束的整数决定了花束在花瓶中列的顺序即如果 I < J,则花束 I  必须放在花束 J 左边的花瓶中.例如,假设杜

opengl漫游模型示例

opengl漫游模型示例: #include <stdio.h> #include <glm/gtc/matrix_transform.hpp> #include <glm/gtx/transform.hpp> #include <GLFW/glfw3.h> #include "TrackballController.h" #define CIGAMA 0.1 TrackballController* TrackballControlle

【云+社区极客说】新一代大数据技术:构建PB级云端数仓实践

本文来自腾讯云技术沙龙,本次沙龙主题为构建PB级云端数仓实践 在现代社会中,随着4G和光纤网络的普及.智能终端更清晰的摄像头和更灵敏的传感器.物联网设备入网等等而产生的数据,导致了PB级储存的需求加大. 但数据保留下来并不代表它真的具有利用价值,曾经保存的几TB的日志,要么用来做做最简单的加减乘除统计,要么就在日后出现问题了,扒出日志堆找证据.你的影视库里面可以下载储存成千上万部影片,但不代表你真的能全部看完. 如何将手里现有的数据变得更具有价值?一些营销云已经可以做到毫秒级响应做到精准投放广告