web-dev-qa-db-fra.com

Conception de la base de données: 3 types d'utilisateurs, séparés ou une table?

J'ai 3 types d'utilisateurs:

  • Administrateurs
  • Fournisseurs
  • Des employés

Chaque type d'utilisateur aura une interface utilisateur différente et accédera à différents types de données. Leur seule similitude est qu'ils utilisent une seule application Web mais ils accèdent à des choses totalement différentes. Est-il préférable de les mettre tous dans une table utilisateur comme tbl_users ou est-il préférable de créer tbl_admins, tbl_suppliers, tbl_employees?

49
IMB

Ce que vous devez considérer lors de la conception de tableaux n'est pas nécessairement ce à quoi ils auront accès et comment cela est similaire/différent, mais plutôt comment les niveaux d'utilisateurs eux-mêmes sont similaires/différents.

Par exemple, si les types d'utilisateurs auront les mêmes attributs (nom, adresse e-mail, date de naissance, etc.), alors ils appartiennent à une table avec une colonne indiquant leur niveau de privilège.

Cela facilite également la modification des niveaux de privilèges pour un utilisateur, ce qui vous permet de transformer un employé ordinaire en administrateur, par exemple, en mettant simplement à jour l'enregistrement dans la table des utilisateurs.

Si les fournisseurs sont un type d'objet différent avec des attributs différents des deux autres, les fournisseurs peuvent appartenir à leur propre table.

Ou, une dernière chose à considérer: vous pouvez utiliser une table users qui ne contient que des informations très limitées sur les utilisateurs des trois types, et si les types ont des attributs étendus qui ne sont pas bien liés les uns aux autres, vous peut stocker ceux dans d'autres tables avec une clé étrangère dans la table users principale.

62
Michael Berkowski

Il y a aussi un troisième choix: mettre les colonnes que tous les utilisateurs ont en commun dans tbl_users, et créez trois tables pour tbl_admins, tbl_suppliers et tbl_employees se joindre à tbl_users de 1 à 0..1. Vous devriez considérer ce choix comme une alternative lorsque le nombre de colonnes partagées est significatif.

11
dasblinkenlight

Cela dépend de la similitude de leurs structures de données. S'ils sont similaires, vous pourriez peut-être les mettre tous dans un même tableau. Mais, s'ils ont beaucoup de champs différents et que vous vous retrouverez avec beaucoup de valeurs NULL ... et alors il vaut mieux qu'ils soient tous dans des tables séparées.

2
Aaron

Il est préférable de conserver toutes vos informations de connexion en un seul endroit. Si vous deviez modifier votre processus de connexion, avoir 3 tables différentes signifierait devoir changer le code à 3 endroits différents.

Si un utilisateur peut appartenir à plusieurs rôles, envisagez de créer une table UserRoles. Sinon, l'ajout d'un champ supplémentaire à la table existante - tel que RoleType - aiderait à différencier les différents types d'utilisateurs.

0
pjbrown88

Vous devez simplement les inclure dans une table et créer un champ/attribut qui indiquerait si l'utilisateur est un administrateur, un fournisseur ou un employé.

C'est plus simple si vous le centralisez de cette façon.

Le souci de savoir comment/à quoi ils accèdent serait sous le logiciel que vous développez. Vous pouvez soit récupérer/restreindre l'interface utilisateur [ou tout ce à quoi ils accèdent dans le système logiciel] en fonction du type d'utilisateur que vous avez.

Je cache et affiche des éléments en fonction du type d'utilisateur que j'ai

J'espère que cela t'aides..

0
divi