2010-05-01 106 views
6

我正在嘗試使用一個簡單的mysql數據庫,但調整它,以便每個字段備份到無限數量的版本。我可以說明的最好方法是用每個表格的每個字段替換這個字段所有值的堆棧(每個值都應該加上時間戳)。我想這就像爲我的所有數據定製版本控制。如何在MySQL中存儲版本控制數據

有關如何做到這一點的任何想法?

+0

http://stackoverflow.com/questions/2724187/where-are-all-the-native-revisioned-databases – 2010-05-01 23:18:27

回答

7

「跟蹤任何更改」到表的通常方法是在表上添加插入/更新/刪除觸發器過程,並將這些記錄保存在歷史記錄表中。例如,如果您的主數據表是「ItemInfo」,那麼您也將擁有一個ItemInfo_History表,每當有任何更改(通過觸發器)時,該表都會獲得新記錄的副本。

這可以保持主表的性能一致,但如果需要,還可以訪問任何更改的歷史記錄。

這裏有一些例子,它們是SQL Server,但他們表現出的邏輯:

Repository tableRepository History tableRepository Insert trigger procedureRepository Update trigger procedure

+0

我還沒有完全關注你,但你介紹了我觸發器,他們可能是我將要使用的。謝謝 – Shawn 2010-05-05 04:15:48

+0

增加了一些例子的鏈接,希望可以(希望)使這個過程更加清晰。 :-) – 2010-05-05 17:27:24

1

一個簡單的解決方案是將一個版本/修訂字段添加到表中,並且每當更新記錄時,而不是更新它時,插入一個應用了更改並且版本號遞增的副本。然後選擇時,請始終選擇最新版本的記錄。這大致就是大多數這種方案的實施方式(例如,維基媒體以這種確切的方式做到了這一點)。

+0

可能的重複我想到了這一點,但是我必須複製該行中的每個字段而不是實際上已經改變了價值的領域..似乎有點浪費,記憶上明智。 – Shawn 2010-05-05 04:01:00

3

嗯,你說的是什麼聲音相似Slowly Changing Dimension

請注意,對任意數據庫結構的版本控制是一個比較難的問題。 :-)

+0

看起來像緩慢變化的維度要求我複製連續的每一個字段,即使只有一個字段被修改了..似乎有點浪費,內存明智 – Shawn 2010-05-05 04:02:31

+0

那麼,這就是爲什麼你使用它*緩慢*改變尺寸。 – Ken 2010-05-10 16:03:29

0

也許一個工具可以幫助你爲你做到這一點。看看nextep設計師

http://www.nextep-softwares.com

有了這個IDE,你將能夠把你的數據庫結構和數據的快照,並把它的版本控制之下。在此之後,您可以計算任意兩個版本之間的差異,並生成可插入/更新/刪除數據的相應SQL。

也許這是一種替代方法來實現你想要的。