数据建模简单来说就是基于对业务的理解,通过抽象的实体及实体之间联系的形式,来表示现实世界中事务的相互关系的一种映射,通过对实体和实体之间关系的定义和描述,来表达实际的业务中具体的业务关系。数据模型可以通过对数据的整合和关联,提升数据可用性,能快速高效响应数据需求,带来数据效益。
组织在建设数据仓库或者数据中台时,如果说形成业务的各类数据集是一棵树上的果实,那么数据模型就是这棵大树的躯干,是建设组织级数仓或数据中台的基础。好的数据模型建设可以降低数据计算资源,快速响应数据需求。
数据模型设计的意义
数据在组织中的使用,大致经历了三个阶段。第一个阶段,对业务数据进行简单的汇总,生成业务需要的数据报表进行使用,这个阶段只要业务数据相对稳定,数据的使用不会存在太大的瓶颈。第二个阶段,组织业务相对分离,对数据采集及使用相对独立,这个阶段,随着数据使用的精细化,数据管理成本和开发成本逐渐显现。第三个阶段,需要对整个组织的数据进行统一的采集、整理,制定组织级数据标准,提供跨部门一致性数据,满足各个业务部门的数据需求,这个阶段,组织级数据模型设计变动的尤为重要。
由此可见,数据仓库的建设和普通数据库的建设的重要区别就在于数据模型的支持。因此,数据模型的建设,对于数据仓库的建设具有决定性的意义。
根据前面数据使用阶段的演进可知,数据模型的出现,是为了解决数据完善性,复用性和规范性的问题,是实现组织级数据资产高可用、高质量、高效率的基础。
数据模型解决数据完善性问题
数据模型设计,可以从顶层识别业务域和业务过程,从而建设更为统一和完善的汇总层及应用层模型,使更多的汇总层及应用层数据能直接满足查询需求,而更少的直接引用明细数据甚至是原始数据,从而更快速响应业务使用需求。
数据模型解决数据复用性问题
数据仓库模型设计的核⼼是追求模型的复⽤和共享,⼀个⽐较差的模型设计,它的引用⾃下⽽上是⼀条线。⽽⼀个理想的模型设计,它的引用应该是交织的发散型结构。模型的引⽤系数越⾼,说明模型的复⽤性越好,复用性好的数据模型,可以解决数据处理任务更多基于原始数据进行深度聚合计算的问题,基于数据模型进行明细数据的积累和复用,避免数据清洗、格式化、集成的重复开发,从而提升查询速度,降低数据计算成本。
数据模型解决数据规范性问题
在组织里,不同业务存在对同一数据的不同命名和归类,导致数据存在大量重复和冗余,数据缺乏统一标准,数据质量难以管理,导致业务对数据的处理和使用存在很大的困难。通过建立组织级的数据模型,实现数据分层、主题域、主数据管理的规范性,为实现高质量、高效率的数据使用奠定基础,节约大量数据因不同业务需求重复管理和重复处理的成本。
数据仓库中数据建模的常用方法
范式建模(E-R模型)
范式建模将事物抽象为“实体”、“属性”、“关系”来表示数据关联和事物描述;实体:Entity,关系:Relationship,这种对数据的抽象建模通常被称为ER实体关系模型。ER模型是数据库设计的理论基础,当前几乎所有的OLTP系统设计都采用ER模型建模的方式,且该建模方法需要满足3NF。数据仓库之父Bill Immon提出的数仓理论,推荐采用ER关系模型进行建模,BI架构提出分层架构,数仓底层ods、dwd也多采用ER关系模型就行设计。但是逐渐随着组织数据的高增长、复杂化,数仓全部使用ER模型建模显得越来越不合时宜,其按部就班的步骤,三范式等,不适合现代化复杂,多变的业务组织。
维度建模
维度模型是数据仓库领域另一位大师Ralph Kimall所倡导,他的《The DataWarehouse Toolkit-The Complete Guide to Dimensona Modeling,中文名《数据仓库工具箱》,是数据仓库工程领域最流行的数仓建模经典。维度建模以分析决策的需求出发构建模型,构建的数据模型为分析需求服务,因此它重点解决用户如何更快速完成分析需求,同时还有较好的大规模复杂查询的响应性能。维度建模是面向分析的,为了提高查询性能可以增加数据冗余,反规范化的设计技术。维度建模将数据仓库中的表划分为事实表、维度表两种类型。典型的代表是我们比较熟知的星型模型,以及在一些特殊场景下适用的雪花模型。
DataVault
DataVault是Dan Linstedt发起创建的一种模型方法论,它是在ER关系模型上的衍生,同时,设计的出发点也是为了实现数据的整合,并非为数据决策分析直接使用。它强调建立一个可审计的基础数据层,也就是强调数据的历史性可追溯性和原子性,而不要求对数据进行过度的一致性处理和整合;同时也基于主题概念将企业数据进行结构化组织,并引入了更进一步的范式处理来优化模型应对源系统变更的扩展性。它主要由:Hub(关键核心业务实体)、Link(关系)、Satellite(实体属性) 三部分组成 。
对农小蜂的农业业务数据来说,业务需求相对垂直,但存在大量的维度分析工作。因此,主数据模型需要建立在简单性的基础之上,而维度建模就是考虑如何能够提供简单性,以业务为驱动,以用户理解性和查询性能为目标。
农小蜂农业业务数据模型设计实践
农小蜂维度建模模型设计
基于以上理论,农小蜂的农业业务主数据将采用维度建模的方式进行模型设计。按照维度建模的过程,主要分为以下阶段:第一步,先按数据标准规范,对农业数据的主题域及指标进行梳理和规范设计;第二步,基于业务梳理和识别进行概念模型设计;第三步,基于业务需求和数据结构进行逻辑模型设计;第四步,将按照数据仓储架构设计将模型落地进行物理模型设计。具体过程如下图所示:
1. 业务识别阶段
业务识别阶段其实是一次对整体业务的梳理过程,在这个过程中,不仅能帮助我们更好的理解业务,另一方面,也能够发现业务流程中的一些不合理的环节,加以改善和改进。农小蜂农业数据业务识别阶段有两项重要工作,一项就是就是确定我们数据的范围和分类,即主题域设计,确定什么类型的数据需要进行建模,形成数据资产,对农小蜂目前的农业业务数据来说,主要有两种类型的数据,一种是产业运行数据,主要是指生产端的种植面积、产量、产值、产业主体等数据,一种是行情监测数据,主要是指价格、交易量、进出口贸易等市场端的数据;另一项重要工作就是指标设计,确定业务的信息架构和展现形式,按指标的优先级确定数据资产管理的边界和治理程度。
2. 概念模型设计阶段
概念模型设计阶段是数据仓库数据建模的一个重要阶段,由于我们在业务识别阶段已经理清相应的业务范围和流程,因此,我们在概念模型设计阶段的最主要的工作就是进行概念的抽象。我们需要识别业务域,建立业务域与主题域的关联性;识别实体,识别事件,从而找出业务表象后抽象实体间的相互的关联性,将业务语言转化为技术语言,保证数据仓库数据能按照数据模型都能达到一致性和关联性。
3. 逻辑模型设计阶段
通过概念模型设计之后,虽然模型的框架已经完成,但是还有很多细致的工作需要完成。需要进行技术严谨性的逻辑模型设计,以使最终的数据模型能在数据平台落地运行,因此,是逻辑模型设计是整个数据仓库建模过程中最为重要同时也工作量最大的一个阶段。这个阶段的主要工作包括:
(1)识别业务过程
维度建模是紧贴业务的,所以必须以业务为根基进行建模,那么选择业务过程,顾名思义就是在整个业务流程中选取我们需要建模的具体业务,根据业务需求及数据治理能力等进行选择业务。业务过程之别非常重要,因为后面所有的步骤都是基于此业务数据展开。
(2)声明粒度
维度建模中,要求我们在同一事实表中,必须具有相同的粒度,同一事实表中不要混用多种不同的粒度,不同的粒度数据建立不同的事实表。从给定的业务过程获取数据时,建议从关注原子粒度开始设计,也就是从最细粒度开始,因为原子粒度能够承受无法预期的用户查询,但汇总粒度对查询性能的提升同样也很重要,所以需要明确数据需求,针对需求建立不同的数据粒度。
(3)确认维度
维度表是作为业务分析的入口和描述性标识,所以也被称为数据仓库的“灵魂”。那么在一堆的数据中怎么确认哪些是维度属性呢,如果该列是对具体值的描述,是一个文本或常量,某一约束和行标识的参与者,此时该属性往往是维度属性。我们应该基于事实表的粒度,将所有可能存在的维度区分开,并且要确保维度表中不能出现重复数据,使维度主键唯一。
(4)确认事实
事实表是用来过程度量的,基本上都以数量值表示,事实表中的每行对应一个度量,每行中的数据是一个特定级别的细节数据,称为粒度。维度建模的核心原则之一是同一事实表中的所有度量必须具有相同的粒度。这样能确保不会出现重复计算度量的问题。有时候往往不能确定该列数据是事实属性还是维度属性。最实用的事实就是数值类型和可加类事实,所以可以通过分析该列是否是一种包含多个值并作为计算的参与者的度量,如果是则该列往往是事实。
4.物理模型设计阶段
物理模型设计阶段是整个数据建模的最后一个过程,这个过程其实是将前面的逻辑数据模型落地的一个过程。考虑到数据仓库平台的不同,因此,数据模型得物理建模过程可能会稍微有一些不同,但本质都是对数据仓库进行分层和各种类型的表创建。经过物理模型设计阶段,整个数据仓库的数据模型就已经算建立完成。
维度设计
通过上面的建模过程可知,维度表的设计是数据仓库的“灵魂”,却也是建模过程中难度最大的工作之一。不同的业务领域需要不同的分析维度,一个高效的维度表应该是保证全局唯一性的维度表。因此,维度的统一成为一个难题,其最大的困难在于维度属性(例如维度是商品,那么商品类别、商品品牌、商品尺⼨等商品的属性,称为维度属性)的识别、统一声明、整合以及拆分。根据共有属性和特有属性的强弱,产出时间的差异,稳定性的差异,需要将维度表进行整合及拆分,整合拆分的合理性,将极大的影响后续数据使用的效率。
基于农小蜂的业务需求及数据治理能力,下面分享出农小蜂部分农业业务数据的维度设计。
结语
农小蜂致力于持续为用户提供稳定优质的农业产业数据服务,这背后离不开对产业的深入理解和研究,也离不开对数据技术的深入研究和应用。希望能有更多的同道者能一起讨论和推动农业领域数据与产业的融合应用发展。








