बेशक। यह एक सामान्य तकनीक है जिसे सुपरटाइपिंग के नाम से जाना जाता है। टेबल। जैसा कि आपके उदाहरण में, विचार यह है कि एक तालिका में संस्थाओं का एक सुपरसेट होता है और इसमें एक सामान्य इकाई का वर्णन करने वाले सामान्य गुण होते हैं, और अन्य तालिकाओं में विशिष्ट विशेषताओं वाले उन संस्थाओं के सबसेट होते हैं। यह ऑब्जेक्ट-ओरिएंटेड डिज़ाइन में एक साधारण वर्ग पदानुक्रम के विपरीत नहीं है।
आपके दूसरे प्रश्न के लिए, एक तालिका में दो कॉलम हो सकते हैं जो एक ही अन्य तालिका में अलग-अलग विदेशी कुंजी हैं। जब डेटाबेस क्वेरी बनाता है, तो वह दूसरी तालिका में दो बार जुड़ता है। SQL क्वेरी में वर्णन करने के लिए (MySQL सिंटैक्स के बारे में निश्चित नहीं है, मैंने इसे लंबे समय से उपयोग नहीं किया है, इसलिए यह विशेष रूप से MS SQL सिंटैक्स है), आप डेटा का चयन करते समय उस तालिका को दो अलग-अलग उपनाम देंगे। कुछ इस तरह:
SELECT
student_accounts.name AS student_name,
counselor_accounts.name AS counselor_name
FROM
student_rec
INNER JOIN user_accounts AS student_accounts
ON student_rec.student_number = student_accounts.user_id
INNER JOIN user_accounts AS counselor_accounts
ON student_rec.guidance_counselor_id = counselor_accounts.user_id
यह अनिवार्य रूप से student_rec
लेता है तालिका और इसे user_accounts
. के साथ जोड़ती है तालिका दो बार, प्रत्येक कॉलम पर एक बार, और उन्हें अलग-अलग बताने के लिए दो अलग-अलग उपनाम निर्दिष्ट करते हैं।