ユーザーが編集可能なコンテンツを含むWebプロジェクトに取り組んでおり、データベースにある実際のコンテンツのバージョントラッキングを実行できるようにしたいと考えています。基本的に、wikiスタイルの変更履歴を実装したいと思います。
いくつかのバックグラウンド調査を行うと、データベーススキーマをバージョン管理する方法に関するドキュメントがたくさんあります(私のものは実際には既に制御されています)が、データベースコンテンツの変更を追跡する方法に関する既存の戦略は、少なくともスキーマバージョン管理の雪崩では失われます私の検索で。
私は自分の変更追跡を実装するいくつかの方法を考えることができますが、それらはすべてかなり粗雑に見えます:
- 変更ごとに行全体を保存し、主キーを使用して行をソースIDに関連付けます(現在私が傾倒しているのは、最も単純な方法です)。ただし、多くの小さな変更により、大量のテーブルが膨張する可能性があります。
- 各変更の前/後/ユーザー/タイムスタンプを保存し、変更を関連する列に関連付ける列名を付けます。
- before / after / user / timestampを各列のテーブルに保存します(結果としてテーブルが多すぎます)。
- 列ごとに変更ごとにdiff / user / timestampを保存します(つまり、特定の日付に戻るには、変更履歴全体をたどる必要があります)。
ここで最善のアプローチは何ですか?自分自身を転がすことは、おそらく他の誰かの(より良い)コードベースを再発明しているように思えます。
PostgreSQLのボーナスポイント。