每次我需要設計一個新的數據庫時,我花了相當一段時間 考慮如何設置數據庫模式以保持審計日誌 的更改。用於審計日誌記錄的數據庫設計
有些問題已經在這裏關於這個要求,但我不同意, 有適合所有情況的一個最好的方法:
- Database Design For Revisions
- Best design for a changelog auditing database table
- Ideas on database design for capturing audit trails
我也偶然發現了這個interesting article on Maintaining a Log of Database Changes試圖列出親和EAC的利弊h方法。它寫得非常好,並且有有趣的信息,但它使我的決定變得更加困難。
我的問題是:是否有一個參考,我可以使用,也許一本書或者像一個決策樹可以參考我來決定哪種方式應基於一些 輸入變量我走了,喜歡的東西:
- 數據庫架構
- 如何日誌將被查詢
- 的概率,這將需要重新記錄
- 什麼是更重要的成熟度:寫入或讀取PE rformance
- 自然可
,我知道的方法正在被記錄的值(字符串,數字,斑點)
1.添加列創建修改日期和用戶
表例如:
- ID
- _1
- _2
- VALUE_3
- CREATED_DATE
- modifed_date
- CREATED_BY
- modified_by
主要缺點:我們失去了改變的歷史。提交後無法回滾。
2。只能插入表格
- ID
- _1
- _2
- VALUE_3
- 從
- 到
- 刪除(布爾)
- 用戶
主要缺點:如何讓外鍵保持最新狀態?巨大的空間需要
3.爲每個表
歷史表的例子創建一個單獨的歷史表:
- ID
- _1
- _2
- VALUE_3
- VALUE_4
- 用戶
- 刪除(布爾)
- 時間戳
主要缺點:需要複製所有審計表。如果模式更改,則還需要遷移所有日誌。
4.創建一個統一的歷史表中所有的表
歷史表的例子:
- table_name的
- 場
- 用戶
- NEW_VALUE
- 刪除(布爾)
- 時間戳
主要缺點:如果需要,我能否重新創建記錄(回滾)? new_value列需要是一個巨大的字符串,因此它可以支持所有不同的列類型。
相關:http://stackoverflow.com/questions/9852703/store-all-data-changes-with-every-details-stackoverflow-like – Kaii 2012-03-24 23:57:55
以及使用歷史數據庫,而不是表的是什麼? – Jowen 2015-01-26 14:01:17
也許你可以檢查https://github.com/airblade/paper_trail的設計 – zx1986 2016-07-08 13:08:35