Google App Engineのように、Djangoに「expando」モデルを実装することは可能ですか?githubでdjango-expandoという名前のdjangoアプリを見つけましたが、まだ初期段階です。
質問する
557 次
1 に答える
2
それは可能ですが、それは壮大なプロポーションの応急修理になります。GAEは、列ベースのデータベースと呼ばれる別のデータベース設計を使用し、DjangoORMはリレーショナルデータベースとリンクするように設計されています。技術的には、GAEのすべてがスキーマのない1つの非常に大きなテーブルに格納されるため(GAEアプリケーションの場合は必要ありませんsyncdb
)、任意のフィールドを簡単に追加できます。各テーブルが(一般的に)正確に1種類のデータを格納し、固定スキーマを持っているリレーショナルデータベースでは、任意のフィールドはそれほど簡単ではありません。
これを実装できる1つの可能な__setattr__
方法は、テーブル名、オブジェクトID、およびピクルス化されたデータのTextFieldを格納するexpandoプロパティの新しいモデルまたはテーブルを作成し、すべてのexpandoモデルにサブクラスから継承させる__getattr__
ことです。このテーブルに新しい行が自動的に作成されます。ただし、これにはいくつかの大きな問題があります。
- まず第一に、これは安価なハックであり、リレーショナルデータベースの原則に反しています。
- 第二に、さらにハックせずにこれらのエキスパンドフィールドをクエリすることは不可能であり、それでもばかばかしいほど遅くなります。
私の推奨事項は、expandoモデルを必要としないようにデータベース構造を設計する方法を見つけることです。
于 2010-02-02T16:12:18.903 に答える