Je travaille sur une base de données qui doit représenter les ordinateurs et leurs utilisateurs. Chaque ordinateur peut avoir plusieurs utilisateurs et chaque utilisateur peut être associé à plusieurs ordinateurs. Il s'agit donc d'une relation classique plusieurs-à-plusieurs. Cependant, il doit également y avoir un concept d'utilisateur "principal". Je dois pouvoir me joindre à l'utilisateur principal pour lister tous les ordinateurs avec leurs utilisateurs principaux. Je ne suis pas sûr de la meilleure façon de structurer cela dans la base de données:Plusieurs-à-plusieurs avec "primaire"
1) Comme je le fais actuellement: table de liaison avec une colonne booléenne IsPrimary. L'assemblage nécessite quelque chose comme ON (c.computer_id = l.computer_id ET l.is_primary = 1). Cela fonctionne, mais cela ne va pas, car il n'est pas facile de limiter les données à un seul utilisateur principal par ordinateur.
2) Un champ sur la table de l'ordinateur qui pointe directement sur une ligne utilisateur, toutes les lignes de la table utilisateur représentent des utilisateurs non principaux. Cela représente mieux la contrainte "un primaire par ordinateur", mais rend plus difficile l'obtention d'une liste d'utilisateurs d'ordinateurs.
3) Un champ sur la table de l'ordinateur reliant à une ligne dans la table de liaison. Se sent étrange ...
4) Quelque chose d'autre?
Quelle est la manière «relationnelle» de décrire cette relation?
EDIT: @Mark Brackett: La troisième option me semble beaucoup moins étrange maintenant que vous avez montré à quel point elle peut être belle. Pour une raison quelconque, je n'ai même pas pensé à utiliser une clé étrangère composée, alors je pensais que je devrais ajouter une colonne d'identité sur la table de liaison pour que ça fonctionne. Ça a l'air génial, merci!
@ j04t: Cool, je suis content que nous soyons d'accord sur # 3 maintenant.
pourquoi il est difficile d'énumérer l'utilisateur de l'ordinateur sur le point 2? – albertein
Parce que la table de liaison ne contient pas tous les utilisateurs pour un ordinateur donné. –