0x00 前言

翻出来之前零零散散写的数据仓库的内容,重新修正整理成一个系列,此为第一篇《数据模型》。

数据仓库包含的内容很多,比如系统架构、建模和方法论。对应到具体工作中的话,它可以包含下面的这些内容:

  • 以Hadoop、Spark、Hive等组件为中心的数据架构体系

  • 调度系统、元数据系统、ETL系统这类辅助系统

  • 各种数据建模方法,如维度建模

我们暂且不管数据仓库的范围到底有多大,在数据仓库体系中,数据模型的核心地位是不可替代的。因此,本篇会对经典的数据模型做一个大致的介绍,下一篇会专门分享一下数据模型中的维度建模。

0x01 经典数据仓库模型

数据仓库中有几种经典的数据模型:范式模型、维度模型、DataVault。个人感觉,很多模型的设计都在同构化,而且在工作中也不是单独地用一种模型,会根据业务场景做出各种取舍。

一、范式模型

范式是数据库逻辑模型设计的基本理论,一个关系模型可以从第一范式到第五范式进行无损分解。在数据仓库的模型设计中目前一般采用第三范式。一个符合第三范式的关系具有以下三个条件 :

  • 数据库表的每一列都是不可分割的基本数据项,同一列中不能有多个值

  • 数据库表中的每个实例或行必须可以被惟一地区分

  • 数据库表中不包含已在其它表中已包含的非主关键字信息。

我们提到的范式模型由数据仓库之父 Inmon 提倡 ,可以大致地按照OLTP设计中的3NF来理解,它在范式理论上符合3NF,它与OLTP系统中的3NF的区别在于数据仓库中的3NF上站在企业角度面向主题的抽象,而不是针对某个具体业务流程的实体对象关系抽象,它更多的是面向数据的整合和一致性治理。

关于范式模型,在有些文章里面也叫ER模型、实体模型,感觉很多描述都很接近,就不再区分了。

二、维度模型

维度模型是数据仓库领域另一位大师 Ralph Kimball 所倡导,他的《The DataWarehouse Toolkit-The Complete Guide to Dimensona Modeling,中文名《数据仓库工具箱》,是数据仓库工程领域最流行的数仓建模经典。

按照书中所讲,维度建模并不要求维度模型必须满足第3范式。数据库中强调的 3NF 主要是为了消除冗余。规范化的  3NF 将数据划分为多个不同的实体,每个实体构成一个关系表。比如说订单数据库,开始可能是每个订单中的一行表示一条记录,到后来为了满足 3NF会变成蜘蛛网状图,也许会包含上百个规范化表。而且对于 BI 查询来讲,规范化模型太复杂,用户会难以理解和记录这些模型的使用。 而维度建模解决了模式过分复杂的问题。

维度模型的典型代表是我们比较熟知的星形模型,以及在一些特殊场景下适用的雪花模型和星座模型。维度模型里面有两个十分重要的概念:事实表和维度表。

事实表:

发生在现实世界中的操作型事件,其所产生的可度量数值,存储在事实表中。从最低的粒度级别来看,事实表行对应一个度量事件,反之亦然。

维度表:

每个维度表都包含单一的主键列。维度表的主键可以作为与之关联的任何事实表的外键,当然,维度表行的描述环境应与事实表行完全对应。 维度表通常比较宽,是扁平型非规范表,包含大量的低粒度的文本属性。

感觉解释的不清楚?没关系,后面专门有文字来讨论维度建模。

三、Data Vault

Data Vault 是 Dan Linstedt 发起创建的一种模型方法论,现在应该叫做Data Vault 2.0了,它也是一套完整的数据仓库理论,其中也有专门的一部分关于数据模型设计。

个人理解 Data Vault 模型 应该说是范式模型和维度模型的一种混合,它兼容了两种模型的优势。

Data Vault 通常可以分为三种类型,中心体,链接体和附属体
它主要由:Hub(中心表)、Link(链接表)和 Satellite(卫星表) 三部分组成 。

中心表:

中心表主要是存储一些日常用的一些业务关键码,比如客户号,发票号,流水号等等。它包括三个要素:

  • 代理键:这就是一些操作性的组件,包括客户号,发票号等等

  • 装载时间戳:这里可以理解为ETL进行日加载的时间。

  • 数据源:就是可以追索到的原系统,比如,CRM,ERP等

链接表:

是3NF的多对多关系的物理表现形式,它表现的是多个业务键之间的关系。它和范式模型的最大区别是将关系作为一个独立单元抽象出来,可以提升模型的扩展性。它主要包含以下特征:

  • 代理键

  • 代理键间的映射关系

  • 装载时间戳:这里可以理解为ETL进行日加载的时间。

  • 数据源:就是可以追索到的原系统,比如,CRM,ERP等

卫星表:

业务领域中的其余信息可能随着时间而变化,所以卫星表必须有能力存储新的或者变化的各种粒度的数据,他们将被存储在卫星表内。卫星表是中心表的详细描述内容,一个中心表会有多个卫星表。它由中心表的代理键、装载时间、来源类型、详细的中心表描述信息等组成。

0xFF 总结

