我正在尝试使用一个简单的mysql数据库,但调整它以便每个字段都备份到无限数量的版本。我能说明这一点的最好方法是用每个表的所有值替换每个表的每个字段(这些值中的每一个都应该加上时间戳)。我想这有点像为我的所有数据进行自定义版本控制..
关于如何做到这一点的任何想法?
答案 0 :(得分:8)
“跟踪表的任何更改”的常用方法是在表上添加插入/更新/删除触发器过程,并将这些记录保存在历史记录表中。
例如,如果您的主数据表是“ItemInfo”,那么您还将拥有一个ItemInfo_History表,每次更改任何内容时(通过触发器)都会获得新记录的副本。
这可以保持主表的性能一致,但如果需要,还可以访问任何更改的历史记录。
以下是一些示例,它们适用于SQL Server,但它们演示了逻辑:
我的Repository table 我的Repository History table 我的Repository Insert trigger procedure 我的Repository Update trigger procedure
答案 1 :(得分:3)
嗯,你所说的听起来与Slowly Changing Dimension类似。
请注意,对任意数据库结构的版本控制正式是一个相当困难的问题。 : - )
答案 2 :(得分:1)
一个简单的解决方案是向表中添加版本/修订字段,每当更新记录时,不是在适当的位置更新记录,而是插入一个副本,其中应用了更改并增加了版本号。然后在选择时,始终选择具有最新版本的记录。这大致是大多数此类方案的实施方式(例如,维基媒体以这种方式完成它)。
答案 3 :(得分:-1)
也许一个工具可以帮助你为你做到这一点。看看nextep设计师:
https://github.com/christophefondacci/nextep-designer
使用此IDE,您将能够拍摄数据库结构和数据的快照,并将其置于版本控制之下。在此之后,您可以计算任何两个版本之间的差异,并生成可以插入/更新/删除数据的相应SQL。
也许这是达到你想要的另一种方式。