在處理內容管理系統時,我遇到了一些問題。回到我的數據模型,我注意到一些可能隨着時間流逝而變得更普遍的問題。主鍵,UUID,RecordKey表,哦我的
也就是說,我想維護用戶對記錄修改的審計跟蹤(更改日誌)(甚至會記錄用戶記錄修改)。由於包含了任意數量的模塊,因此我不能在我的主鍵中使用按表自動增量字段,因爲在試圖將其鍵保存在單個表中時不可避免地會導致衝突。
審計線索將保持user_id
,record_id
,timestamp
,action
的記錄(INSERT/UPDATE/DELETE),以及archive
(舊記錄的序列化副本)
我已經考慮了幾個可能的解決方案該問題,例如在應用程序邏輯中生成主鍵(以確保跨數據庫平臺兼容性)。
我考慮過的另一個選項(我相信即使考慮這種方法,共識也會是負面的)創建一個RecordKey
表,以維護一個全局自動遞增的密鑰。不過,我相信有更好的方法來實現這一點。
最終,我很想知道在嘗試執行此操作時應考慮哪些選項。例如,我打算允許(至少啓動)MySQL和SQLite3存儲的選項,但我擔心每個數據庫如何處理UUID
。
編輯使我的問題不太模糊:將使用全局ID是我的問題的推薦解決方案?如果是這樣,使用128位UUID(應用程序或數據庫生成)我可以在我的表設計中做什麼,這將有助於最大限度地提高查詢效率?
謝謝** Thilo **;這是我所做的一個考慮,添加`table_name`並按照你所描述的使用它。當然,爲了完善審計線索,將它作爲附加數據添加可能會有所幫助。但請考慮這種情況;用戶將博客模塊卸載爲更加全面的博客模塊,但這兩個博客模塊都對錶使用相同的命名方案。可能會出現衝突,因爲我不打算級聯刪除審計記錄。這就是爲什麼我傾向於支持某種全球關鍵實施。 – Dan 2010-11-26 05:02:28
您描述的衝突不會成爲問題,因爲您仍然有時間戳知道哪個模塊使用哪個表的時間。唯一的問題是有人同時安裝了兩個模塊,但這似乎是不可能的,因爲數據庫也喜歡不同的表名。事實上,使用上述方法的審計表與數據庫自己的元數據表的工作方式非常相似。 – Thilo 2010-11-26 05:21:08
謝謝** Thilo **;你對安裝是正確的。模塊安裝檢查現有表格,路徑等,並根據嚴重程度通知用戶,或者完全失敗。 – Dan 2010-11-26 08:18:13