3

Google App Engineのように、Djangoに「expando」モデルを実装することは可能ですか?githubでdjango-expandoという名前のdjangoアプリを見つけましたが、まだ初期段階です。

4

1 に答える 1

2

それは可能ですが、それは壮大なプロポーションの応急修理になります。GAEは、列ベースのデータベースと呼ばれる別のデータベース設計を使用し、DjangoORMはリレーショナルデータベースとリンクするように設計されています。技術的には、GAEのすべてがスキーマのない1つの非常に大きなテーブルに格納されるため(GAEアプリケーションの場合は必要ありませんsyncdb)、任意のフィールドを簡単に追加できます。各テーブルが(一般的に)正確に1種類のデータを格納し、固定スキーマを持っているリレーショナルデータベースでは、任意のフィールドはそれほど簡単ではありません。

これを実装できる1つの可能な__setattr__方法は、テーブル名、オブジェクトID、およびピクルス化されたデータのTextFieldを格納するexpandoプロパティの新しいモデルまたはテーブルを作成し、すべてのexpandoモデルにサブクラスから継承させる__getattr__ことです。このテーブルに新しい行が自動的に作成されます。ただし、これにはいくつかの大きな問題があります。

  • まず第一に、これは安価なハックであり、リレーショナルデータベースの原則に反しています。
  • 第二に、さらにハックせずにこれらのエキスパンドフィールドをクエリすることは不可能であり、それでもばかばかしいほど遅くなります。

私の推奨事項は、expandoモデルを必要としないようにデータベース構造を設計する方法を見つけることです。

于 2010-02-02T16:12:18.903 に答える