2014-01-23 79 views
4

我需要存儲一個相當大的歷史數據。我一直在研究存儲這種檔案的最佳方法。看來數據倉庫方法就是我需要解決的問題。似乎強烈建議使用日期維度表而非日期本身。任何人都可以向我解釋爲什麼單獨的桌子會更好?我不需要總結任何數據,只需在過去的任何一天快速高效地訪問它。我確定我錯過了一些東西,但我不明白如何將日期存儲在單獨的表格中比在存檔中存儲日期更好。使用日期維度表直接存儲日期的優點是什麼?

我已經找到了這些啓發性的帖子,但沒有任何回答我的問題。

回答

7

嗯,一個優點是,作爲一個維度可以存儲在其他表日的許多其他屬性 - 它是一個假期,它是一個工作日,它的財政季度是什麼,特定(或多個)時區的UTC偏移等等。您可以在運行時計算軟管,但在很多情況下,預先計算好(或只能)。

另一種情況是,如果您只是在表格中存儲DATE,則只有一個用於指示缺少日期(NULL)的選項,或者您需要開始製作無意義的令牌日期(如1900-01-01)以表示一件事(因爲你不知道而失蹤)和1899-12-31意味着另一個人(失蹤,因爲任務仍在運行,人仍然活着等)。如果您使用維度,則可以使用多行代表DATE未知/缺失的具體原因,而沒有任何「魔術」值。

個人而言,我寧願只是存儲日期,因爲它比INT(!)小,並且它保留了各種日期相關的屬性,執行日期數學等的能力。如果日期是缺失是重要的,我總是可以在表格中添加一列來表明這一點。但我正在迴應別人的數據倉庫帽子。

+1

另一個優勢是能夠使用時間智能功能,如果您沿着SSAS路徑並構建多維數據集/表格模型。 – TTeeple

0

可以說你去年每天都有一千個參賽作品。如果您有日期維度,則查詢會抓取日期維度中的日期,然後使用連接來收集您感興趣的一千個條目。如果沒有日期維度,則查詢將讀取全部365,000行以查找一千你要。更快,更高效。

+1

你的意思是你的查詢將無法使用日期列上的索引來查找並忽略其他364000行? –

+0

當然可以,我只是談論數據倉庫的結構。 – OTTA

+0

這就是我不完全理解的。如果您可以將日期首先作爲pk的一部分進行索引,那麼爲什麼還要在單獨的表上使用char(8)pk和fk? – RubberDuck