目前市面上容易买到的数据仓库领域的经典书有三本:《数据仓库》、《数据仓库工具箱》和《数据架构 大数据 数据仓库以及Data Vault》,这三本书分别对应了前面提到的三种数据模型,个人感觉书有点些枯燥,而且不太容易理解,不过做过一段数据仓库后再回头学习一下这些书还是会有很多收获的,参考价值很大。

关于数据模型,个人感觉在实际的场景中会有很多个性化的设计,有时候还不得不做一些反模式的设计。模型很重要,业务场景也很重要。

转载

  • 作者:木东居士 |简书 | CSDN

【数据仓库】1.数据模型相关推荐

  1. 数据仓库中两种数据模型的分析比较

    来源:http://articles.e-works.net.cn/bi/article73172.htm 发表时间:2009-11-7 何秉姣 来源:万方数据 数据仓库(DH)和联机分析处理(OLA ...

  2. 数据仓库多维数据模型

    一.概述 多维数据模型是最流行的数据仓库的数据模型,多维数据模型最典型的数据模式包括星型模式.雪花模式和事实星座模式,本文以实例方式展示三者的模式和区别. 二.星型模式(star schema) 星型 ...

  3. 数据仓库与联机分析处理

    数据仓库与联机分析处理: 数据仓库: •数据仓库公认的(基于W. H. Inmon)定义: –数据仓库是一个面向主题的.集成的.时变的.非易失的数据集合,支持管理过程的决策过程. •四个基本特征: 数 ...

  4. 【数据挖掘笔记四】数据仓库和联机分析处理

    4.数据仓库和联机分析处理 数据仓库泛化.合并多维空间的数据.构造数据仓库涉及数据清理.数据集成和数据变换,是数据挖掘的预处理步骤.数据仓库提供联系分析处理(OLAP)工具,用于各种粒度的多维数据的交 ...

  5. oracle星形转换,Oracle数据仓库博客(转,学)

    数据仓库之二 数据仓库设计--Kimball方法 本文介绍的是数据仓库设计的Kimball方法,即多维模型:关系模型,即Inmon方法参见(四) 多维数据模型 -方体:数据汇总.方体是数据,方体的维度 ...

  6. 浅谈数据仓库建设中的数据建模方法

    http://www.ibm.com/developerworks/cn/data/library/techarticles/dm-0803zhousb/ 所谓水无定势,兵无常法.不同的行业,有不同行 ...

  7. 数据仓库与联机分析处理笔记

    本文为<数据挖掘:概念与技术>中"数据仓库与联机分析处理"的阅读笔记. 4. 数据仓库与联机分析处理 ETL:用来描述将数据从来源端经过抽取(extract).转换(t ...

  8. 数据仓库、商业智能的体系结构

    来源:http://ajava.org/readbook/db/dbgcsks/12413.html 16.2  数据仓库.商业智能的体系结构 如图16-5所示是数据仓库/商业智能的完整的体系结构图, ...

  9. 数据仓库建设中的数据建模方法(转)

    简介: 本文的主要内容不是介绍现有的比较流行的主要行业的一些数据模型,而是将笔者在数据仓库建设项目中的一些经验,在这里分享给大家.希望帮助大家在数据仓库项目建设中总结出一套能够合乎目前业界规范的,满足 ...

  10. 星形和雪花模型_数据仓库多维数据模型设计

    建设数据模型既然是整个数据仓库建设中一个非常重要的关键部分,那么,怎么建设我们的数据仓库模型就是我们需要解决的一个问题.这里我们将要详细介绍如何创建适合自己的数据模型. 数据仓库建模方法 大千世界,表 ...

最新文章

  1. linux c 按行读取文件
  2. 如何动态调用WebServices
  3. Java 集合系列10: HashMap深入解析(1)
  4. Cisco PIX Syslog 配置说明
  5. mysql jdbc批量更新_jdbc批量更新数据
  6. wepy学习笔记之环境搭建
  7. 740. Delete and Earn
  8. hdu 1512 Monkey King 左偏树
  9. 面试官:HashMap 为什么线程不安全?
  10. Error:Execution failed for task ':app:transformClassesWithDexForDebug'解决记录
  11. 【STL】List基础
  12. DBC文件解析及CAN通信矩阵
  13. JavaScript混淆器
  14. 弗雷格的伟大历史贡献:量词的引入
  15. git gui here如何汉化_github的git GUI Here的使用,适合新手!!!
  16. 如何用VBA寻找指定区域中的第一个非空单元格
  17. 纠缠谎言蒙蔽双眼 而真实 已埋没
  18. 自定义gerrit提交脚本
  19. DirectX11 纹理采样
  20. wordpress.mu

热门文章

  1. docker镜像(第二天)
  2. zzuli:1000从今天开始入坑C语言
  3. 如何用CSS3画出一个立体魔方?
  4. python这个单词的含义是什么_python style是什么意思
  5. Unity利用JsonFX解析Json格式文本
  6. 成功解决xgboost\core.py:614: UserWarning: Use subset (sliced data) of np.ndarray is not recommended beca
  7. Paradise Lost - John Milton
  8. CoreText(四):行 CTLineRef
  9. python 232串口通信
  10. 超全Altium Designer16 总结--Altium Designer