2011-02-07 153 views
3

我工作於以PHP和MySQL開發的以市場研究數據庫爲中心的網站。 它由兩個大部分組成 - 用戶可以在其中插入和更新自己的數據(讓一個表T帶有user_id字段),另一個部分是網站管理員可以插入新的或更新現有記錄(同一個表)。跟蹤數據變化

顯然,在某些情況下,最終用戶的數據會被管理員覆蓋,而在其他情況下,管理員輸入的數據將由最終用戶更新(這兩種方式都很好)。

要求是如果最終用戶是最後一個更新某個字段,或者如果管理員要「責備」,則需要用藍色突出顯示查看/編輯表單(比方說)。

我正在研究一種高效和一致的方法來實現這一點。

到目前爲止,我有以下選擇:

  • 對於表T的每個記錄,添加在其中寫「U」如果終端用戶插入/更新字段另一個((1)字符)或者如果管理員這樣做了'A'。當呈現查看/編輯表單時,使用此信息來相應地突出顯示每個字段。

  • 創建一個新表H存儲包含諸如user_id,field_name,last_update_user_id之類的編輯歷史。當主表T中的字段更新時,使表H保持最新。當呈現查看/編輯表單時,使用此信息來相應地突出顯示每個表單字段。

這些選項有什麼優點/缺點;你能建議其他人嗎?

+0

「記錄」,你的意思是行或列? – 2011-02-07 17:13:28

+0

對不起Jakob的困惑,我打算說專欄;我將編輯以反映此 – Adrian 2011-02-07 17:16:35

回答

2

我想這隻取決於你想成爲多麼高瞻遠矚。

您的第一種方法的優點是實施起來非常簡單,更新和使用起來非常簡單,並且只會非常輕微地增加您的存儲需求,但它也是您在信息量方面的極端最低限度正在儲存。

如果您採用第二種方法並存儲更完整的歷史記錄,如果您將來需要添加「編輯歷史記錄」,那麼您已經爲此設置了一些內容,並且大量數據在等待。但是,如果你最終不需要這些數據,這有點浪費。

或者,如果你想要兩全其美,你可以將它們結合起來。保留完整的編輯歷史記錄,但也要更新主記錄中的單字符標誌。這樣,您不必對歷史記錄進行任何處理即可找到最新的編輯內容,只需查看標記即可。但是,如果您確實需要完整的歷史記錄,則可以使用。

就我個人而言,我更喜歡保留更多信息,而不是我認爲當時需要的信息。存儲空間非常便宜,你永遠不知道什麼時候它會派上用場。我可能會比你提出的要更進一步,並且使編輯歷史跟蹤他們改變了什麼,以及前/後值。這對於調試非常方便,並且可能在將來根據項目的確切需求而有用。

2

是的,實施一個審覈表,保存歷史數據的副本,由誰/從誰& c。我目前正在使用一個簡單的系統,並將值更改寫成簡單的名稱 - 值字符串對以及日期和由誰。它需要強制性的主記錄調整,但適用於跟蹤。您可以通過觸發器輕鬆實現。

0

審計數據更改的最佳方法是通過數據庫表上的觸發器。在你的情況下,你可能只想更新最後一個人來做出改變。或者您可能需要一個完整的審計解決方案,您可以在其中存儲以前的值,以便在錯誤地編制它們時輕鬆恢復它們。但關鍵是要在數據庫上執行此操作,而不是通過應用程序執行。數據庫更改通常是通過應用程序之外的其他來源進行的,您需要知道是否也發生了這種情況。假設有人侵入數據庫並更新了數據,難道您不希望能夠輕鬆地找到舊數據,或知道是誰做了這些數據,即使他或她是通過查詢窗口而不是通過應用程序來完成的?如果您需要一次獲取大量數據,您可能還需要知道數據是否通過數據導入進行更改。