Едно дете може да има не повече от 2 родители, като и двамата имат специфични роли (майка срещу баща) и може да има ситуация, при която единият или двамата родители са неизвестни.
Така че това не е истинска връзка "много към много", а всъщност "много към нула или едно или две", които могат да бъдат естествено представени по този начин (и двете MotherID
и FatherID
са с възможност за NULL):
Ако поставите LastName
и в двата Parent
и Player
(или общ суперклас във вашия случай), това също естествено покрива ситуацията, при която родителите имат различни фамилни имена от децата си.
След това можете лесно да получите "деца на родител" по този начин (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
...и завъртете данните в кода на приложението си, ако желаете това.
Горният модел позволява несъответствие между Parent
пол на и неговата майка/баща роля. Ако искате да предотвратите това, можете да прекалите и да направите нещо подобно...
...но предпочитам да не усложнявам и да се придържам към първия модел и да наложа това на ниво приложение.