2012-01-18 99 views
3

我即將建立一個新的數據庫,該數據庫將需要包含仍然可訪問的記錄的歸檔。記錄都與某些項目相關聯,當項目存檔時,我希望記錄保持不變,即快照。 (例如,如果聯繫人與歸檔項目相關聯,並且他們在一年後移動,我希望它仍然拉取舊地址。)歸檔記錄不需要更新,但它們確實需要可訪問。歸檔理論

我對如何解決這個問題有了一個想法,但我不確定這是否是最好的方法:每個表格都有一個「歸檔」所有內容的副本,然後在歸檔時將所有項目FK/PK關係會被更新,儘管這似乎是一個繁瑣的過程。

我的另一個想法是每個項目(即聯繫人)都會被分配一個PK,然後每個項目都會有一個輔助鍵,然後與每個項目關聯。與此有關的主要問題是,如果聯繫人更新實時項目似乎很困難,需要進行大量更新。

如果您有任何問題,請讓我知道。

謝謝你的幫助。

+0

http://dev.mysql.com/doc/refman/5.0/en/archive-storage-engine.html在SeverFault上這可能更合適。另請參閱http://stackoverflow.com/questions/65093/best-way-to-archive-live-mysql-database – jishi 2012-01-18 15:33:54

+0

您也可以查看錶的分區,這對您的應用程序是透明的。但是這個問題也屬於serverfault。 – jishi 2012-01-18 15:37:47

回答

0

嗯......我唯一遇到類似問題的時候,有一個想法是在應用程序層解決它,而不是在數據庫上。

例如,對於ruby,您可以使用vestal_versions或paper-trail。

例如,Paper-trail將所有對象的版本作爲序列化對象存儲在一張表上,並與增量工作。

0

您正在尋找的是將時態數據包含在您的域數據中。這種事情並不是一項微不足道的任務,而且往往是需要支持它的應用程序的複雜性的原因。

有很多方法可以做到這一點,每一種方式都有其優點和缺點,並且您選擇的方式取決於您需要處理數據的時間元素的什麼。其中一些包括:

  1. 審計線索
    • 你跟蹤一段時間內記錄所做的更改和主記錄反映它的當前狀態
    • 減少數據複製到最低限度
    • 很有可能沒有按」噸適合的「快照」模式,你正在尋找容易
  2. 大多數當前
    • 你有一個記錄每個用它創建時的時間戳的實體的「版本」
    • 讓您輕鬆跳回到一個時間點
    • 讓您輕鬆「叉」的實體
    • 擁有最多的數據複製

Martin Fowler的寫了有關設計與時空數據模型處理一些文章,所以我會從那裏開始的話題在一個良好的,堅實的基礎。