5

バージョン管理された ActiveRecord 関連付けを使用したい。たとえば、特定の過去の日付の時点で別のオブジェクトが属していたオブジェクト、またはそれより前に属していたオブジェクトを見つけたいとします。Rails の ActiveRecord をサブクラス化してバージョン管理されたリレーションを提供するライブラリは既に存在しますか? または、永続的なバージョン管理された関係を提供する他の Ruby ライブラリ?

4

3 に答える 3

7

ActsAsVersionedプラグインをお試しください

于 2008-11-07T07:10:47.963 に答える
2

膨大な量のデータを扱っておらず、余分な時間次元がデータベースを限界まで押し上げない限り、歴史的にバージョン管理されたデータに大きな欠点はありません。余分なクエリの複雑さは少し面倒かもしれませんが、大きな問題ではありません。

私の場合、バージョン管理を処理する Rails プラグインを作成しました。これにより、バージョン管理された各テーブルに 5 つの列が追加されます (クエリや操作などの処理に役立ちます)。

valid_from - datetime - このバージョンが作成された日時

valid_to - datetime - このバージョンが有効でなくなった日時

root_id - 整数 - 元の行の ID (これは後続のバージョンです)

created_by - 整数 - このバージョンの作成を実行したユーザーのユーザー ID

retire_by - 整数 - このバージョンを廃止したユーザーのユーザー ID

現在アクティブな行の場合、valid_to は null です。valid_to にインデックスを追加すると、パフォーマンスをスムーズに保つことができます。

于 2008-11-07T14:58:36.120 に答える
1

トランザクション アプリケーションで履歴状態をサポートすることは、複雑さを大幅に拡大し、DB のパフォーマンスを低下させ、自分自身の生活を困難にする良い方法です。過去の状態を表示またはレポートするだけで、最新の状態を必要としない場合は、Type-II のゆっくりと変化するディメンションと、それを更新する定期的なプロセスを使用してスター スキーマを構築することを検討してください。

これは、コード ベースを介して実行される体系的なアドホック履歴追跡を使用してアプリケーションを構築するよりも、大幅に複雑ではありません。このアプローチでアプリケーションに必要なことができる場合は、おそらくそれを実行したほうがよいでしょう。これはまた、アプリケーション データベースが、システムに付属する通常のデータベース アクセス メカニズムとうまく連携することを意味します。

適度に頻繁に更新する必要がある場合は、データベースに変更データ キャプチャ システムを実装できます。これは、アプリケーションが現在の状態のみを考慮する必要がある場合は比較的簡単です。CDC メカニズムを使用すると、ロード プロセスは変更に基づいて更新するだけで済み、比較的迅速に実行されます。

于 2008-11-06T17:32:37.773 に答える