Een kind kan maximaal 2 ouders hebben, beiden hebben een specifieke rol (moeder vs. vader) en er kan een situatie zijn waarbij één of beide ouders onbekend zijn.
Dit is dus geen echte "veel op veel" relatie, het is eigenlijk "veel op nul of één of twee", wat natuurlijk als volgt kan worden weergegeven (beide MotherID
en FatherID
zijn NULL-staat):
Als u LastName
in beide Parent
en Player
(of een veelvoorkomende superklasse in jouw geval), dit dekt natuurlijk ook de situatie waarin ouders andere achternamen hebben dan hun kinderen.
Je kunt dan gemakkelijk "kinderen per ouder" krijgen zoals deze (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
...en draai de gegevens in uw applicatiecode als u dat wilt.
Het bovenstaande model staat mismatch toe tussen Parent
het geslacht en de moeder/vaderrol. Als je dit wilt voorkomen, kun je overboord gaan en zoiets doen...
...maar ik zou het liever niet ingewikkeld maken en bij het eerste model blijven en dit op applicatieniveau afdwingen.