2011-03-07 49 views
5

我有一個要求,即在SQL Server支持的網站基本上是一個大的CRUD應用程序,用戶應該能夠「回到過去」的某切割和能夠按照給定時間點導出數據。版本的數據,以便用戶可以把數據

我的問題是什麼是這個問題的最好策略是什麼?我可以採用哪種系統方法並將其應用於所有表格?

+2

這可能會有所幫助:http://blog.schauderhaft.de/2009/11/29/versioned-data/ – 2011-03-07 14:18:19

+1

關於**時間數據庫的相關問題**(這是你試圖實現的名稱):http://stackoverflow.com/q/3875078/95和http://stackoverflow.com/q/800331/95 – 2011-03-07 14:23:42

+0

@Jens - 良好的總結。感謝您的鏈接。 – 2011-03-07 14:24:02

回答

5

取決於正是你需要的,這可能是比較容易還是地獄。

簡單:做一個歷史表每個表,將數據複製有預更新或交插入/更新(即新的東西是有太多)。切勿從原始表中刪除,進行邏輯刪除。硬件:每次更改都有一個fdb版本計數,每個數據項目都與開始和結束相關。這需要非常花哨的主鍵修改。

+0

謝謝TomTom--我喜歡'輕鬆'的方法! – 2011-03-07 14:39:25

0

最簡單的辦法是節約每一行的副本,每當它改變。這可以通過觸發器輕鬆完成。然後,您的用戶界面必須提供搜索功能才能返回並查找數據。

這確實會導致數據爆炸,當表更新頻繁時會變得更糟,所以下一步通常是對舊數據進行某種基於數據的清除。

+1

這解釋瞭如何存儲數據,但您如何查詢它? – RQDQ 2011-03-07 14:26:50

+0

與查詢其他任何東西的方法相同 - 假設UI具有按窗體查詢或其他相關技術(OP確實說這是CRUD),則可以在指定日期範圍內放置兩個額外的日期框。 – 2011-03-07 18:13:04

0

你可以看看實現是Team Foundation Server。它有能力執行歷史查詢(使用WIQL關鍵字ASOF)。後端是SQL Server,因此可能有一些線索。

1

只需在以前的答案中添加一點評論即可。如果您需要返回所有用戶,您可以使用snapshots

+0

有趣的鏈接。謝謝。由於系統沒有很多用戶,這可能會起作用。雖然關注長期生存能力。 – 2011-03-07 14:37:00

相關問題