如何在MySQL中实现时态数据

如何在MySQL中实现时态数据,第1张

概述我目前有一个非时间MySQL数据库,需要将其更改为时态MySQL数据库.换句话说,为了报告目的,我需要能够保留随时间对记录所做的更改历史记录.我实现这一点的第一个想法是简单地在表中插入而不是更新,当我需要选择数据时,只需在某些列上执行GROUP BY并按时间戳DESC进行排序.但是,在仔细考虑了一下之后,我意识到这会让事情搞得一团糟,因为每个插入的主键(实际

我目前有一个非时间MySQL数据库,需要将其更改为时态MysqL数据库.换句话说,为了报告目的,我需要能够保留随时间对记录所做的更改历史记录.

我实现这一点的第一个想法是简单地在表中插入而不是更新,当我需要选择数据时,只需在某些列上执行GROUP BY并按时间戳DESC进行排序.

但是,在仔细考虑了一下之后,我意识到这会让事情搞得一团糟,因为每个插入的主键(实际上只是模拟单个记录上的一些更新)会有所不同,从而搞乱任何联系使用主键链接到数据库中的其他记录.

因此,我的下一个想法是继续更新数据库中的主表,但也创建一个新的插入到“审计表”中,它只是更新后的完整记录的副本,然后当我需要报告时时态数据,我可以使用审计表进行查询.

有人可以给我一些指导或链接,如何正确地做到这一点?
谢谢.最佳答案使给定的表R为时间(即,保持历史).

一种设计是保持表R不变,并创建一个带有valID_start_time和valID_end_time的新表R_Hist.
有效时间是事实为真的时间.

CRUD *** 作可以如下:

插入

>插入两个R
>使用valID_end_time作为无穷大插入R_Hist

UPDATE

>在R中更新
>使用valID_end_time作为无穷大插入R_Hist
>使用“最新”元组的当前时间更新valID_end_time

删除

>从R中删除
>使用“最新”元组的当前时间更新valID_end_time

选择

>从R中选择“快照”查询(隐式“最新”时间戳)
>从R_Hist中选择进行时间 *** 作

相反,您可以选择为表R的每个属性设计新表.通过此特定设计,您可以捕获属性级时态数据,而不是先前设计中的实体级. CRUD *** 作几乎相似. 总结

以上是内存溢出为你收集整理的如何在MySQL中实现时态数据全部内容,希望文章能够帮你解决如何在MySQL中实现时态数据所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/sjk/1168285.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-01
下一篇 2022-06-01

发表评论

登录后才能评论

评论列表(0条)

保存