Ett barn kan inte ha fler än 2 föräldrar, båda har specifika roller (mamma vs pappa) och det kan finnas en situation där en eller båda föräldrarna är okända.
Så det här är inte en riktig "många till många"-relation, det är faktiskt "många till noll eller en eller två", som naturligt kan representeras så här (båda MotherID
och FatherID
är NULL-kapabla):
Om du sätter LastName
i båda Parent
och Player
(eller en vanlig superklass i ditt fall), detta täcker naturligtvis också situationen där föräldrar har andra efternamn än sina barn.
Du kan sedan enkelt få "barn per förälder" så här (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
...och pivotera data i din applikationskod om det är vad du vill.
Ovanstående modell tillåter oöverensstämmelse mellan Parent
s kön och dess mamma/pappa roll. Om du vill förhindra detta kan du gå överbord och göra något liknande...
...men jag vill helst inte komplicera och hålla mig till den första modellen och genomdriva detta på applikationsnivå.