Dziecko może mieć nie więcej niż 2 rodziców, oboje mają określone role (matka vs ojciec) i może dojść do sytuacji, w której jedno lub oboje rodzice są nieznani.
Więc nie jest to prawdziwa relacja „wiele do wielu”, w rzeczywistości jest to „wiele do zera lub jeden lub dwa”, które można naturalnie przedstawić w ten sposób (zarówno MotherID
i FatherID
są zdolne do NULL):
Jeśli wpiszesz LastName
w obu Parent
i Player
(lub powszechną superklasę w twoim przypadku), naturalnie obejmuje to również sytuację, w której rodzice mają inne nazwiska niż ich dzieci.
Następnie możesz łatwo uzyskać „dzieci na rodzica” w ten sposób (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
...i przestawiaj dane w kodzie aplikacji, jeśli tego chcesz.
Powyższy model pozwala na niezgodność między Parent
płeć i rola matki/ojca. Jeśli chcesz temu zapobiec, możesz przesadzić i zrobić coś takiego...
...ale wolę nie komplikować i trzymać się pierwszego modelu i wymuszać go na poziomie aplikacji.