我在我的一个项目中运行了一个修订系统。一个数据库表如下所示:
objectID // (no primary/auto_increment!)
versionID
time
deletionTime
// (additionalFields)
最新版本总是有versionID = 0
. 在更新时,带有versionID
= 0 的条目将更新为MAX(versionID)+1
. 然后将使用 versionID = 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。
你怎么看?更好的想法?