Seorang anak tidak dapat memiliki lebih dari 2 orang tua, keduanya memiliki peran tertentu (ibu vs ayah) dan dapat terjadi situasi di mana salah satu atau kedua orang tua tidak diketahui.
Jadi ini bukan hubungan "banyak ke banyak" yang sebenarnya, ini sebenarnya "banyak ke nol atau satu atau dua", yang secara alami dapat direpresentasikan seperti ini (keduanya MotherID
dan FatherID
dapat NULL):
Jika Anda memasukkan LastName
di kedua Parent
dan Player
(atau superclass umum dalam kasus Anda), ini juga secara alami mencakup situasi di mana orang tua memiliki nama belakang yang berbeda dari anak-anak mereka.
Anda kemudian dapat dengan mudah mendapatkan "anak per orang tua" seperti ini (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
...dan memutar data dalam kode aplikasi Anda jika itu yang Anda inginkan.
Model di atas memungkinkan ketidakcocokan antara Parent
jenis kelamin dan peran ibu/ayahnya. Jika Anda ingin mencegahnya, Anda bisa berlebihan dan melakukan sesuatu seperti ini...
...tapi saya lebih suka tidak memperumit dan tetap menggunakan model pertama dan menerapkan ini di tingkat aplikasi.