2011-01-10 123 views
3

我正在使用Zend框架開發基於Web的應用程序。跟蹤數據庫列值更改

我正在尋找一種方式來保持一堆列所做的更新史。

用例: 用戶可以與5個屬性添加項目。用戶被允許更新5個屬性。我需要跟蹤他對這5個屬性所做的所有更新。

在路上我還以爲物添加新表命名日誌存儲的舊值,新值,列名,ITEMID和時間戳。

這樣做的最好方法是什麼?有沒有現有的方法/選項/例子?

謝謝,

回答

3

你可能要查找的是審計日誌。您可以在MySQL數據庫上使用觸發器創建一個。

如何做到這一點的一個例子是在這裏:http://ronaldbradford.com/blog/auditing-your-mysql-data-2008-07-15/

在下面你您的評論補充說,該數據庫沒有「固定」。在這種情況下,您必須將任何更改複製到表中,以便將這些更改應用到審計表,以便將任何新添加的列也添加到日誌中。

你可以考慮在應用程序中記錄此(爲您選擇了這個問題的標籤似乎暗示) - 但請記住,這意味着有可能的情況下你的日誌不提供完整的答案。觸發器,存儲過程和數據庫中的任何手動干預都不會被記錄下來,所以如果您選擇沿着這條路徑走,請小心。

+0

我的數據庫沒有修復。這會成爲一個問題嗎?這可以使用其他然後mysql? – panxpress 2011-01-10 20:06:18

+0

如果通過修正您的意思是列將被改變(基於用戶在應用程序中執行操作)..然後是。這將是一個問題。是的,其他數據庫(PostGres,我知道的MSSQL,其他很可能)支持這一點。 – kander 2011-01-10 20:12:08

1

觸發器是做審計的最常見方式,捕捉到什麼做是否從用戶界面或其他地方做的唯一真正可靠的方法。他們確實依據數據庫的不同而改變。如果您知道您將支持的數據庫後端的可能類型,則可以爲每個後端編寫單獨的觸發器。

如果你必須處理這個沒有觸發,那麼你最好的選擇是有寫入審計表,以及使更新變化的過程。它可能足夠複雜以保證Zend框架所調用的存儲過程,而不是依賴框架本身來執行。 (我不是familair與Zend,所以我不知道這是有可能成立,我知道一個存儲過程可以處理這個問題。)

0

我剛剛創建了一個新的表稱之爲Comp_Hist_Log,然後定義在 舊數據之前UPDATE鉤 $ OLDDATA = $陣列(「fieldname1」,「fieldname2」)

然後在AFTER_UPDATE鉤在我的數據庫貴鉤文件..添加此代碼

SQL(「INSERT INTO Comp_Hist_LogCom_Rec_Idold_datanew_dataChangedDateChangedBy

VALUES( '{$數據[' RECORD_ID ']}', '{$ OLDDATA}', '{$ messageData}','{$ data ['LastUpdated']}','{$ memberInfo ['username']}')「,$ eo); 返回TRUE;

希望它有助於..它確實有效。