2017-07-07 105 views
1

我正在開發一個帶有mysql的web應用程序,並且我有幾個表格,包括用戶文章(Mysql)什麼是最有效的方式來存儲表更改?

,因爲我想記錄已更新所選文章的用戶,我想到了三種可能性:

  • 添加兩列表文章:ART_USE_ID(知道是誰改變)和ART_date(保存日期時間)。
  • 創建第三個表更改與CHA_USE_ID,CHA_ART_ID和CHA_date,這將有一個條目每次用戶更改表時。
  • 將兩者結合使用:創建表格更改但保留ART_date以更快地檢索上次更改的日期。

在我看來,第三個是多餘的,第一個嚴重概念化(只保留最後的變化)。即使第二個似乎只適用於一個表(文章),恐怕它變得更加複雜和非常緩慢,如果更改必須保存超過30個表 - 這意味着更改表會有30個外鍵(?!)

什麼是最好的方法?你對此有何看法?

+0

選項2b;爲每個需要跟蹤此類數據的表格提供一個單獨的「歷史記錄」表格;而不是一個捕獲所有表的可選參考大量表。 – Uueerdo

回答

1

爲此,MySQL有一個名爲Audit Log的功能。這個想法是,「審計」是數據變化的一系列事件,被寫入數據庫之外的日誌文件。這樣,您可以檢查日誌中的更改,可以看到對相同數據的多個更改,可以過期日誌等等。

審計日誌需要一個插件實現來完成它的工作。 MySQL製作了一個企業審計插件,但它不是免費的 - 您必須成爲付費客戶才能獲得MySQL Enterprise。

有幾個免費審計日誌插件實現的替代品。

您可能想試試Percona Audit Log Plugin。這是Percona服務器(MySQL社區版的一個分支)隨附的可選插件。你只需要啓用插件。

安裝和配置文檔:https://www.percona.com/doc/percona-server/5.7/management/audit_log_plugin.html

0

你真的想知道每個修改文章的人嗎?如果答案是肯定的,你必須使用第二個,我認爲最好的選擇是第一個(以計數速度,時間),我想你只需要知道修改文章的最後一個人。

相關問題