Dans mon application, les utilisateurs peuvent être de trois types: les adolescents, les individus ou les membres d'une organisation. Dans ma table d'utilisateurs, j'ai un champ booléen adolescent (non nul) et une clé étrangère organization_id (null).Comment gérer plusieurs types d'utilisateurs?
Si teen est true et que organization_id est null, l'utilisateur est un adolescent. Les adolescents ne peuvent pas appartenir à une organisation.
Si teen est false et organisation_id est nul, l'utilisateur est un individu.
Si teen est false et organisation_id n'est pas nul, les utilisateurs sont membres d'une organisation.
Il doit y avoir une meilleure façon de procéder. Je n'aime pas que le cas existe où teen est vrai et organization_id n'est pas nul. Serait-il préférable d'ajouter une nouvelle table, organisations_users, et supprimer la clé étrangère organization_id de la table users? L'inconvénient que je vois à cela est que cela me prendra plus de temps pour déterminer si un utilisateur est un individu ou une organisation, et récupérer les données le cas échéant.
Existe-t-il une façon plus élégante de gérer cela?
+1 - mieux que ma réponse et il laisse place à de nouveaux types d'utilisateurs dans l'avenir. – JNK
Comment puis-je rechercher des données dans la table d'organisation si j'ai déterminé que l'utilisateur était membre d'une organisation? – birderic
@birderic, la recherche ne changera pas. Vous stockez toujours les données d'organisation pour les membres. Il y a une certaine redondance mineure si vous considérez le fait que vous pouvez calculer certaines de ces valeurs, mais cette redondance simplifie votre conception et votre code tout en augmentant la flexibilité. En passant, si les utilisateurs commencent à avoir plusieurs rôles, vous pouvez transformer la relation entre l'utilisateur et les rôles en un à plusieurs avec une autre table. –