观看量 525
本视频由 保利威 提供技术支持

方法梳理,实例教学范式建模和维度建模

具体如何进行范式建模和维度建模呢?我们结合案例分别来看。

范式建模方法及实例剖析

首先来看范式建模的基本过程。

在进行范式建模时,我们往往要遵从不同的规范要求设计出合理的模型,这些不同的规范要求就是“范式”。目前行业中存在一范式、二范式、三范式等不同的模型建设规范。越高的范式带来的数据库冗余越小,但是在数据计算方面会更复杂。企业大多采用三范式建模,在保证灵活度以及数据计算速度的同时,降低数据处理的复杂度。

范式建模的过程可以被拆解为以下四步:

1. 抽象出主体

2. 梳理主体之间的关系

3. 梳理主体的属性

4. 画出E-R关系图

比如,我们要使用范式建模的方式设计某课程管理系统的数据模型。

图片

该系统主要用来管理某学校教师、学生和课程等相关数据,涉及课程选修、考试成绩、教师授课、学生班级等方面。那我们首先要梳理出实体,为教师、课程、学生、班级;其次梳理出实体之间的关系,包括教师讲授课程、学生选修课程、学生隶属班级等;再次要罗列出各实体和关系的属性,比如“学生”这个实体的属性有姓名、性别、年龄等,“学生选修课程”这个关系的属性有选修时间、总课时等;第四步,则是画出E-R图,用矩形表示“实体”,用菱形表示“关系”,用椭圆形表示“属性”,以可视化的方式清晰展示出主体和主体之间的关系。

维度建模方法及实例剖析

相比范式建模,维度建模稍为复杂,包括事实表和维度表两块内容。

事实表

首先看事实表。事实表分三种,包括事务性事实表、周期性快照事实表、累计快照事实表。

  • 事务性事实表通常用一条记录表示某个时间点发生的事件或行为。比如电商业务场景中的订单支付业务,一般就采用事务性事实表来组织和存储数据。
  • 周期性快照事实表的一条记录描述的则是一个实体在某一段时间内的状态或现状,比如某顾客每月的积分余额就属于一条典型的周期性快照事实表记录。
  • 累计快照事实表的一条记录则是对某业务流程中发生的多个事件的累计记录,一般是为了满足某个流程节点运转效率的统计需求。

我们以一个事务性事实表的设计过程为例来了解事实表的设计方法:

图片

1. 选择与数据分析需求有关的业务过程。“业务过程”是指在业务流程中不可拆分的行为事件。比如,电商业务场景下,购物的业务流程中就包括加购、下单、支付、商家发货、用户确认收货等业务过程。如果我们要分析销售额,那“支付”就是必选的业务过程。

2. 声明粒度。我们要尽量选择最细粒度,精确定义事实表的每一行所表示的业务含义,以确保事实表有最大的灵活性。比如,用户可能在一个订单里面购买多个商品,那每个购买的商品就是一个子订单,我们一般选择将子订单作为声明粒度。

3. 确定维度。维度是指业务过程所处的环境信息,比如用户在某个时间购买了某个店铺的某个商品,那店铺所属行业、商品所在类目等均可以被认为是维度。

4. 确定事实,即确定业务过程的度量指标。比如“支付”这个业务过程的度量指标为支付金额,更复杂的电商业务场景下,可能还包括分摊邮费、折扣金额等指标。

需要说明的是,每个数据仓库都包含一个或者多个事实表,事实表是对分析主题的度量,它包含了与各维度表相关联的外键,并通过Join方式与维度表关联

维度表

维度表则是用户分析数据的窗口,记录了事实表中相关事务、事件的属性及属性含义。

维度表的设计过程,主要分为以下四步:

图片

1. 选择维度。比如要生成一个商品维度表,那我们选择的维度就是商品维度。

2. 确定主维表。比如要建商品维度表,那主维表就是来自于业务系统的商品表。

3. 确定相关维度表。主维表确定之后,其他的相关维度表也就随之确定。比如商品维度表的相关维度表有商品类目表、所属品牌表、商品所属行业表等。

4. 确定维度属性。这些属性一般来自于主维表和相关维表。我们将主维表和相关维表的属性集成,并对相同属性合并(比如,商品类目表和所属品牌表中可能都会有所属行业属性,那我们就可以对所属行业这个属性进行合并),然后将最终得到的属性放到要生成的维度表里。

此外,本期个推TechDay“治数训练营”还对范式建模与维度建模的基本原则、建模中的常见问题(比如范式建模中的传递依赖问题、维度建模中的缓慢变化维问题等)、数仓分层等进行了详细阐述。