0

ユーザーが質問をして回答を得ることができる、政府のコンテスト用の質問と回答の Web サイトを作成しています。

ユーザーが互いの質問と回答を StackOverflow のように編集できるようにする必要があります。問題は、誤った編集を元に戻すことができるように、バージョン履歴を保存する必要があることです。

このために、新しいテーブルを作成し、編集が正常にコミットされるまで元の投稿をそこに保存しました。

以前のバージョンを表示し、必要に応じて編集を元に戻すことができるように、改訂履歴を保持するにはどうすればよいですか?

4

2 に答える 2

4

質問と回答のテーブルをカウンター フィールドで定義することにより、改訂履歴を保持します。

Question                 Answer
--------                 ------ 
Question ID              Answer ID
Edit counter             Edit counter
Question text            Answer Text

質問 ID と回答 ID は、自動インクリメント整数です。

質問または回答が最初に投稿されたとき、編集カウンターはゼロです。最初の編集の後、編集カウンターを 1 に設定して新しい行を書き込みます。次の編集では、編集カウンターを 2 に設定して新しい行を作成します。以下同様です。

これらのテーブルのプライマリ インデックスは、ID と編集カウンターです。ID は昇順で、編集カウンターは降順です。そうすれば、最新の編集が取得された最初の行になります。編集カウンターは、何回の編集が行われたかを示します。

于 2012-10-03T18:20:30.347 に答える
1

別のテーブルを使用しないでください。新しいバージョンを使用しない唯一の理由が、未完了または無効な編集セッションである場合は、データベース内のプレーン トランザクションに依存してください。トランザクション内のデータベース内のテキストを置き換えるだけです。そのトランザクションは、編集が「有効」と評価された場合にのみコミットされます。それ以外の場合は、トランザクションをロールバックします。

ただし、以前のすべてのリビジョンが必要な場合は、ほとんどの場合これが理にかなっていますが、それでも 1 つのテーブルにまとめてください。質問または回答を編集するたびにバージョンを追加するだけです。ID が指定されていない場合は、最新のものを取得します。このようにして、以前のすべてのリビジョンに引き続きアクセスできます。

于 2012-10-03T17:27:36.237 に答える