我正在使用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. 跟踪更改
- 8. 跟踪更改
- 9. 跟踪更改
- 10. 跟踪订购的smalldatetime列的最佳方式
- 11. 更改跟踪 - 最简单的场景
- 12. 跟踪数据库中修改过的元组的最佳方式是什么?
- 13. 跟踪锁定的最佳方式 - SQL Server
- 14. 用php跟踪内部推荐的最佳方式是什么?
- 15. 跟踪当前在线用户的最佳方式
- 16. 跟踪TCP连接客户端的最佳方式是什么?
- 17. 跟踪Aframe中传送位置的最佳方式是什么?
- 18. 通过网站跟踪用户的最佳方式
- 19. 在input type =“text”中跟踪onchange的最佳方式是什么?
- 20. 跟踪谁在请求什么数据的最佳方式?
- 21. ASP.NET MVC5跟踪会话的最佳方式
- 22. 在移动车中跟踪Android手机的最佳方式
- 23. 跟踪所有设计登录的最佳方式是什么?
- 24. 跟踪(直接)文件下载的最佳方式
- 25. 跟踪NullPointerExceptions的最佳方式是什么?
- 26. 跟踪电子邮件的最佳方式 - UUID与ID号码
- 27. 传播VisualState更改的最佳方式
- 28. LINQ跟踪更改
- 29. Gridview中的跟踪更改
- 30. 跟踪列上的更改
您引用的答案使用复合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