我在其中一个项目中运行了修订系统。 数据库表如下所示:
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。
你怎么看?更好的想法?