维度建模,最为关键的两个因素就是:事实表和维度表 关于这个两个表的详细构建进行说明. 09.3.1 事实表 从字面的意思理解,在某个时间点的行为痕迹,一旦发生后,不可以改变的。
事实表存储了从业务活动或事件提炼出来的性能度量,它主要包含维度表的外键和连续变化的可加性数值或半可加事实。事实表产生于业务过程中而不是业务过程的描述性信息。它一般是行多列少,占据数据仓库大约90%的空间。在维度模型中也有表示多对多关系的事实表,其他都是维度表。
事实表颗粒度
事实表的粒度是产生事实行数据的度量事件的业务定义。 粒度确定了事实表的业务主键,事实表的所有度量值必须具有相同的粒度。事实表类别
事务事实表
它是面向事务的,其粒度是每一行对应一个事务,它是最细粒度的事实表也称“原子事实表”。事务事实表中的数据在事务事件发生后产生,数据的粒度通常是每个事务一条记录。一旦事务被提交,事实表数据***入,数据就不再进行更改,其更新方式为增量更新。
周期快照事实表
它是按照良好的时间周期间隔(每天,每周,每月)来捕捉业务活动的执行情况,一旦装入事实表就不会再去更新,它是事务事实表的补充,而非替代。典型的例子如销售日快照表、库存日快照表等。周期快照事实表的粒度是每个时间段一条记录,通常比事务事实表的粒度要粗,是在事务事实表之上建立的聚集表。周期快照事实表的维度个数比事务事实表要少,但是记录的事实要比事务事实表多。周期快照事实表的日期维度通常是记录时间段的终止日,记录的事实是这个时间段内一些聚集事实值。事实表的数据一旦插入即不能更改,其更新方式为增量更新。
累积快照事实表
它用于描述业务过程中某个不确定时间跨度里的活动,它随着业务活动的发生会不断的更新。累积快照事实表和周期快照事实表有些相似之处,它们存储的都是事务数据的快照信息。但是它们之间也有着很大的不同,周期快照事实表记录的确定的周期的数据,而累积快照事实表记录的不确定的周期的数据。
累积快照事实表代表的是完全覆盖一个事务或产品的生命周期的时间跨度,它通常具有多个日期字段,用来记录整个生命周期中的关键时间点。另外,它还会有一个用于指示最后更新日期的附加日期字段。由于事实表中许多日期在首次加载时是不知道的,所以必须使用代理关键字来处理未定义的日期,而且这类事实表在数据加载完后,是可以对它进行更新的,来补充随后知道的日期信息。
举例来说客户购买商品的整个过程记录:
订货日期 预定交货日期 实际发货日期 实际交货日期数量 金额 运费
以现实中的实例进行说明
事实事务表
订单表-->记录客户购买商品的行为,其中的包含了(WHO,WHAT,HOW,WHEN要素)
周期事实表
以周期(T)为单位统计指标
如 过去7天,过去14天,过去21天,过去1个月,....
积累快照事实表
参见上面说明即可,例子很恰当
维度表,设计的原则是如何记录操作的历史痕迹为作为拆分的界限。
类别1
基础维度表中,不带有变化过程的,只描述现在的状态的,是其中一种方式。
类别2
基础维度表中,不带有变化过程的,只描述现在的状态的;变化的状态保存在第三张表中,成为LOG表。
这是数据库设计常用的,而且最为方便的。
09.3.3 小结区分清楚什么事实表,是那种事实表,从颗粒度区分最好
维度表 有很多种,但是常用的,常见的 就2种。