事实表(数据库)
时间:2022-11-13 20:30:02 | 来源:信息时代
时间:2022-11-13 20:30:02 来源:信息时代
事实表 : 是用于记录多维数据模型中维度交叉点处的度量信息的关系表,该关系表的结构一般由维度的码值和相应度量值构成。事实表抽取的过程: 由时间维(time)、商品维(product)和销售市场维(market)构成,时间维度有4个取值(2001,2002,2003,2004),产品维度有4个取值(计算机,彩电,冰箱,空调),销售市场维度有4个取值(中百大,盛兴,新百大,华联),度量是产品的销售额。于是事实表的表结构为(time_id,product_id,market_id,sales),依次从图1中水平面的右上角开始逐点记录度量信息。右上角对应于(1,1,1,7000),依次是(1,2,1,5000)、(1,3,1,758)、(1,4,1,469)。
图1 事实表抽取示例
事实表(time_id,product_id,market_id,sales)中除了度量变量sales外,其余的列都是各个维表的主键,因此它们在事实表中是外键且不能为空。事实表的这种结构最大的好处是通过字节数很少的外键同维表相连,从而大大地节省了存储空间。这一点在问题涉及维数较多且维中具有多个层次时尤为有效。
例如,对上面的例子进行修改,在时间维上增加(year,quarter,month)3个层次,在销售商品维上增加(商品大类pro_class,商品小类pro subclass)2个层次,销售市场维增加(国家country,省province,市city)3个层次。假定每个维表具有50个条目,则它们的组合将在事实表中产生50×50×50个数据条目(这里假定没有空缺数据单元)。为了简单起见,假定所有字段为8个字节长度,则利用维表/事实表进行数据存储需要的空间是:
维表空间为: 50×4×8+50×4×8+50×3×8=4 400;
事实表空间为: 50×50×50×4×8=4 000 000;
总空间为: 4 000 000+4400=4 004 400≅3.9MB。
可以看出同事实表相比,维表占用的数据空间几乎可以忽略不计。
下面计算利用关系表进行数据存储需要的空间,问题对应的关系表共有9个字段,其所需空间为: 50×50×50×9×8=9 000 000≅8.8MB>3.9MB。
可以看到使用关系表将比维表/事实表占用大得多的空间。这里,还没有记入关系表进行预计算后得到的各个综合层次数据结果的存储空间,实际的关系表占用的空间将比计算的要大得多。