1

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

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。

你怎么看?更好的想法?

4

0 回答 0