2010-05-01 109 views
6

我正在尝试使用一个简单的mysql数据库,但调整它,以便每个字段备份到无限数量的版本。我可以说明的最好方法是用每个表格的每个字段替换这个字段所有值的堆栈(每个值都应该加上时间戳)。我想这就像为我的所有数据定制版本控制。如何在MySQL中存储版本控制数据

有关如何做到这一点的任何想法?

+0

http://stackoverflow.com/questions/2724187/where-are-all-the-native-revisioned-databases – 2010-05-01 23:18:27

回答

7

“跟踪任何更改”到表的通常方法是在表上添加插入/更新/删除触发器过程,并将这些记录保存在历史记录表中。例如,如果您的主数据表是“ItemInfo”,那么您也将拥有一个ItemInfo_History表,每当有任何更改(通过触发器)时,该表都会获得新记录的副本。

这可以保持主表的性能一致,但如果需要,还可以访问任何更改的历史记录。

这里有一些例子,它们是SQL Server,但他们表现出的逻辑:

Repository tableRepository History tableRepository Insert trigger procedureRepository Update trigger procedure

+0

我还没有完全关注你,但你介绍了我触发器,他们可能是我将要使用的。谢谢 – Shawn 2010-05-05 04:15:48

+0

增加了一些例子的链接,希望可以(希望)使这个过程更加清晰。 :-) – 2010-05-05 17:27:24

1

一个简单的解决方案是将一个版本/修订字段添加到表中,并且每当更新记录时,而不是更新它时,插入一个应用了更改并且版本号递增的副本。然后选择时,请始终选择最新版本的记录。这大致就是大多数这种方案的实施方式(例如,维基媒体以这种确切的方式做到了这一点)。

+0

可能的重复我想到了这一点,但是我必须复制该行中的每个字段而不是实际上已经改变了价值的领域..似乎有点浪费,记忆上明智。 – Shawn 2010-05-05 04:01:00

3

嗯,你说的是什么声音相似Slowly Changing Dimension

请注意,对任意数据库结构的版本控制是一个比较难的问题。 :-)

+0

看起来像缓慢变化的维度要求我复制连续的每一个字段,即使只有一个字段被修改了..似乎有点浪费,内存明智 – Shawn 2010-05-05 04:02:31

+0

那么,这就是为什么你使用它*缓慢*改变尺寸。 – Ken 2010-05-10 16:03:29

0

也许一个工具可以帮助你为你做到这一点。看看nextep设计师

http://www.nextep-softwares.com

有了这个IDE,你将能够把你的数据库结构和数据的快照,并把它的版本控制之下。在此之后,您可以计算任意两个版本之间的差异,并生成可插入/更新/删除数据的相应SQL。

也许这是一种替代方法来实现你想要的。