Một đứa trẻ có thể có không quá 2 cha mẹ, cả hai người đều có những vai trò cụ thể (mẹ so với cha) và có thể xảy ra trường hợp một hoặc cả hai cha mẹ đều không xác định được.
Vì vậy, đây không phải là mối quan hệ "nhiều với nhiều" thực sự, nó thực sự là "nhiều đến không hoặc một hoặc hai", có thể được biểu diễn tự nhiên như thế này (cả MotherID
và FatherID
là NULL-có thể):
Nếu bạn đặt LastName
trong cả Parent
và Player
(hoặc một lớp cha phổ biến trong trường hợp của bạn), điều này đương nhiên cũng bao gồm trường hợp cha mẹ có họ khác với con cái của họ.
Sau đó, bạn có thể dễ dàng nhận được "con trên mỗi phụ huynh" như thế này ( 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
... và xoay vòng dữ liệu trong mã ứng dụng của bạn nếu đó là điều bạn muốn.
Mô hình trên cho phép không khớp giữa Parent
giới tính và vai trò của mẹ / cha. Nếu bạn muốn ngăn chặn điều này, bạn có thể đi quá đà và làm điều gì đó như thế này ...
... nhưng tôi không muốn làm phức tạp và gắn bó với mô hình đầu tiên và thực thi mô hình này ở cấp ứng dụng.