Meilleure façon de représenter les rôles d'utilisateur dans la base de données
Représente les autorisations de l'utilisateur de mieux dans la table user ou mieux dans sa propre table des autorisations?
Les autorisations de l'Utilisateur table
Mettre les autorisations dans la table user des moyens de faire une colonne pour chaque autorisation dans la table user. Un avantage est de requêtes devraient courir plus vite, car pas de jointures sont nécessaires lorsque les utilisateurs pour les autorisations de l'utilisateur. Un inconvénient est que le fait d'avoir de nombreuses autorisations colonnes encombre la table utilisateur.
Autorisations Autorisation tableau joint à l'Utilisateur table avec plusieurs-à-plusieurs relations
Cette façon de faire sépare les autorisations de l'utilisateur table, mais nécessite une jointure entre deux tables pour accéder aux autorisations de l'utilisateur. La base de données, l'accès peut être plus lent, mais la conception de base de données semble plus propre.
Peut-être de garder les autorisations dans un tableau distinct est mieux quand il y a de nombreuses autorisations. Quels sont les autres facteurs à considérer dans la prise de cette décision, et qui est meilleur dans les diverses situations?
source d'informationauteur steampowered
Vous devez vous connecter pour publier un commentaire.
Au modèle standard pour le contrôle d'accès est appelé Rôle de la Sécurité Basée sur les. Comme les deux le nombre d'utilisateurs et le nombre de différents types d'autorisations dont vous avez besoin se développe, la gestion de votre utilisateur-pour-les autorisations de liens peuvent devenir de plus en plus difficile.
Par exemple, si vous avez cinq administrateurs et cinquante utilisateurs, comment voulez-vous garder les autorisations de chaque groupe dans la synchro? Lorsque l'un de vos utilisateurs est promu à un administrateur, comment beaucoup de modifications avez-vous besoin de faire? La réponse est de créer deux intersections: utilisateurs à des rôles et rôles-à-autorisations.
Cette solution est décrite (y compris entity relationship diagram) dans ma réponse à cette question.
Votre première approche est possible lorsque le nombre de rôles différents/autorisations est relativement faible. Par exemple, si vous avez seulement deux types d'utilisateurs: les normaux et les admin, une table séparée ressemble à un overkill. Seul
is_admin
colonne est suffisante et simple.Toutefois, cette approche n'est pas à l'échelle une fois que le nombre de rôles dépasse un peu. Il a plusieurs inconvénients:
table utilisateur devient très "large" d'avoir un grand nombre de colonnes vides (gaspiller de l'espace)
l'ajout d'un nouveau rôle pour le système exige modifier la table utilisateur. C'est gênant et peut-être beaucoup de temps pour un grand nombre d'utilisateurs de la base de données
liste des rôles de l'utilisateur nécessite l'énumération sur toutes les colonnes, par opposition à la simple requête de base de données.