J'ai des utilisateurs qui peuvent se connecter sur une page frontale et des administrateurs qui peuvent se connecter sur une page d'administration.
Les utilisateurs et les administrateurs doivent-ils être des "utilisateurs" dotés de rôles différents ou doivent-ils être divisés en différentes tables?
Les rôles doivent être suivis séparément des comptes d'utilisateurs, car une personne peut être promue (ou rétrogradée) au fil du temps. Serait-il logique dans cette situation d’avoir deux comptes d’utilisateurs différents, dans deux tables différentes? Je crois que non.
Voici la structure de base que j'utiliserais -
Si l'administrateur et les utilisateurs partagent des champs, il semble qu'ils devraient être placés dans la même table pour éviter la duplication de la structure. Ils ont tous deux un prénom et un nom de famille. Les deux sont des humains dans le monde réel. C’est probablement ainsi que cela devrait être.
Mais d'un autre côté, les États et les villes ont tous un nom. Et les deux sont des lieux. Devraient-ils toujours aller dans la même table? Parfois, ils le font dans des modèles récursifs. Parfois, ils sont séparés.
Ma pensée ...... est considéré comme administrateur un "type" d'utilisateur dans votre système? Ou est-ce vraiment quelque chose de différent où rien de type "utilisateur" ne s'applique? Cela dépend de ce que signifie réellement un administrateur dans votre système. La structure partagée ressemble-t-elle à la ville/à l’état? Ou est-ce que la structure partagée ressemble à "vous êtes un utilisateur de TYPE"?
Mais en cas de doute, mettez les administrateurs sur la table des utilisateurs, car je doute qu'ils soient vraiment séparés. Vous voudrez probablement partager un système d'authentification pour les deux. Vous voudrez probablement partager la création de compte pour les deux. Sauf si admin est une chose spéciale que seuls les développeurs utilisent en back-end.
Oui, tous les utilisateurs appartiennent à la table users. Vous devez également disposer d'une table de rôles et d'un FK entre les deux.
Le risque qu'un utilisateur devenant accidentellement un utilisateur administratif ne devrait pas être plus grand qu'un utilisateur devenant accidentellement un autre utilisateur, et cela ne devrait absolument pas se produire non plus.
Considérez que si vous avez des utilisateurs réguliers et des utilisateurs administratifs dans des tables séparées, vous aurez un ID utilisateur dans la table utilisateur normale correspondant à un ID utilisateur dans la table utilisateur administratif. Vous devez vous assurer qu'un type d'identifiant d'utilisateur peut jamais être utilisé accidentellement comme autre type. Il est plus difficile de détecter un problème de ce type que de détecter quelque chose qui pourrait faire en sorte qu'un identifiant d'utilisateur devienne un identifiant d'utilisateur différent.
Personnellement, je garderais les "utilisateurs" dans une seule table. La manière dont vous décidez de représenter les rôles (par exemple, en tant que bit statique dans la table utilisateur elle-même ou via des droits RBAC avancés) dépend de la complexité de votre système. Mais un utilisateur est un utilisateur.
Il ne devrait y avoir aucun problème où vous gardez les utilisateurs, le seul problème devrait être les pages\méthodes par lesquelles vous accédez à cette information.
En fait, il serait préférable de garder les deux sur la même table car ils contiennent le même type de données.
Créez une table distincte Roles et une autre table User_Roles. Dans la première, définissez les rôles, dans la seconde, associez les utilisateurs à leurs rôles respectifs (est-il possible qu'ils en aient plus d'un?)
Du point de vue des données, il est logique que les administrateurs soient des utilisateurs dotés de rôles différents. Il pourrait y avoir une table pour chaque utilisateur, mettant en corrélation les utilisateurs avec leurs rôles. Les utilisateurs peuvent avoir plusieurs rôles de ce type, mais au bout du compte, un administrateur est un utilisateur.
Je pense qu’il n’ya pas de vérité absolue sur votre question, cela dépend de votre candidature.
Les deux types d’utilisateurs pourraient figurer dans des tables différentes sont les suivants: