关于医药流向数据,在实际处理的过程当中涉及到数据仓库的建模。未名企鹅的研发工程师Lee在此提供一些建模的思路和心得。首先我们来熟悉一些概念和定义解释。
01
什么是数据建模?
数据建模,就是设计数据的结构以及数据之间关系的过程。
业务系统是按照业务流程方便操作的方式来进行数据建模的。业务系统一般都采用关系型数据库进行数据的存储,考虑到数据的一致性以及减少数据的冗余,通常采用实体关系模型进行数据的建模。
而数据仓库则使用与业务数据库完全不同的建模方式来组织数据,这种方式被称为“维度模型”。维度模型是完全面向数据分析的,所以数据仓库是从业务易理解的角度重新组织数据。
数据仓库的建模需要考虑到如下问题:
a)数据的存储结构以及数据之间的关系要便于理解,要让数据的使用方很容易的理解和使用数据;
b)面向分析设计数据表结构,提升查询性能;
c)尽量减少不必要的数据冗余,实现计算结果的复用,降低数据的存储和计算成本;
d)定义一致的指标、维度,各业务按照统一的规范建设,统一数据的口径;
e)对一些特定的数据,能够存储历史,支持查询数据的变更历史记录。
02
维度模型
为了更好的了解数据建模,需要先介绍一些维度模型的基本概念。
A
维度和度量
维度(Dimension)是描述数据的角度,通常是一个属性,如时间、地点、客户、商品等,用于描述谁、什么、哪里、何时、如何、为什么等有关的事件。
度量(Measure)是基于数据所计算出来的数值,如销售额、用户数等。
分析人员往往要结合若干个维度来计算度量值,在一个SQL查询中,group by的属性通常就是维度,而聚合函数所计算的数值则是度量。
B
事实表和维度表
事实表(Fact Table)是指存储业务过程数据的表,如订单、交易记录、库存记录等。事实的记录是在不断的快速增长的,所以它的数据量通常会比较大。事实表的每一行记录都代表了一个事实,每一个事实都有一个或多个度量值。以流向为例,流向中产品的销售数量和销售金额就是这一个条流向的度量。
维度表(Dimension Table),简称维表,它保存的是维度信息,维度表通常用来与事实表进行关联查询,从而提取出目标数据。常见的维度表有时间表、地区表、客户表、产品表等。比如流向中的上游、下游都属于维度。
事实表中通常存储度量值,比如订单的金额,而用来描述事实的各种维度信息,比如时间、地点、上下游、商品等信息通常是存储在维度表中,然后在事实表中存储对应维度的ID,从而能够在查询时进行关联。不同的维度信息又会拆分到不同的维度表中。
使用维度表和事实表分离的设计有如下好处:
a)事实表的数据量通常都很大,而且在不停的快速增长,通过将维度信息抽取到维度表中存储,能够减少事实表的数据大小,避免