数据模型

关系模型与维度模型

常见数据模型设计方法

数据模型

1. 什么是数据模型

  • 模型 - Model

    • 模型是指对于某个实际问题或者客观事物、规律进行抽象后的一种形式化表达方式
    • 比如地图、建筑设计沙盘、模型飞机等等……
    • 模型的建立为某些领域,带来了更多实际的意义
  • 数据模型DM - Data Model
    • 数据模型一般多指在设计和建立数据库时,用于提供数据表示和操作手段的形式架构
    • 使用数据模型,可以提供一些良好的特性,以适应特定场景
  • 企业数据模型EDM - Enterprise Data Model
    • 企业数据模型是企业数据特征的抽象,主要用于体现企业的业务规则以及信息。
    • 通过图形的实体和关系方式反映一个业务过程,是进行数据管理、分析和交流的重要手段,是模型、ETL、业务人员沟通的桥梁。

2. 数据模型的层次

  • 概念模型(CDM,Concept Data Model)

    • 定义了重要的业务概念和彼此的关系
    • 由核心实体或其集合,及实体间的业务关系组成
    • 类似行业数据模型
  • 逻辑模型(LDM,Logical Data Model)
    • 对概念数据模型的进一步分解和细化
    • 描述实体、属性、以及实体与实体之间的关系
  • 逻辑模型(PDM,Physical Data Mode)
    • 描述模型实体的细节,对数据冗余与性能进行平衡
    • 关注数据库的物理实现,解决细节技术问题
    • 需要考虑数据类型、长度、索引等因素
    • 需确定数据平台和架构

3. LDM & PDM

  逻辑数据模型(Logical Data Model,PDM),是数据仓库在数据建设阶段为解决业务需求而定义的模型解决方案,是战略层面的,主要决定模型的总体架构,它是连接数据仓库的数据与最终用户之间的逻辑桥梁,但它还不能直接拿来实施,它并不是数据仓库数据的真实物理反映。

  物理数据模型(Physical Data Model,即PDM)是基于逻辑数据模型的物理化,它是在继承逻辑模型设计框架和原则的基础上,针对系统性能和应用需求而进行的适当的非范式化的物理模型设计,它更着眼于实施、操作和性能,更贴近数据,它是数据仓库数据的真实物理反映。

  • 相同点

    • 主题一致、主体结构一致、主要实体一致和主要字段相同
    • PDM继承了LDM的灵活性,易于扩展等优点
    • LDM有利于业务人员和最终用户对PDM的理解
    • LDM是PDM成功实施的基础性保障
  • 不同点
    • PDM更着眼于实施、操作和性能,更贴近数据
    • PDM需要经常性的维护
    • PDM更多的考虑系统物理特性
    • PDM更多的考虑数据处理性

关系模型与维度模型

1. 关系模型

  • 关系数据模型的规范化是一种组织数据的技术

    • 规范化方法对表进行分节,以消除数据冗余,避免异常更新,提高数据完整性
    • 通过实体关系(ER)描述企业业务和业务规则
      • 实体:客观存在并且可以相互区别的事物称为实体
      • 关系:描述实体间的关联性,实体间的关系基本上有三种(一对一,一对多,多对多)
      • 属性:一个属性是在数据模型中用来描述一个事物的最基本元素。是描述一个事物或交易在数据元素级上的抽象定义
  • 关系模型 - 3NF
    • 在范式理论上符合 3NF

      • 每个属性值唯一,不具有多义性;
      • 每个非主属性必须完全依赖于整个主键,而非部分主键;
      • 每个非主属性不能依赖于其他关系中的属性,因为这样的话,这种属性应该归到其他关系中去。
    • 数据仓库中的3NF与OLTP系统中的3NF的区别在于,它是站在企业角度面向主题的抽象,而不是针对某个具体业务的抽象。
    • 优点:模型稳定、相对简单
    • 典型行业:传统金融、证券行业,如银行。

2. 维度模型

  • 维度模型

    • 维度模型是一种趋于支持最终用户的、从分析决策的需求出发的数据模型
    • 关注用户如何更快地完成需求分析,同时具有较好的大规模复杂查询响应能力
    • 特点:易理解、高性能、易扩展
    • 维度模型将表分为维度表和事实表:
      • 维度表(Dimension):对数据进行分类的表,用于从特定的角度观察数据。维度是事实表的入口点或链接,充当“查询”或“报表”约束的主要来源;维度通常是高度反范式的,通常占总数据的10%左右。例如:时间、地区、产品等
      • 度量表(Measure):又叫事实表(Fact),是维度建模中最基本的表,存放业务度量数据,例如数量、金额、汇总等流水和快照数据。
