2009-07-30 7 views
0

J'ai un modèle qui représente les préférences d'affichage de l'utilisateur. À peu près toutes ces préférences sont des valeurs booléennes. Au lieu d'avoir 50 colonnes booléennes, y a-t-il une meilleure façon de faire? À l'avenir, lorsque je souhaite ajouter un nouvel élément, je ne souhaite pas ajouter de nouvelle colonne dans ma base de données.Quelle est la meilleure façon de représenter plusieurs booléens dans un modèle django?

+0

Par "meilleur", vous semblez signifier "le plus extensible". –

Répondre

1

"Dans le futur, lorsque je souhaite ajouter un nouvel élément, je ne souhaite pas ajouter une nouvelle colonne dans ma base de données."

Dans ce cas, vous devez ajouter une ligne.

Vous avez une table avec le nom de domaine possible. 50 rangs.

Vous avez un tableau des paramètres actuels. Utilisateur, nom du paramètre, valeur de réglage.

0

Si vous avez autant de booléens et que vous prévoyez d'en ajouter d'autres, vous ne devriez pas utiliser de colonnes, mais des entrées.

Ensuite, lorsque vous avez besoin de chercher "User veut emails", il suffit de chercher UserPrefs.objects.get (User = user, Preference = Preferences.objects.get (name = "veut email")).

user_table:

  • utilisateur
  • nom d'utilisateur
  • etc

Preferences_Table:

  • Nom
  • Description
  • etc

UserPreferences_Table:

  • utilisateur (FK_User)
  • préférence (FK_Preferences)
  • Réglage (Boolean)

En fonction de votre configuration, vous pouvez être capable d'omettre le champ Setting dans la table UserPreferences et simplement utiliser l'existence d'un essayez pour cet utilisateur/préférence en tant que vrai et le manque d'un en tant que faux.

1

Vous pouvez également utiliser un bitmap. Vous n'avez besoin que d'un seul champ char dans votre base de données. Quelque part dans votre application, vous stockez une liste de préférences, pref1, pref2, pref3 ... et dans l'image bitmap vous stockez une séquence de 1 et 0 qui correspondent aux préférences. Par exemple, 101 signifie pref1 = yes, pref2 = no, et pref3 = yes et 011 signifie pref1 = no, pref2 = yes et pref3 = yes.

Vous pouvez rendre cela réutilisable en créant un nouveau type de champ de modèle pour les bitmaps.

Questions connexes