设计事实表的注意事项

发布时间 2023-08-21 18:53:29作者: 人不疯狂枉一生

事实表主要由两部分组成,一部分是主键和外键组成的键值部分,另一部分是用来描述业务过程的事实度量,也不排除部分设计人员把部分维度退化进去,从而使事实表再加一部分退化维度。在维度建模中事实表的设计一般遵循五大步骤:1.确定业务过程-》2.定义粒度-》3.确定维度-》4.确定事实-》5.冗余维度属性。通过这5个步骤,可以梳理出事实表设计的十大规范:

规范1:事实表要尽量包含选择的业务过程涉及的全部事实度量。

  分析业务过程包含哪些度量值,要分析全面,哪怕有一定冗余,由于是数值类型的,存储空间实际上也不大。

规范2:一个业务过程对应一个事实表,最好不要混合多个不相关的业务过程。

  比如电商中下单过程中就不能包含退款金额,退款金额是属于退款业务过程。

规范3:事实表要尽量原子性,方便扩展,尽量把不可加事实拆解为可加事实。

  比如可以把增长率拆分为增长额和总额度两个指标。

规范4:在选择维度和事实之前必须先声明粒度。

  粒度越细,灵活性越强,扩展性越强,粒度用于确定一行数据表示的细节层次,可理解为是业务流程中对度量的单位,也可理解为主键的确定,事实表的粒度要和维度表保持一致,如果事实表设计为月粒度,但是时间维表设计为周粒度,就会导致有些维度统计不了。

规范5:一个事实表只能有一个粒度,不能多个粒度混合。

  一个事实表只能有一个粒度,比如购买演唱票的系统,不能把订单金额和票价金额放到一个表上,一个是属于订单粒度,一个是票务粒度。

规范6:事实的单位要保持一致

  度量值的单位要保持一致,比如是元的就统一用元,是万的就统一用万。

规范7:对事实的 null 值要处理

  空值一定要处理,为null的建议置为0,否则进行sum时null和数值进行求和会变成null,导致数据不准。

规范8:适当使用退化维度提高事实表的易用性

  适当的退化维度到事实表,可以减少表关联个数,提升取数效率,但是这与事实表的设计理念不符,所以要慎用退化维度,只能说通过增加冗余存储,减少计算开销。

规范9:字段要保持功能的单一性

  比如确定为组织的字段就不能再往里面填员工信息,很多时候在输出给报表数据时,为了方便组织进行下钻,会设计一个当前层级字段,该字段既用于存储部门又用于存储员工,这样会导致字段功能不纯粹,不易理解。

规范10:统一保留的小数点位数

  统一度量值的小数位数,以免造成不同位数的精度损失。