事实表
  • 数仓/数集维度建模的核心,围绕业务过程进行设计
  • 通过获取表述业务过程的度量来表达业务过程
  • 包含了应用的维度和与业务过程有关的度量
  • 基础结构
    • 一个或者多个数值型的度量字段,我们称之为事实(Fact)
    • 一组关联到维表的外键,而这些的维表提供了事实表度量的上下文
    • 一个或者多个退化维度(Degenerate Dimensions)
      • 退化维度存在于事实表,但是他们不是外键,不关联任何真正的维表
      • 可能会是事实表的主键
  • 事实表分类:事务事实表

    • 用来描述业务过程,跟踪空间或时间上某点的度量事件
    • 保存的是最原子的数据,也称为“原子事实表”、“交易事实表”
  • 事实表分类:事务事实表设计原则
    • 事实完整性

      • 事实表包含与其描述的过程有关的所有事实,即尽可能多地获取所有的度量
      • 比如支付业务过程,在子订单粒度上的支付金额、支付邮费、支付红包、支付积分、支付折扣都有所包含,覆盖全面
    • 事实一致性
      • 在确定事务事实表的事实时,明确存储每一个事实以确保度量的一致性
      • 比如在下单业务国城中,有下单商品数量和商品价格两个事实,但在事实表中计算了下单金额和下单有效金额
    • 事实可加性
      • 事实表确定事实时,往往会遇到非可加性度量,比如分摊比例、利润率等,虽然他们也是下游分析的关键点,但往往在事务事实表中关注更多的是可加性事实,下游用户在聚合统计时更加方便。
  • 事实表分类:周期快照事实表
    • 周期快照事实表表现的是一个时间段,或者规律性的重复。这类表非常适合跟踪长期的过程,例如银行账户和其他形式的财务报表。
  • 事实表分类:周期快照事实表特点
    • 密度与稀疏性

      • 快照事实表和事务事实表的一个关键区别在密度上。
      • 事务事实表是稀疏的,只有当天发生的业务过程,事实表才会记录该业务过程的事实。
      • 快照事实表是稠密的,无论当天是否有业务过程发生,都会记录一行。
    • 半可加性
      • 在快照事实表中收集到的状态度量都是半可加的。
      • 与事务事实表的可加性事实不同,半可加性事实不能根据时间维度获得有意义的汇总结果。
        • 在每个采样周期内不能对状态度量进行汇总
        • 虽然不能汇总,但是可以计算一些平均值,比如计算每天一个下单的平均值。
  • 事实表分类:累积快照事实表
    • 累积快照事实表用于描述那些有明确开始和结束的过程,例如合同履行,保单受理以及常见的工作流。累积快照不适合长期连续的处理,如跟踪银行账户或者描述连续的生产制造过程,如造纸。
    • 累积快照事实表的粒度是一个实体从其创建到当前状态的完整的历史。
    • 对于类似于研究事件之间时间间隔的需求,采用累积快照事实表可以很好地解决。
  • 事实表分类:无事实的事实表
    • 第一种是事件类:每个事实表的粒度是一个事件量测。在某些情况下,事件可以发生,但是没有具体的测量值。例如一个事实表用来记录交通事故事件。每个事件的发生是无可质疑的,维度设计是强制性且非常直接的。
    • 第二种是条件、范围或资格类的:记录维度与维度多对多之间的关系。比如客户和销售人员的分配情况、产品的促销范围等。
维度表
  • 维表提供了事实表的上下文;维表通常比事实表小得多;提供了查看数据的入口。
  • 基础结构:
    • 代理键

      • 一个无意义的,唯一标识的字段
      • 维表的主键,事实表的外键
    • 自然键
      • 一个或多个字段
      • 从源系统抽取来的有意义的字段
    • 描述属性
      • 静态或者变化比较慢的字段
      • 会有多个
  • 缓慢变化维
    • 数据仓库的重要特点之一是反映历史变化,如何处理维度的变化是维度设计的重要工作之一。
    • 在现实世界中,维度的属性并不是静态的,它会随着时间的流逝发生缓慢的变化。
    • 与数据增长较为快速的事实表相比,维度的变化相对缓慢。
    • 在某些情况下,保留历史数据没有什么分析价值;而在另一些情况下,保留历史数据将会起到至关重要的作用。
    • 使用代理键作为每个维表的主键,方便处理缓慢变化维。
    • 在Kimball的理论中,有三种处理缓慢变化维的方式:
      • 重写纬度值
      • 插入新的维度行
      • 添加维度列

常见数据模型设计方法

