您所有表/實體上是否都有“created_at”和“last_update_at”欄位?為什麼?這是好還是壞做法?
網友:
1、大多數模型相關表都有created_at、updated_at,如果我使用軟刪除,則deleted_at
2、只要有一個審計表來記錄所有內容,瞭解誰改變了什麼的完整歷史記錄
3、我寧願有一個歷史記錄,記錄誰建立/更新/刪除什麼以及何時建立/更新/刪除內容。
4、updated_at 有時對於使快取失效非常有用,方法是獲取特定查詢的最大 Updated_at 等。
5、我在所有表上使用的基本欄位是
- ID
- UID for any public facing ids
- createdBy
- createdAt
- updated On
- updated By
- State狀態,我在 6 個月內不會刪除資料,所有內容都設定為 0 表示刪除,1 表示實時,它幫助人們在 6 個月後恢復了幾次,可以放心地認為不再需要它了。
6、對於我們的主表,我們肯定有created(date)/createdBy、modified(date)/modifiedBy。我們還有軟體(一組觸發器)來跟蹤對錶的任何和所有更改(插入/更新/刪除),以用於審計目的。
7、我總是告訴人們向他們的表新增 5 個欄位,即使他們認為自己不需要它們(立即):
- id - 顯然是代理主鍵
- created - 建立時間
- modified - 上次修改時間
- deleted - 因為您從未刪除過資料
- archived - 當您需要它時,對於歷史記錄或其他內容(例如將資料移動到其他地方),它會在那裡
您可以新增一個或多個,例如最後更改者的 ID 等,具體取決於您的具體情況,但一般來說,這 5 個在任何情況下都有效(特別是如果其中 4 個(ID 是日期除外))。
由於國家程式碼等資料很少更改,因此不妨在程式碼中使用常量,並在新國家獲得獨立或其他任何情況時進行新的構建
8、Updated_at 特別適用於:
- 增量備份
- 瞭解錯誤
- 快取邏輯
- 提供將資料匯出到其他系統、輪詢系統的提要
- 它是免費存檔,可以保持“預設搜尋”頁面快速且響應靈敏。讓我們看看“活動”資料與“存檔”資料。
- 儀表板和使用者行為報告。
9、我的欄位有:
- 建立日期。 (可編輯)
- 新增日期。 (不可編輯)
- 更新日期。
- 刪除日期。
我還將每個更改寫入日誌記錄和差異,以便我可以在需要時回滾
10、因為我使用 Java + Hibernate 堆疊,所以我使用 Hibernate Envers 進行審計,並且所有內容都在單獨的審計模式上的單獨的審計表中進行。
稽核模式上的每個條目都有一個更改型別(建立/更新/刪除)、時間戳和與其關聯的使用者 ID。
您甚至可以透過為每個常規列新增一個二進位制列來儲存更改的特定列。
靜態表不需要審計。除非您認為有人會走到state桌子上並開始新增/更新/刪除行。
11、時間戳可能有助於解決公司環境中的衝突
或者有助於錯誤修復、資料跟蹤、資料排序等。
banq注:這其實是變相實現:事件溯源