2013-10-10 43 views
2

在我的存儲數據模型,我得到了以下關係:事實表 - 選擇不同?

root_tbl - 1:N - entry_tbl - N:1 - action_tbl

有一些更多的表,但是這包括基礎知識。 好吧,基本上一個來自根表的ID在入口表中有幾個數據集。

示例數據:

root_tbl: 

ID_root ; Country ; FK_User ; FK_Product 
     1 ;  UK ;  23 ;  31 
     2 ;  NL ;  42 ;  01 


entry_tbl: 

ID_entry ; FK_root ; FK_Action ; Duration 
     1 ;  1 ;  42 ; 200ms 
     2 ;  1 ;  10 ; 94ms 
     3 ;  1 ;   9 ; 300ms 
     4 ;  2 ;  10 ; 322ms 
     5 ;  2 ;  30 ; 100ms 

到目前爲止好......這個數據模型這是很容易回答的事情怎麼樣多條記錄有「英國」爲國行動「10」等。 現在我想將這些數據放入事實表中,但是我的問題是這三個表格的關係。例如,我會使用entry_tbl的記錄作爲事實,而不是每次統計國家/地區,用戶或產品時必須對ID進行選擇。

事實表看起來或多或少像這樣(只是想象中的字符串作爲外鍵):

fact_tbl: 

ID ; FK_Action ; Duration ; Country ; User ; Product 
1 ;  42 ; 200ms ;  UK ; 23 ;  31 
1 ;  10 ;  94ms ;  UK ; 23 ;  31 
1 ;   9 ; 300ms ;  UK ; 23 ;  31 
2 ;  10 ; 322ms ;  NL ; 42 ;  01 
2 ;  30 ; 100ms ;  NL ; 42 ;  01 

這意味着我將有大量的冗餘數據。

是否有解決這些解決什麼辦法?事實表將包含約300-500米的行。

我希望你有我的觀點。如果有什麼不明確隨意問

問候 托馬斯

回答

3

那麼它通常執行的事實表的聚集,在這種情況下,不同的是沒有實際意義。

在這裏,你需要使用計數(不同)來計算ID的數量,但是這是一個數據倉庫是什麼。同樣,您可能必須運行總和(持續時間)或計數(不同的用戶)或計數(不同的產品)。

我不認爲你有一個設計問題,你只需要確保您有被操作爲您的團體足夠的內存空間,而不基於磁盤的排序儘可能運行。通過V $ SQL_WORKAREA_ACTIVE監視大型查詢,監視SGA和PGA緩存顧問,並根據需要調整內存分配。

+0

我指定我的問題。我希望這給一個更好地瞭解! – user2428207

+0

好吧,基本上你說的是非規範化的事實表是常見的權利? – user2428207

+1

我不會這樣描述它 - 事實表是一系列與相關分類(尺寸)相關的指標(事實)。你有沒有什麼看起來像一個「墮落的維度」,如果有它沒有獨立的維度表,但在星型模式計數指標幾乎總是會需要不同的,除非你計數事實本身的數量。對於你的模型,你不得不將它定義爲每個id的單行,因此一列需要保存每個可能行爲的持續時間。這更像是一種數據智能方法 - 同樣有效但不可擴展。 –