Je suis en train de créer un schéma de base de données pour le scénario suivant:
- Il y a des utilisateurs
- Les utilisateurs ont des rôles (tels que "développeur" ou "PDG")
- Les rôles ont des applications (telles que "Topdesk")
- Les applications ont des autorisations (telles que "Mettre à jour la base de connaissances")
- Un rôle peut avoir des autorisations, si le rôle a déjà accès à l'application
En supposant qu'aucun environnement haute performance (pas besoin d'optimiser pour la vitesse), quelle serait la meilleure façon de mettre en œuvre ce schéma? L'environnement de base de données peut être MySQL, MSSQL ... il s'agit plus de la conception de base de données relationnelle.
J'ai moi-même trouvé ce qui suit:
La partie dont je suis le plus incertain est bien sûr la table Applications_Permissions_Roles. Il s'agit d'une table de liaison au- dessus d' une autre table de liaison. Je n'ai jamais utilisé ou vu cela auparavant. Une autre façon de le faire serait de le remplacer par une table de liaison entre les rôles et les autorisations, puis d'utiliser du code ou des contraintes pour assurer les relations requises ... mais cela ne me semble pas être une bonne solution. Ces choses devraient être appliquées au niveau de la base de données si possible (et cela semble possible), pas au niveau du code.
Deuxièmement, le lien entre Permissions.Application et Applications.Id est-il requis? Je l'utilise car il peut ne pas y avoir de lignes dans Roles_Applications (comme lorsque vous venez d'ajouter une nouvelle application) et qu'il n'est alors pas possible de déterminer quelles autorisations appartiennent à quelle application. Il s'agit également d'un point de référence unique pour rechercher à quelle application appartient une autorisation. Je suppose que c'est vrai, mais cela fait également un cercle dans la conception de la base de données. Erreurs MSSQL dessus lors de la tentative de mise en cascade de ON_DELETE ou ON_UPDATE.
Avez-vous des suggestions ou est-ce ainsi que c'est censé être fait? D'ailleurs, toute autre suggestion concernant la convention de dénomination et autres est également la bienvenue (peut-être comme commentaire).
Merci,
Luc
Edit: Changement du titre, espérons-le rendre plus clair. La précédente était plus complète, mais probablement trop compliquée.
Roles_Applications
soit une chose réelle. Étant donné que toutes les autorisations sont spécifiques à l'application, il semble qu'il y en ait Applications_Permissions
(ce que vous avez étiqueté Permissions
), qui peuvent ensuite être attribués à des rôles spécifiques via un enregistrement dans Applications_Permissions_Roles
. Roles_Applications
, en fait, semble décrire l'autorisation d'application la plus élémentaire - un accès simple. Ou bien, il affirme qu'un rôle a un certain niveau d'autorisations pour une application, mais vous devez chercher ailleurs pour déterminer lesquelles.