एक बच्चे के 2 से अधिक माता-पिता नहीं हो सकते हैं, दोनों की विशिष्ट भूमिकाएँ हैं (माँ बनाम पिता) और ऐसी स्थिति हो सकती है जहाँ एक या दोनों माता-पिता अज्ञात हों।
तो यह वास्तविक "कई से कई" संबंध नहीं है, यह वास्तव में "कई से शून्य या एक या दो" है, जिसे स्वाभाविक रूप से इस तरह दर्शाया जा सकता है (दोनों MotherID
और FatherID
पूर्ण-सक्षम हैं):
अगर आप 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
. के बीच बेमेल की अनुमति देता है का लिंग और उसकी माता/पिता की भूमिका। अगर आप इसे रोकना चाहते हैं तो आप पानी में गिर सकते हैं और ऐसा कुछ कर सकते हैं...
...लेकिन मैं पहले मॉडल को जटिल नहीं बनाऊंगा और उससे चिपके रहूंगा और इसे एप्लिकेशन स्तर पर लागू करूंगा।