DW002 - 数据仓库模型设计的更多相关文章

  1. 大数据的胖哥的方式(9)- 金融业数据仓库的逻辑模型FS-LDM

    介绍: 大数据是不是海市蜃楼,来自小橡子只是意淫奥克斯,大数据的发展,而且要从头开始,基于大数据建设国家.项目-level数据中心行业将越来越多,大数据仅供技术,而非溶液,临数据组织模式,数据逻辑模式 ...

  2. 数据仓库专题(5)-如何构建主题域模型原则之站在巨人的肩上(二)NCR FS-LDM主题域模型划分

    一.前言 分布式数据仓库模型的架构设计,受分布式技术的影响,很多有自己特色的地方,但是在概念模型和逻辑模型设计方面,还是有很多可以从传统数据仓库模型进行借鉴的地方.NCR FS-LDM数据模型是金融行 ...

  3. 胖子哥的大数据之路(9)-数据仓库金融行业数据逻辑模型FS-LDM

    引言: 大数据不是海市蜃楼,万丈高楼平地起只是意淫,大数据发展还要从点滴做起,基于大数据构建国家级.行业级数据中心的项目会越来越多,大数据只是技术,而非解决方案,同样面临数据组织模式,数据逻辑模式的问 ...

  4. 数据仓库之父——Bill Inmon(转载)

    从此处转载 http://blog.sina.com.cn/s/blog_615f9dba0100f67p.html 比尔·恩门(Bill Inmon),被称为数据仓库之父,最早的数据仓库概念提出者, ...

  5. 数据仓库模型之CDM、LDM与PDM的区别

    在数据仓库建设中,概念数据模型设计与逻辑数据模型设计.物理数据模型设计是数据库及数据仓库模型设计的三个主要步骤. conceptual data model 概念数据模型是最终用户对数据存储的看法,反 ...

  6. 《BI深入浅出》笔记

    今年的项目涉及到BI的知识点,读了<商业智能深入浅出>,这本书是基于IBM的产品做的,基础知识部分讲的非常成体系.记下来做个备忘: 1. BI简介 1.1 实施方案 1)项目规划: 2)系 ...

  7. DMP

    1.dmp-data mabagement platform数据管理平台 数据赋能,营销智变 2.定义 把分散的第一,第三方异构.多源数据进行整合,然后纳入统一技术平台中,并对这些数据进行标准化和细分 ...

  8. 数据仓库专题20-案例篇:电商领域数据主题域模型设计v0.2(改进意见征集中)

    一.电商分类(平台+自营+复合) (1)平台型电商:淘宝+天猫+百度Mall等: (2)自营型电商: 2.1 综合型:京东(早期)+当当(早期): 2.2 垂直型:好像这种类型越来越少了: (3)复合 ...

  9. 数据库模型设计PowerDesigner

    Power Designer 是Sybase公司的CASE工具集,使用它可以方便地对管理信息系统进行分析设计,他几乎包括了数据库模型设计的全过程.利用Power Designer可以制作数据流程图.概 ...

  10. 数据仓库原理<2>:数据仓库系统的体系结构

    1. 引言 本篇主要讲述数据仓库系统的体系结构与组成要素.数据集市与数据仓库之间的关系.元数据的定义与作用. 在上一篇,笔者介绍了数据仓库的定义: "数据仓库是一个面向主题的.集成的.不可更 ...

随机推荐

  1. Pwn2own 2023 Tesla 利用链摘要

    Pwn2own 2023 Tesla 利用链摘要 https://www.youtube.com/watch?v=6KddjKKKEL4 攻击链: 利用蓝牙协议栈自己实现的 BIP 子协议中的堆溢出, ...

  2. Flutter TickerProvider使用

    Flutter TickerProvider使用 当需要使用Animation controller时,需要在控制器初始化时传递一个vsync参数,此时需要用到TickerProvider,例如 cl ...

  3. 【Java】【SpringBoot】CP03:热部署

    This article is written by Xrilang(Chinese Name:萌狼蓝天) If you want find me ,You can contact me in Bil ...

  4. 开源架构Fabric、FISCO BCOS(以下简称“BCOS”)、CITA 技术对比

    转自 https://www.coingogo.com/news/41300 联盟链技术哪家强?开源架构Fabric.FISCO BCOS(以下简称"BCOS").CITA 技术对 ...

  5. hibernate错误org.hibernate.AnnotationException: No identifier specified for entity:

    实体类继承BaseEntity时报错.解决方法:在属性或者get方法上加@Id@Id@GeneratedValue(strategy=GenerationType.AUTO)@Column(uniqu ...

  6. Qt/C++音视频开发80-ffmpeg实现srt推拉流/实时性非常好/音视频同步/支持格式众多

    一.前言 目前互联网上的视频直播有两种,一种是基于RTMP协议的直播,这种直播方式上行推流使用RTMP协议,下行播放使用RTMP,HTTP+FLV或者HLS,直播延时一般大于3秒,广泛应用秀场.游戏. ...

  7. Python项目开发案例集锦pdf

    下载链接:https://www.jb51.net/books/780548.html

  8. 基于STC8G1K08的CH549单键进入USB下载模式实验

    一.实验原因 CH552或CH549进入USB下载,通常需要两个按键,一个控制电源的通断,一个通过串联电阻(一头接VCC或V33)冷启动时抬高UDP电平.时序上是这样的:断电--按下接UDP的轻触开关 ...

  9. JAVA根据集合中属性判断是否包含元素

    boolean isContain = list.stream().anyMatch(item -> item.getKey().equals(key));

  10. 一种调试 线段树 / Treap / Splay / 左偏树 / LCT 等树形结构的技巧

    前言 如果我们需要观察程序运行过程中,某一个变量.某一个序列的变化情况,你可以在修改的地方打断点 debug,或者直接在需要的地方输出就行了. 但是对于一些树形结构,我们不好将其直观地呈现出来,常常只 ...