2009-07-07 6 views
1

Juste curieux quelle est la meilleure pratique pour résoudre le problème suivant. J'ai des institutions, des comptes et des tables d'utilisateurs. Les institutions et les comptes ont une relation un-à-plusieurs. Les institutions et les utilisateurs ont une relation un-à-plusieurs. Les utilisateurs et les comptes ont une relation plusieurs-à-plusieurs ou bien ils peuvent avoir plusieurs comptes (ou *). Cela signifie qu'un utilisateur peut être désigné pour tous les comptes et tous les nouveaux comptes ajoutés à l'institution à laquelle l'utilisateur aura accès sans ajouter explicitement la relation.Quelle est la meilleure pratique pour accommoder à la fois une relation un-à-plusieurs et un-à-tout (ou un-à-*)?

+0

Un utilisateur peut-il avoir accès aux comptes de plus d'un établissement (être associé à ceux-ci)? Si oui, un «super-utilisateur» aurait-il accès à tous les comptes d'une institution, à tous les comptes d'un ensemble d'institutions ou à tous les comptes de toutes les institutions? (Si non, nous voudrons prendre en compte les restrictions sur les affectations de compte.) –

+0

Non, un utilisateur ne peut pas être associé à plusieurs institutions – Striker

Répondre

2

que je le ferais comme ceci:

Institutions 
    InstitutionID INT IDENTITY(1,1) NOT NULL PRIMARY KEY 
    Name VARCHAR(255) 

Users 
    UserID INT IDENTITY(1,1) NOT NULL PRIMARY KEY 
    Username VARCHAR(255) NOT NULL 
    InstitutionID INT NOT NULL 

Accounts 
    AccountID INT IDENTITY(1,1) NOT NULL PRIMARY KEY 
    Account VARCHAR(255) NOT NULL 
    InstitutionID INT NOT NULL 

Users_Accounts 
    Users_AccountsID INT IDENTITY(1,1) NOT NULL PRIMARY KEY 
    UserID INT NOT NULL 
    AccountID INT NULL 

avoir un code d'utilisateur w/une entrée dans la table NULLUsers_Accounts accès global (*) . De cette façon, vous pouvez déterminer l'institution sur n'importe quel compte et/ou utilisateur, ainsi que leurs autorisations. Editer: Les colonnes portant le même nom dans différentes tables impliquent une clé étrangère. Veuillez les utiliser si vous ne faites pas de lourdes charges.

0

Utilisez une table de mappage pour les relations plusieurs-à-plusieurs. Si un utilisateur a plusieurs comptes, créer une table de correspondance de users_to_account avec deux colonnes, l'une avec le compte clé étrangère, et un avec les utilisateurs clés étrangères, et je dirais même les faire ensemble une clé primaire composite:

 
users   account 
-----   ---------- 
1    5 
1    10 
2    5 
2    10 

Alors , les comptes 5 et 10 fois aux utilisateurs carte 1 et 2.

+0

Oui, Eric, je ne suis pas sûr. Je suis un peu nuageux aujourd'hui, récupérant d'un rhume. –

+1

Pourquoi utiliseriez-vous une table de recherche (et une autre jointure!) Quand vous pouvez simplement mettre un FK sur la table de compte? Aucun sens dans une recherche d'une relation un-à-plusieurs, juste 3NF standard. En outre, vous n'avez pas abordé l'aspect plusieurs-à-plusieurs. Par conséquent, je suis allé avec un -1. – Eric

+0

Désolé, édité mon commentaire là-bas, donc c'est un peu détraqué. – Eric

1

Faites Accounts avoir une clé étrangère à Institutions.

Faites Users avoir une clé étrangère à Institutions.

Faire un drapeau sur le compte Users qui indique qu'ils auront accès à tous Accounts sur ce Institution.

Créez une table de mappage plusieurs-à-plusieurs pour Users à Accounts. Ceci ne sera utilisé que si le drapeau User n'a pas son drapeau de sorte qu'il ait accès à tous les Accounts sur le .

Cela devrait résoudre votre problème.

Questions connexes