改进我的MySQL修订系统

时间:2012-12-14 11:19:30

标签: mysql revision

我在其中一个项目中运行了修订系统。 数据库表如下所示:

objectID // (no primary/auto_increment!)
versionID
time
deletionTime
// (additionalFields)

最新版本始终为versionID = 0。 在更新时,versionID = 0的条目将更新为MAX(versionID)+1。 然后将插入更新的条目,版本ID = 0。 此外,插入的时间将被保存。

修订系统运行良好,但我现在对系统有一些困难:

我有另一个表没有与修订表相关的修订系统:

ID
parentID // the reference to the revision table
time

如果我从该表中查询条目,我需要加入我的修订表并获得在创建条目时相关的修订。 这意味着我需要一个子查询来选择revisionTable.time <= otherTable.time的所有修订版本 然后按entryID分组。

这对我来说似乎不是一个很好的解决方案。总会有一个子查询。

我使用此版本系统,当前版本为“versionID = 0”,因为它能够轻松查询所有对象的所有当前版本。

我对更好的修订系统的解决方案如下:

ID // primary, auto_increment
objectID // multiple revisions share the same objectID
isRevision // bool, the current revision has it set to 0
time
// (additionalColumns)

使用这个系统,我仍然可以查询所有当前版本,并可以在我的另一个表中使用修订版的主要ID。

你怎么看?更好的想法?

0 个答案:

没有答案