たくさんの属性を持つユーザーオブジェクトを保存して表示する単純なDjangoアプリを書いています。
ユーザーは最大300の属性を持つことができます。
ただし、これらの属性はグループ化できます。
たとえば、「Favourite Dish」の1つのグループと、その下の属性がコスト、フレーバー、料理などであり、「Favourite Dog」の別のグループが、コスト、フレーバー、品種などであるとします。
通常の状況では、データを区分化し、属性の各グループを独自のテーブルに保存しますが、このアプリはほとんどの場合、すべてのデータを表示してクエリを実行します。
例:このアプリのメインページには検索ボックスがあり、ユーザーはモデル全体の任意の属性を検索できるはずです。これは、「通常の」方法で実行すると多くの結合が必要になりますが、300列のテーブルがある場合は結合が少なくなります。
NoSQLの使用を検討しましたが、リレーショナルスキーマにより適したデータが他にもあります。
これのベストプラクティスは何ですか?
ありがとう:)
これをどのように表現するかはわかりませんが、このタイプのアプリケーションはDjangoの目的ではありません。
Djangoは、無料の管理インターフェイスを備えたシンプルなCRUDベースのWebサイト用に作成されていますが、MVCフレームワークで検索エンジンをシューホーンしようとしてもうまくいくとは思いません。 (ただし、今では拡張機能があるかもしれませんが、私のDjango経験は古くてさびています)
300列を作成すると、300 OR
sのインデックスを作成できません。また、すべての列を検索可能にする必要がある場合は、10列がそれぞれ結合された30テーブルも作成できません。
私が考えることができる唯一の合理的なアプローチは、EAVパターン(拡張機能があります: Django-eav )を使用することですが、それは私の意見では他の問題を引き起こすでしょう。
また、Djangoがどのように機能するかについて誤解していると思いますが、モデルファイルでデータモデルを定義し、それを任意のデータベースと同期できるようにする必要があります。 NoSQLデータベースとにかくカスタムコードを書かなければならないと思います。
これを行うことを意図していなかったフレームワークで要件を調整するために作成する必要のあるコードの量によっては、カスタムアプリケーションを作成することもできます。
要件に応じて(必ずしもすべてが明確であるとは限りません)、選択したフレームワークに一致するソリューションとして選択したものは何でも、300列またはEAV値を検索するため、全文インデックス検索またはインデックスソリューションを選択する必要があると思います、まだ苦痛になりそうです。
明らかにデータ主導の要件の場合、データはプラットフォームを決定する必要があり、その逆ではありません。
あなたは、フレームワークに設計されていないことを必死にさせようとしています。