Mysql

需要審核日誌。我應該在每個表中創建審核日誌表還是審核欄位?

  • December 13, 2019

我絕不是數據庫專家,但我確實有創建數據庫的經驗。雖然不確定以下內容。

我希望系統中發生的一切都是可追踪的。我的客戶正在處理大量資金,如果犯了錯誤,則需要對其進行跟踪。從數據庫和開發人員的角度來看,更容易的是:1)

  • 由…製作
  • 創建日期
  • 更新人
  • 更新日期

在 7-10 桌或

2)一個專用表

  • action_done
  • action_done_by
  • 行動日期

然後是一個包含動作的輔助表。id action_type

優點 1:更容易確保您不會錯過任何東西。缺點 1:維護、報告等很煩人,因此不干淨。

優點 2:哦,如此乾淨,易於報告。缺點 2:更容易錯過您想要記錄的內容(儘管 1 可能是這樣,但可能性較小,因為欄位位於每個表中,並且它們需要用於某些事情。)

是這樣,我只需要以一種或另一種方式做出決定嗎?或者是否有我應該有的數據庫性能問題或我缺少的其他東西?

您的兩種方案有不同的用途。當您的應用程序需要了解實體的歷史時,前者很有用,例如顯示截至去年 12 月的資產負債表。另見“緩慢變化的維度”和“臨時表”。

後者更接近真正的審計追踪,它應該與其報告的數據分開,甚至可能與其報告的數據庫分開——否則相同

$$ compromised $$輸入錯誤數據的應用程序也可以修改審計跟踪以掩蓋更改。將審計數據與其源實體分開儲存也有利於性能——應用程序不需要篩選數天/數月/數年的歷史數據來獲取目前記錄。 如果決定將審計線索存入數據庫,至少要保證修改數據的授權ID不能訪問審計線索表,審計授權ID不能改變源數據(也稱為職責分離)。

引用自:https://dba.stackexchange.com/questions/255595