2009-12-10 6 views
9

私は現在、投稿のバージョン管理が必要な投稿ウェブサイトを作成しています。私はポストを保存して制御するために、データベースとテクニックの面でこれをどのように実装すべきか分かりません。データベースコンテンツのバージョン管理を実装する最善の方法はありますか?

私に手伝ってくれている人がいますか?

私は、Wordpressがバージョンコントロールを1つのテーブル、つまりPOSTであることを確認しました。同じ量のデータとフィールドを持つ2つのテーブルに書き込むのが難しいので、同じことをお勧めします。

答えて

3

私は、stackoverflowがバージョン間にデルタを格納することを知っています。私が他人に見せたことは、最初のもののような別のテーブルが作成されていますが、著者とバージョンまたはタイムスタンプが付いています。データベーストリガーを使用してレコードを他のテーブルにプッシュすることができますので、アプリケーションレベルで変更することについてあまり心配する必要はありません。

テーブルを1つだけ使用したい場合は、著者、タイムスタンプ、およびiscurrentフラグを追加することをお勧めします。あなたは最大のバージョン番号を選択できるので、フラグは本当に必要ではありませんが、それはあなたのクエリをはるかに簡単になります。行が最も高いバージョン番号である場合にのみ、フラグを設定します。トリガを使用して行を移入しても監視することも、更新トリガのループで終了することもできます。

+0

もう一度私の投稿を読むことができますか?私は追加の詳細を追加しました...ありがとう – DucDigital

3

私は2つのテーブルを作成します.1つは「ライブバージョン」テーブルで、もう1つは「アーカイブ」テーブルです。新しいバージョンが作成されたら、既存のライブバージョンをアーカイブテーブル(適切なタイムスタンプと作成者ノートを含む)に移動し、新しいライブバージョンをライブテーブルに追加します。

アーカイブテーブルには、ライブテーブルと同じスキーマがありますが、サポートしているバージョン管理に関するメタデータ(バージョン番号、メモ、タイムスタンプなど)を保持する追加の列がある点が異なります。

+0

あなたは私のポストをもう一度読むことができます、私は追加の詳細を追加しました、とにかく1つのテーブルだけを使用するにはありますか? – DucDigital

2

大量の塩でこれを実行しますが、同じテーブルのプライマリキーに結合されている親IDと、現在のバージョンを示すブール値を持つことができます。これは私がCMSシステムのために使っていた方法です...あなたは改訂履歴のための共通のIDを望むかもしれません(アイテムのすべての履歴エントリを取得することは非再帰的です)。最初のバージョンのIDにすべての後続バージョンを含めることでこれを行うことができますので、簡単に全体を取得できます。

マイ.02

+0

これは一般的で有効なアプローチです。私はあなたが何か他のものと一緒に行くたくさんのデータを予期しているなら、それを提案する。私はSQL Serverがこのモデルでパフォーマンスの問題に遭遇する可能性があることを発見しました。これはSQL Server 2008のフィルタリングされたインデックスとは異なる場合があります。 –

+0

真実ですが、ここで少しキャッシングすることができます。 – ccook

2

行にレコードバージョン番号が必要なように聞こえます。最新バージョンを識別する番号です。データを更新するたびに、実際に新しい行が挿入され、レコードのバージョン番号がバンプされます。データを取得するためにクエリを実行すると、maxレコードのバージョン番号を持つ行が取得されます。トリガーを使用してレコードのバージョン番号を生成すると、挿入時に番号を生成する心配がありません。

本格的なバージョン管理をしたいのであれば、このバージョンが元に戻す/削除された/承認されたかどうかを知らせる何らかの種類のステータスフィールドが必要です。最新版を入手したら、適切なステータスを持つ最大リビジョン管理番号を持つ行を選択します。

投稿の履歴を保存し、実際にはリビジョン管理ができない場合は、レコードバージョン番号のテクニックを使用できます。

関連する問題