Et barn kan ikke have mere end 2 forældre, begge har specifikke roller (mor vs. far), og der kan være en situation, hvor en eller begge forældre er ukendte.
Så dette er ikke et rigtigt "mange til mange" forhold, det er faktisk "mange til nul eller en eller to", som naturligt kan repræsenteres på denne måde (begge MotherID
og FatherID
er NULL-standbare):
Hvis du sætter LastName
i begge Parent
og Player
(eller en almindelig superklasse i dit tilfælde), dækker dette naturligvis også over den situation, hvor forældre har forskellige efternavne end deres børn.
Du kan så nemt få "børn pr. forælder" som denne (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
...og pivot dataene i din ansøgningskode, hvis det er det, du ønsker.
Ovenstående model tillader mismatch mellem Parent
s køn og dets mor/far-rolle. Hvis du vil forhindre dette, kan du gå overbord og gøre sådan noget...
...men jeg vil helst ikke komplicere og holde mig til den første model og håndhæve dette på applikationsniveau.