質問

PostgreSQL でデータのバージョン管理を実装するにはどうすればよいか、ご意見を共有できますか。(同様の質問をしました カサンドラ そして モンゴDB. 。どのデータベースがそれに適しているか考えがある場合は、共有してください)

単純なアドレス帳のレコードをバージョン管理する必要があるとします。簡単にするために、アドレス帳レコードはリレーションなしで 1 つのテーブルに保存されます。履歴は次のとおりであると予想されます。

  • 使用頻度は低いでしょう
  • すべてを一度に使用して「タイムマシン」形式で表示します
  • 1 つのレコードに数百以上のバージョンが存在することはありません。
  • 履歴は期限切れになりません。

次のようなアプローチを検討しています。

  • アドレス帳テーブルのスキーマのコピーを使用してレコードの履歴を保存する新しいオブジェクト テーブルを作成し、アドレス帳テーブルにタイムスタンプと外部キーを追加します。

  • アドレス帳レコードへの変更を保存するための、スキーマのないテーブルのようなものを作成します。このようなテーブルは次のもので構成されます。AddressBookId、タイムスタンプ、フィールド名、値。この方法では、レコードへの変更のみを保存するため、履歴テーブルとアドレス帳テーブルの同期を維持する必要がなくなります。

  • シリアル化された (JSON) アドレス帳レコードまたはアドレス帳レコードへの変更を保存するテーブルを作成します。このようなテーブルは次のようになります。AddressBookId、TimeStamp、オブジェクト (varchar)。繰り返しになりますが、これはスキーマが少ないため、履歴テーブルとアドレス帳テーブルの同期を保つ必要がありません。(これは、CouchDB を使用したシンプルなドキュメントのバージョン管理をモデルにしています。)

役に立ちましたか?

解決

私はあなたの2番目のアプローチのようなことをします:実際の作業セットと変更のある履歴を備えたテーブルを持っています(Timestamp、Record_id、Property_id、Property_Value)。これには、レコードの作成が含まれます。 3番目の表は、プロパティ(ID、Property_Name、Property_Type)について説明しています。これは、アプリケーションのデータ変換に役立ちます。そのため、単一のプロパティの変更を非常に簡単に追跡することもできます。

タイムスタンプの代わりに、intlikeを使用することもできます。レコードごとの変更ごとに増分することもできます。 バージョン.

他のヒント

あなたは持っているかもしれません start_dateend_date.

いつ end_date nullです、それは実際の記録です。

私は用語集データをバージョン管理していますが、私のアプローチは私のニーズに対して非常にうまくいきました。基本的に、バージョン管理が必要なレコードの場合、フィールドセットを永続フィールドとバージョン依存フィールドに分割し、2 つのテーブルを作成します。最初のセットの一部は、最初のテーブルの一意のキーでもある必要があります。

住所
ID [パック]
フルネーム [イギリス]
誕生日[イギリス]

バージョン
ID [パック]
address_id [英国]
タイムスタンプ [英国]
住所

この方法で、フルネームと誕生日によって決定される住所の件名 (バージョン管理によって変更されるべきではありません) と、住所を含むバージョン管理されたレコードを取得します。address_id は、外部キーを介して Address:id に関連付けられる必要があります。バージョン テーブルの各エントリにより、特定のタイムスタンプを持つサブジェクト Address:id=address_id の新しいバージョンが取得され、これにより履歴参照が可能になります。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top