Dítě nemůže mít více než 2 rodiče, oba mají specifické role (matka vs. otec) a může nastat situace, kdy jeden nebo oba rodiče nejsou známí.
Nejedná se tedy o skutečný vztah „mnoho k mnoha“, je to ve skutečnosti „mnoho ku nule nebo jedna nebo dvě“, což lze přirozeně reprezentovat takto (obě MotherID
a FatherID
mají hodnotu NULL):
Pokud zadáte LastName
v obou Parent
a Player
(nebo běžná supertřída ve vašem případě), to samozřejmě pokrývá i situaci, kdy rodiče mají jiná příjmení než jejich děti.
Takto snadno získáte „děti na rodiče“ (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
...a otočte data v kódu aplikace, pokud si to přejete.
Výše uvedený model umožňuje nesoulad mezi Parent
pohlaví a jeho role matky/otce. Pokud tomu chcete zabránit, můžete jít přes palubu a udělat něco takového...
...ale raději nebudu komplikovat a zůstanu u prvního modelu a prosadím to na aplikační úrovni.