2011-11-08 107 views
6

我有幾張表,我想保留修訂歷史記錄。什麼是完成這個最好的方法?這將是幾個領域(20左右)。保持與PHP和MySQL的修訂歷史記錄

我應該創建一個重複的表並只提交舊數據嗎?我應該使用觸發器嗎?或者我應該創建一個單獨的表並只跟蹤所做的更改?

+3

你想你的版本可能會改變對錶的任何引用)表或修改表中的數據? –

回答

2

這裏是我問了幾個月前的問題,但我會做同樣的方式再次

Database entries modification history

+0

我想過這樣做,我可能會這樣做。只是想看看是否有其他選擇。 – Keith

+0

我對此有一個疑問。在數據字段中,您只是序列化已更改的數據或所有數據?如果只是變化的數據,你如何計算出哪些數據實際發生了變化? – Keith

+0

我在更新之前序列化所有數據,這樣它就可以適應表結構的變化 –

0

您可以在您的表格中添加另一列,用於跟蹤入口ID,而主動PK則是修訂ID。修訂版本號最高的是最新的活動記錄,具有相同入口標識的其他條目是以前的修訂版本。

+0

我打算這樣做,但問題是有其他錶鏈接到此表的主鍵。所以,如果我插入一個新行,關係就會中斷。 – Keith

3

Propel一些奧姆斯可以「原生地」處理這種經常需要。

檢查versionable behavior

  • 它會自動添加一個版本列到 「版本」 表(比如MYTABLE),並創建一個mytable_version表(含肯定列mytable_id版本)。

  • 它提供了一個簡單的API來查詢版本化表。例如,當您執行$myobject->save();時,它會自動填充表mytable_version並相應地更新字段mytable.version

5

我們非常滿意我們的選擇,即對每個版本化的實體使用兩個表。

表將類似於此:

person

  • ID(PK)
  • 版本(櫃檯樂觀鎖)
  • 當前(國外關鍵參考person_version
  • ...(這不會改變任何屬性)

person_version

  • ID(PK)
  • (NOT NULL)(外鍵引用person
  • 時間戳(用於分類)
  • ...(任何屬性tha牛逼可能會發生變化)

正如person_version條目永遠不會改變,很容易對它們進行緩存(只要有不