Question

Je veux avoir une relation un-à-plusieurs dans laquelle pour chaque parent, un ou zéro des enfants est marqué comme un «favori». Cependant, tous les parents n'auront pas d'enfant. (Considérez les parents comme des questions sur ce site, les enfants comme réponses et préférés comme la réponse acceptée.) Par exemple,

TableA
    Id            INT PRIMARY KEY

TableB
    Id            INT PRIMARY KEY
    Parent        INT NOT NULL FOREIGN KEY REFERENCES TableA.Id

La façon dont je le vois, je peux soit ajouter la colonne suivante à Tablea:

    FavoriteChild INT NULL FOREIGN KEY REFERENCES TableB.Id

ou la colonne suivante à TableB:

    IsFavorite    BIT NOT NULL

Le problème avec la première approche est qu'il introduit une clé étrangère nullable, qui, je comprends, n'est pas sous forme normalisée. Le problème avec la deuxième approche est que davantage de travail doit être fait pour s'assurer qu'au plus un enfant est le favori.

Quel type de critères dois-je utiliser pour déterminer quelle approche utiliser? Ou y a-t-il d'autres approches que je ne considère pas?

J'utilise SQL Server 2012.

Pas de solution correcte

Licencié sous: CC-BY-SA avec attribution
Non affilié à dba.stackexchange
scroll top