比較的簡単な方法は、保存するたびにリビジョンIDを増分し、新しいXMLドキュメントをその新しいリビジョンIDで保存することです。
表:ドキュメント
doc_id | name | current_revision
1 | Shopping List | 5
テーブル:doc_revisions
doc_id | revision | timestamp | xml_blob
1 | 1 | 2012... |
1 | 2 | 2012... |
1 | 3 | 2012... |
1 | 4 | 2012... |
1 | 5 | 2012... |
また、xmlファイルをファイルシステムに個別に保存することも検討してください。blobではなく、ファイルへのURL /パスを使用してdoc_revisionsテーブルを変更できます。これにより、データベースは物理的に大きくならず(ドキュメントを別のサーバーに移動できます)、データベースサーバーからドキュメントの取得の負荷を軽減できるため、単一のサーバーではるかに大きなボリュームをdbで処理できるようになります。
個人的には、ファイルの違いは保存しません。むしろ、毎回ファイルの完全な新しいリビジョンを保存します。ストレージは安価であり、物事を複雑にする必要はありません。「diff」機能は、最終的に本当に必要になった場合に後で実装できます。差分を保存する場合は、たとえばドキュメントのテキストを検索する必要がある場合など、予期しない複雑さをもたらす可能性があることに注意してください。