4

この質問で提案されたものと同様の監査証跡を実装することを計画していた新しいプロジェクトに SQLAlchemy を使用し始めています。

私はすでに「興味深い」オブジェクトの完全な履歴を持っているので、ユーザーが特定のバージョンにロールバックできるようにすることを考えていましたundo

これは、SQLAlchemy を使用してクリーンな方法で行うことは可能でしょうか?

内部 API (ビジネス ロジックと ORM) でこの機能を公開する正しい方法は何でしょうか?

私はのようなものでしuser.rollback(ver=42)た。

4

1 に答える 1

8

SQLAlchemy を具体的に使用したことはありませんが、任意の ORM で簡単に実装できる一般的なヒントをいくつか紹介できます。

  • Documentバージョン管理されたアイテムを 2 つのテーブル、たとえばとに分けDocumentVersionます。Documentバージョン間で変更されない情報をDocumentVersion保存し、変更される情報を保存します。
  • DocumentVersionそれぞれに「親」参照を与えます。以前のバージョンのドキュメントを指す、同じテーブルへの外部キーを作成します。
  • Document「現在の」バージョンへの参照を更新して、以前のバージョンにロールバックします。チェーンの一番下からバージョンを削除しないでください。
  • ロールバック後に新しいバージョンを作成すると、バージョンの別のブランチが作成されます。

例、A、B、C を作成し、B にロールバックし、D、E を作成します。

(A)
 |
(B)
 | \
(C) (D)
     |
    (E)
于 2009-09-21T15:18:37.377 に答える