【发布时间】:2015-07-06 18:18:41
【问题描述】:
我目前有一个非临时 MySQL 数据库,需要将其更改为临时 MySQL 数据库。换句话说,我需要能够保留随着时间的推移对记录所做的更改历史记录,以用于报告目的。
我实现这一点的第一个想法是简单地插入表而不是更新,当我需要选择数据时,只需在某些列上执行 GROUP BY 并按时间戳 DESC 排序。
但是,在考虑了一下之后,我意识到这真的会让事情变得一团糟,因为每个插入的主键(实际上只是模拟单个记录上的多个更新)会不同,因此会变得一团糟建立任何使用主键链接到数据库中其他记录的链接。
因此,我的下一个想法是继续更新数据库中的主表,但还要在“审计表”中创建一个新插入,该表只是更新后完整记录的副本,然后在我需要时要报告时态数据,我可以使用审计表进行查询。
谁能给我一些指导或链接如何正确地做到这一点?
谢谢。
【问题讨论】:
-
一个典型的解决方案是创建一个新的审计表并使用触发器自动将其写入。方法包括复制完整的行状态,或者只是tracking which field was changed。
-
博士。 Richard Snodgrass 有一本关于这个主题的奇幻书,可在此处获得。 cs.arizona.edu/~rts/publications.html 可能比您希望的更多信息,但仍然是一流的材料。
-
非常感谢你们。这就是我一直在寻找的。此外,奥利,在您链接到的页面上列出了几本书。你知道我应该特别看哪一个吗?谢谢。
-
在 SQL 中开发面向时间的数据库应用程序。我认为是那个
-
一位用户在stackoverflow.com/questions/8151064/… 提到这种方法可能难以在 MySQL 中实现。对此有什么想法吗?在使用 Oracle 的这种方法 15 年后,我即将踏上这条道路。
标签: mysql database implementation temporal-database