数据仓库中的维表和事实表
一.事实表
1.1 事实表结构
事实表(Fact Table)是指存储有事实记录的表,如系统日志、销售记录等;事实表的记录在不断地动态增长,所以它的体积通常远大于其他表。
1.2 可加,半可加,不可加事实
事实表中的数字度量可划分为三类:
可加:
最灵活最有用的事实是完全可加,可加性度量可以按照与事实表关联的任意维度汇总。
半可加:
半可加度量可以对某些维度汇总,但不能对所有维度汇总。差额是常见的半可加事实,除了时间维度外,他们可以跨所有维度进行操作。(比如每天的余额加起来毫无意义)
不可加:
另外,一些度量是完全不可加的,例如:比率。对非可加事实,一种好的方法是,尽可能存储非可加度量的完全可加的分量,并在计算出最终的非可加事实之前,将这些分量汇总到最终的结果集合之中,最终计算通常发生在BI层或OLAP多维数据库层。
二. 维度表
2.1 维度表结构
维度表(Dimension Table)或维表,有时也称查找表(Lookup Table),是与事实表相对应的一种表;它保存了维度的属性值,可以跟事实表做关联;相当于将事实表上经常重复出现的属性抽取、规范出来用一张表进行管理。常见的维度表有:日期表(存储与日期对应的周、月、季度等的属性)、地点表(包含国家、省/州、城市等属性)等。
使用维度表有诸多好处,具体如下:
缩小了事实表的大小。
便于维度的管理和维护,增加、删除和修改维度的属性,不必对事实表的大量记录进行改动。
维度表可以为多个事实表重用,以减少重复工作。
2.2 下钻
下钻是商业用户分析数据的最基本的方法。下钻仅需要在查询上增加一个行头指针,新行的头指针是一个维度属性,附加了sql语言的group by表达式,属性可以来自任何与查询使用的事实表关联的维度,下钻不需要预先存在层次的定义,或者是下钻路径。
2.3 退化维度
有时,维度除了主键外没有其他内容,例如,当某一发票包含多个数据项时,数据项事实行继承了发票的所有描述性维度外键,发票除了外键无其他项,但发票数量仍然是在此数据项级别的合法维度键。这种退化维度被放入事实表中,清楚的表明没有关联的维度表,退化维度常见于交易和累计快照事实表中。
三.事实表和维表的关系