事實(shí)表(數(shù)據(jù)庫(kù))
時(shí)間:2022-11-13 20:30:02 | 來(lái)源:信息時(shí)代
時(shí)間:2022-11-13 20:30:02 來(lái)源:信息時(shí)代
事實(shí)表 : 是用于記錄多維數(shù)據(jù)模型中維度交叉點(diǎn)處的度量信息的關(guān)系表,該關(guān)系表的結(jié)構(gòu)一般由維度的碼值和相應(yīng)度量值構(gòu)成。事實(shí)表抽取的過(guò)程: 由時(shí)間維(time)、商品維(product)和銷售市場(chǎng)維(market)構(gòu)成,時(shí)間維度有4個(gè)取值(2001,2002,2003,2004),產(chǎn)品維度有4個(gè)取值(計(jì)算機(jī),彩電,冰箱,空調(diào)),銷售市場(chǎng)維度有4個(gè)取值(中百大,盛興,新百大,華聯(lián)),度量是產(chǎn)品的銷售額。于是事實(shí)表的表結(jié)構(gòu)為(time_id,product_id,market_id,sales),依次從圖1中水平面的右上角開(kāi)始逐點(diǎn)記錄度量信息。右上角對(duì)應(yīng)于(1,1,1,7000),依次是(1,2,1,5000)、(1,3,1,758)、(1,4,1,469)。
圖1 事實(shí)表抽取示例
事實(shí)表(time_id,product_id,market_id,sales)中除了度量變量sales外,其余的列都是各個(gè)維表的主鍵,因此它們?cè)谑聦?shí)表中是外鍵且不能為空。事實(shí)表的這種結(jié)構(gòu)最大的好處是通過(guò)字節(jié)數(shù)很少的外鍵同維表相連,從而大大地節(jié)省了存儲(chǔ)空間。這一點(diǎn)在問(wèn)題涉及維數(shù)較多且維中具有多個(gè)層次時(shí)尤為有效。
例如,對(duì)上面的例子進(jìn)行修改,在時(shí)間維上增加(year,quarter,month)3個(gè)層次,在銷售商品維上增加(商品大類pro_class,商品小類pro subclass)2個(gè)層次,銷售市場(chǎng)維增加(國(guó)家country,省province,市city)3個(gè)層次。假定每個(gè)維表具有50個(gè)條目,則它們的組合將在事實(shí)表中產(chǎn)生50×50×50個(gè)數(shù)據(jù)條目(這里假定沒(méi)有空缺數(shù)據(jù)單元)。為了簡(jiǎn)單起見(jiàn),假定所有字段為8個(gè)字節(jié)長(zhǎng)度,則利用維表/事實(shí)表進(jìn)行數(shù)據(jù)存儲(chǔ)需要的空間是:
維表空間為: 50×4×8+50×4×8+50×3×8=4 400;
事實(shí)表空間為: 50×50×50×4×8=4 000 000;
總空間為: 4 000 000+4400=4 004 400≅3.9MB。
可以看出同事實(shí)表相比,維表占用的數(shù)據(jù)空間幾乎可以忽略不計(jì)。
下面計(jì)算利用關(guān)系表進(jìn)行數(shù)據(jù)存儲(chǔ)需要的空間,問(wèn)題對(duì)應(yīng)的關(guān)系表共有9個(gè)字段,其所需空間為: 50×50×50×9×8=9 000 000≅8.8MB>3.9MB。
可以看到使用關(guān)系表將比維表/事實(shí)表占用大得多的空間。這里,還沒(méi)有記入關(guān)系表進(jìn)行預(yù)計(jì)算后得到的各個(gè)綜合層次數(shù)據(jù)結(jié)果的存儲(chǔ)空間,實(shí)際的關(guān)系表占用的空間將比計(jì)算的要大得多。