プロジェクトの 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 を使用できます。
どう思いますか?より良いアイデア?