2009-07-30 8 views
0

私は、ユーザーの表示設定を表すモデルを持っています。これらのプリファレンスのほとんどはブール値です。ブール型の列を50個持つ代わりに、これについてもっと良い方法がありますか?将来、新しい項目を追加する場合、データベースに新しい列を追加する必要はありません。djangoモデルで多くのブール値を表現する最良の方法は何ですか?

+0

「最適」とは、「最も拡張可能」を意味します。 –

答えて

1

"将来、新しいアイテムを追加するときは、データベースに新しい列を追加する必要はありません。"

この場合、行を追加する必要があります。

可能な設定名のドメインを持つテーブルがあります。 50行。

実際の設定の表があります。ユーザー、設定名、設定値。

0

多くのブール値を持ち、さらに追加する予定がある場合は、列は使用しないでください。

「ユーザーが電子メールを望んでいます」を参照する必要があるときは、UserPreferencesオブジェクト(User = user、Preference = Preferences.objects.get(name = "want e-mail"))を検索してください。

User_Table:

  • ユーザー
  • ユーザ名
  • など

Preferences_Table:

  • 説明
  • など

UserPreferences_Table:

  • ユーザー(FK_User)
  • 設定によって優先(FK_Preferences)
  • 設定(ブール)

、あなたがかもしれUserPreferencesテーブルのSettingフィールドを省略し、単にenの存在を使用することができますそのUser/PreferenceをTrue、もう一つがFalseでないものとして試してみてください。

1

ビットマップを使用することもできます。あなたはあなたのデータベース内に単一のcharフィールドしか必要としません。あなたのアプリのどこかには、pref1、pref2、pref3のリストが保存されています。ビットマップには、設定に対応する1と0のシーケンスが格納されます。

たとえば、101はpref1 = yes、pref2 = no、pref3 = yesを意味し、011はpref1 = no、pref2 = yes、pref3 = yesを意味します。

これは、ビットマップの新しいモデルフィールドタイプを作成することで再利用可能にすることができます。

関連する問題