2009-10-04 43 views
11

據說這裏:時態數據庫和歷史歸檔數據庫有什麼區別?

http://www.ibm.com/developerworks/web/library/wa-dbdsgn2.html

在數據庫中的每個表應該有一個歷史表,反映了整個 歷史上的主表。如果主表中的 條目將更新爲 ,則在進行更新之前, 記錄的舊內容將首先複製到歷史記錄 表中。同樣在 中, 主表中的已刪除記錄被複制到 歷史表中,然後從主要表中刪除 。歷史記錄 表格始終具有 對應主名稱的名稱,但附加了 _Hist。

在時態分貝看到這裏temporal database modeling and normalisation據我所知,沒有一個單獨的表。

那麼我什麼時候應該創建另一個表?

回答

7

什麼羅伯特理論上說 - 什麼要補充的。

實際上,,時態表與主+表格,還有其他暗示。

對於大量維護的數據(例如,更新/刪除大大超過插入),具有歷史(有時也稱爲「審計」 - 因爲它是實施DB數據的審計追蹤的主要機制)表允許保留與保持主表本身內部的審計信息相比,主表的尺寸相當小。這可能會對主表上的選擇和插入有重大的性能影響,尤其是考慮到下面討論的索引優化。

爲了避免這種情況,hist/audit表的索引不需要與主表100%相同,這意味着您可以省略從hist數據庫查詢審計數據所不需要的索引(從而加快插入審計表),反之亦然,優化對具體的審計查詢有哪些索引(包括通過聚集索引按時間戳排序表),而不會在主表中使用減緩數據更改速度的索引(並且在集羣時間爲更新,與主表的聚集索引衝突,所以你通常不能按時間順序聚集)。

+0

+1良好的觀察。 – 2009-10-04 23:05:17

+0

如果SO上的每一個線程總是如此公平...... :) – DVK 2009-10-05 17:15:23

6

歷史記錄表提供了用戶對主數據庫記錄進行的(通常是非時間的)更改的歷史記錄。該歷史是自然存檔的(即,爲了歷史目的偶爾訪問)。時間信息(進行更改時)本質上屬於次要信息。

時態數據庫是專門爲執行時間查詢而設計的。時間信息本質上是主要的,並且保持聯機以供立即檢索。除非需要存檔,否則不會創建第二個表。

http://en.wikipedia.org/wiki/Temporal_database

+0

這意味着標準選擇取決於數據處理? – programmernovice 2009-10-04 21:18:46

+0

這取決於數據檢索的性質和用途。歷史表通常只有當有人需要知道誰進行了更改,更改是什麼以及更改何時完成時纔可以訪問。時間數據庫專門用於對與修訂歷史無關的數據執行基於時間的查詢。所以這兩者完全不同。 – 2009-10-04 21:23:07

+0

+1。我在回答中添加了一些實際的考慮因素。 – DVK 2009-10-04 21:48:15

1

在那篇developerworks文章中討論的歷史表是一張保存數據庫歷史(即我們對現實的信念歷史)的表。

您在其他線索中詢問的那種歷史可以持有我們的(當前!)關於現實的歷史的信念。

請注意區別。這兩種觀點只有在我們過去關於現實的觀點確實是正確的時候纔會這樣做。這並不總是100%。

如果你使用前者作爲後者,那麼你在某種意義上假設這種併發度的確是100%,也就是說,你所有關於現實的過去信念總是和現實一致,即你是假設你不可能對現實有任何錯誤的信念。

保存其他錶的歷史記錄可以適合審計的目的。持有現實歷史的表格可以適合任何對該歷史信息感興趣的用戶的目的。

相關問題