Un bambino non può avere più di 2 genitori, entrambi hanno ruoli specifici (madre contro padre) e può esserci una situazione in cui uno o entrambi i genitori sono sconosciuti.
Quindi questa non è una vera relazione "molti a molti", in realtà "molti a zero o uno o due", che può essere rappresentata naturalmente in questo modo (entrambi MotherID
e FatherID
sono abilitati NULL):
Se metti LastName
in entrambi Parent
e Player
(o una superclasse comune nel tuo caso), questo naturalmente copre anche la situazione in cui i genitori hanno cognomi diversi dai loro figli.
Puoi quindi ottenere facilmente "figli per genitore" in questo modo (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
...e scambia i dati nel codice della tua applicazione se è quello che desideri.
Il modello sopra consente la mancata corrispondenza tra Parent
sesso di s e il suo ruolo madre/padre. Se vuoi evitarlo puoi esagerare e fare qualcosa del genere...
...ma preferirei non complicare e attenermi al primo modello e applicarlo a livello di applicazione.