我正在使用MySQL Workbench的EER工具爲我正在開發的應用程序進行數據庫設計。跟蹤數據庫中的數據更改非常重要,所以我遵循this後,這使得很多意義上被接受的答案。我的問題是,我不太瞭解主鍵,所以我有點困惑這應該如何工作,因爲每次進行更改都會有另一行插入相同的ID,因此數據庫不會允許這是我的權利?我需要使用外鍵的主鍵。跟蹤myql更改的最佳方式
0
A
回答
0
我的正常 「模式」 在(非常)僞代碼:
- 表A:A_ID(PK),a_stuff
- 表A_history:a_history_id(PK),A_ID(FK引用A.a_id) ,VALID_FROM日期,失效日期a_stuff
觸發器上的一個:
- 上的插入:用VALID_FROM =現在,和VA將值插入A_history lid_to = null。
- 更新時:將valid_to = now設爲a_id的最後歷史記錄;並使用該行的更新值從「插入時」觸發器執行相同的插入操作。
- 刪除時:爲a_id的最後歷史記錄設置valid_to = now。
在這種情況下,你會查詢歷史記錄爲「x> =從和X <爲」(不 BETWEEN作爲先前記錄的「從」值應與下一對「價值」)。
+0
a_id反映了最後一個狀態或起始狀態? –
+0
a_id引用表A中的單個行;它顯示錶A_history中的行是A中該行的狀態(如果valid_to不爲空,則爲前一狀態);表A只會有當前狀態。 – Uueerdo
+0
謝謝,我明白爲什麼有一個單獨的表可能會更好,可能有助於提高查詢性能? –
相關問題
- 1. 跟蹤文本文件中更改的最佳方式?
- 2. 跟蹤Facebook會話的最佳方式
- 3. 跟蹤Javascript代碼的最佳方法
- 4. 跟蹤文本文件中最後一行的最佳方式
- 5. 跟蹤更改
- 6. 跟蹤更改
- 7. 跟蹤訂購的smalldatetime列的最佳方式
- 8. 更改跟蹤 - 最簡單的場景
- 9. 跟蹤數據庫中修改過的元組的最佳方式是什麼?
- 10. 跟蹤誰在請求什麼數據的最佳方式?
- 11. 跟蹤(直接)文件下載的最佳方式
- 12. 用php跟蹤內部推薦的最佳方式是什麼?
- 13. 在移動車中跟蹤Android手機的最佳方式
- 14. 跟蹤所有設計登錄的最佳方式是什麼?
- 15. 跟蹤TCP連接客戶端的最佳方式是什麼?
- 16. 跟蹤當前在線用戶的最佳方式
- 17. 在input type =「text」中跟蹤onchange的最佳方式是什麼?
- 18. 跟蹤鎖定的最佳方式 - SQL Server
- 19. 跟蹤Aframe中傳送位置的最佳方式是什麼?
- 20. 傳播VisualState更改的最佳方式
- 21. LINQ跟蹤更改
- 22. Gridview中的跟蹤更改
- 23. 跟蹤列上的更改
- 24. 更改屬性的跟蹤更改
- 25. Bug跟蹤的最佳實踐
- 26. 跟蹤更改對象更改
- 27. 使用rails跟蹤更改 - 「更改?」
- 28. 在Django中追蹤模型更改的最佳方式是什麼?
- 29. EntityFramework CTP5更改跟蹤
- 30. 禁用DataTable更改跟蹤
您引用的答案使用複合PK,只要valid_from和/或valid_until不同,客戶ID就可以重複;這樣的PK使用組合的所有字段來表示身份。 (我看到的答案細節中的一個問題是,它指的是使用觸發器,但觸發器無法修改它們「ON」的表)。我喜歡一個涉及「歷史」表的解決方案,該表由「當前」表上的觸發器更新和填充。 – Uueerdo
@Uueerdo ohh,我明白了,但是後來將valid_until作爲主鍵是錯誤的,因爲這可能是無效的嗎?我觀察到的另一件事是EER正在使用主鍵來引用外鍵,這是最佳實踐嗎? –
NULL值可以是主鍵和唯一索引的一部分;但行爲有點不同(任何兩個NULL是彼此「唯一」的。)這個答案可能已經離開只有一個(ID,從)PK; (id,from,to)不會阻止(0,1,4)和(0,2,5)等數據同時存在,當您在查找「when between between between to」時,會出現問題。 – Uueerdo