kimball维度建模(2)-事实表中的事实
1.定义:
事实涉及来自业务过程事件的度量,基本都是数值型。事实表中的每个事实行都是申明的粒度下描述的事件度量
2.事实分类:
1)可加:可按事实表任意维度汇总
2)半可加:可按事实表部分维度汇总。如库存、账户余额不能按时间维度汇总,但可按机构维度汇总
3)不可加:例如比率
3.如何判定一个值该不该作为事实
1)从定义上看:事实主要是对业务的一个度量,常常可以用来做计算、汇总等
2)从用途上看:如果一个数字值难以确认是维度还是事实,看该数值主要用于计算目的-事实,还是用于确定分组或做过滤-维度;
3)非可加事实是否应该存在事实表中:其一,例如单价,不能做汇总,求平均时也比较麻烦不能简单得avg,还需要考虑每条记录的销售量。如果业务有需要,可以存;其二,比率类型例如利润率,不建议存在事实表中,因为利润率要计算的是汇总之后的比率,而不是比率的汇总。推荐的做法是将分子分母分别存在事实表中
4)注意既可以当事实又可以当维度的一些值:其一,比如“业务服务性能级别”,如果用1-5表示级别,既可以作为筛选条件,又可以作为性能的度量;其二,比如基于客户的一些聚集事实-“上年度在产品花费总金额”,可以用来作为维度属性筛选出花费较高范围的客户,这种如果业务常用,并且花费高的口径不常更新,可以做固定维度字段-上年花费区间“花费0-1000、1000-5000、5000-10000、花费10000以上”之类。
4.事实表
1)常用的事实表有:明细事务事实表、周期快照事实表、累积快照事实表;还有无事实事实表、聚集事实表、合并事实表
2)事实表一般含有两个或两个以上与维度表主键关联的外键
3)事实表通常有包含外键集合的主键,事实表主键常称组合键,具有组合键的表称为事实表。(事实表表示多对多的关系,以交易明细为例:交易可以在多维场景发生,某场景也能发生多笔交易)
Tips:
1)维度表都有单一主键,但处理可变层次维度的桥接表可能存在复合键。无事实事实表可以用来描述客户与客户代理的分配关系、多维场景下客户参加活动的时间等,与桥接表看起来很类似;
那无事实事实表与桥接表的差别在哪呢?桥接表指的是一个维度(如部门组织架构)有多值、有不同层次;而无事实事实表指的是多个维度(客户、客户代理)之间的关联关系。
2)支架表也属于维度,支架表是维度表中还有维度键,该维度键对应的称为支架表,类似与雪花模型,应尽量少用
3)事实表可以存在空值度量,因为聚集函数等无影响;但维度外键不能空,这回导致违反参照完整性
4)维度表推荐用描述性字符如unknown等代替空值,这是考虑到不同数系统处理分组和约束对空值的处理方法不一致,用这种方式可以规避掉(这里可能还要注意类似空串""关联,NULL空不关联的事项)