vlambda博客
学习文章列表

数据仓库中的维表和事实表

一.事实表


1.1 事实表结构

  事实表(Fact Table)是指存储有事实记录的表,如系统日志、销售记录等;事实表的记录在不断地动态增长,所以它的体积通常远大于其他表。


1.2 可加,半可加,不可加事实

事实表中的数字度量可划分为三类:

可加:

最灵活最有用的事实是完全可加,可加性度量可以按照与事实表关联的任意维度汇总。

半可加:

半可加度量可以对某些维度汇总,但不能对所有维度汇总。差额是常见的半可加事实,除了时间维度外,他们可以跨所有维度进行操作。(比如每天的余额加起来毫无意义)

不可加:

另外,一些度量是完全不可加的,例如:比率。对非可加事实,一种好的方法是,尽可能存储非可加度量的完全可加的分量,并在计算出最终的非可加事实之前,将这些分量汇总到最终的结果集合之中,最终计算通常发生在BI层或OLAP多维数据库层。


二. 维度表


2.1 维度表结构

维度表(Dimension Table)或维表,有时也称查找表(Lookup Table),是与事实表相对应的一种表;它保存了维度的属性值,可以跟事实表做关联;相当于将事实表上经常重复出现的属性抽取、规范出来用一张表进行管理。常见的维度表有:日期表(存储与日期对应的周、月、季度等的属性)、地点表(包含国家、省/州、城市等属性)等。

使用维度表有诸多好处,具体如下:

  • 缩小了事实表的大小。

  • 便于维度的管理和维护,增加、删除和修改维度的属性,不必对事实表的大量记录进行改动。

  • 维度表可以为多个事实表重用,以减少重复工作。


2.2 下钻

下钻是商业用户分析数据的最基本的方法。下钻仅需要在查询上增加一个行头指针,新行的头指针是一个维度属性,附加了sql语言的group by表达式,属性可以来自任何与查询使用的事实表关联的维度,下钻不需要预先存在层次的定义,或者是下钻路径。


2.3 退化维度

   有时,维度除了主键外没有其他内容,例如,当某一发票包含多个数据项时,数据项事实行继承了发票的所有描述性维度外键,发票除了外键无其他项,但发票数量仍然是在此数据项级别的合法维度键。这种退化维度被放入事实表中,清楚的表明没有关联的维度表,退化维度常见于交易和累计快照事实表中。


三.事实表和维表的关系