Un enfant ne peut pas avoir plus de 2 parents, les deux ont des rôles spécifiques (mère contre père) et il peut y avoir une situation où l'un ou les deux parents sont inconnus.
Ce n'est donc pas une vraie relation "plusieurs à plusieurs", c'est en fait "plusieurs à zéro ou un ou deux", qui peut être naturellement représenté comme ceci (à la fois MotherID
et FatherID
sont NULL-able):
Si vous mettez LastName
dans les deux Parent
et Player
(ou une superclasse commune dans votre cas), cela couvre aussi naturellement la situation où les parents ont des noms de famille différents de ceux de leurs enfants.
Vous pouvez alors facilement obtenir des "enfants par parent" comme ceci (SQL Fiddle )...
SELECT
ParentID,
Parent.FirstName ParentFirstName,
Parent.LastName ParentLastName,
PlayerID,
Player.FirstName PlayerFirstName,
Player.LastName PlayerLastName
FROM
Parent
LEFT JOIN Player
ON Parent.ParentID = Player.MotherID
OR Parent.ParentID = Player.FatherID
ORDER BY ParentId
...et faire pivoter les données dans votre code d'application si c'est ce que vous souhaitez.
Le modèle ci-dessus permet une incompatibilité entre Parent
son sexe et son rôle de mère/père. Si vous voulez éviter cela, vous pouvez aller trop loin et faire quelque chose comme ça...
... mais je préfère ne pas compliquer et m'en tenir au premier modèle et l'appliquer au niveau de l'application.