Keeping page changes historyやHow to version control a record in a database (たとえば)に関する多くの SO の質問を読んだ後、私はその作業を行うための本当に洗練された解決策を見つけることができません。
さて、登録ユーザーがいくつかの記事を投稿し、他のユーザーがそれらの記事の改訂を送信し、一部のモデレーター ユーザーがそれらの改訂をチェックできるようにする、この単純な改訂システムに何が必要かをできるだけ明確に説明しましょう。
MySQL データベース
データベースには、次の簡略化されたフィールドを持つ article テーブルが含まれています。
ARTICLE(id, id_user, title, content, date);
リビジョン/履歴バージョンを実装するには、次の表があると思います。
REVISION(id, id_article, revision_id_user, id_moderator, revision_date,
revision_title, revision_content, revision_description, revision_check);
との関係:ARTICLE 0,n <---> 1,1 REVISION
ワークフロー
ユーザーが を作成し
ARTICLE
、それがテーブルに挿入されARTICLE
ます (素晴らしい! )別のユーザーが
ARTICLE
this を更新すると、この更新はテーブルに記録されREVISION
、モデレーター ユーザーのキューに入れられます。(revision_check=0
)。モデレーター ユーザーが を検証する
REVISION(revision_check=1)
と、は値ARTICLE(content)
を取得しREVISION(revision_content)
ます。
私の質問
- このワークフローは良い方法だと思いますか? なぜなら、私は間違いを見ているからです: if there are several
REVISION
s for anARTICLE
:
- 最後に送信されたコンテンツと
REVISION
オリジナルのコンテンツのどちらを使用する必要がありARTICLE
ますか? REVISION
または、最後のリビジョンがチェックされていない間は他のリビジョンを送信できないため、リビジョンをブロックする必要があります。
ライトバージョニングを記録する方法はありますか? ところで、
REVISION
SQL、PHP、js の比較関数を使って、更新された内容だけをテーブルに挿入することはできますか? そして、それをどのように表示するのですか?REVISION
テーブルがとても重くなるのではないかと心配しているからです。おまけ:SOはどうですか?
アイデア、リンク、ソース、プラグイン(MySQL、PHP 5、および JS/jQuery) は大歓迎です。