आपका मामला वर्ग/उपवर्ग के उदाहरण जैसा दिखता है।
उपवर्गों से निपटने के लिए SQL तालिकाओं को डिज़ाइन करने के दो क्लासिक तरीके हैं। प्रत्येक के फायदे और नुकसान हैं।
एक तरह से "सिंगल टेबल इनहेरिटेंस" कहा जाता है। इस डिज़ाइन में सभी प्रकार के उपयोगकर्ताओं के लिए केवल एक तालिका है। यदि दिया गया कॉलम किसी दी गई पंक्ति से संबंधित नहीं है, तो प्रतिच्छेदन NULL छोड़ दिया जाता है। उपयोगकर्ता प्रकार को इंगित करने के लिए एक कॉलम जोड़ा जा सकता है।
एक अन्य तरीके को "क्लास टेबल इनहेरिटेंस" कहा जाता है। यह कुछ छोटे बदलावों के साथ, नानेगो ने जो उत्तर दिया है, वह बहुत कुछ है। सभी सामान्य डेटा और एक आईडी फ़ील्ड के साथ उपयोगकर्ताओं के लिए एक तालिका है। प्रत्येक उपवर्ग के लिए एक तालिका होती है, जिसमें उस उपवर्ग से संबंधित डेटा होता है। आईडी फ़ील्ड को अक्सर उपयोगकर्ता तालिका में मेल खाने वाली पंक्ति में आईडी फ़ील्ड की एक प्रति के रूप में सेट किया जाता है। इस तरह उपवर्ग कुंजी डबल ड्यूटी कर सकती है, प्राथमिक कुंजी और उपयोगकर्ता तालिका को संदर्भित करने वाली विदेशी कुंजी दोनों के रूप में कार्य करती है। इस अंतिम तकनीक को "साझा प्राथमिक कुंजी" कहा जाता है। इसे डालने के समय थोड़ी प्रोग्रामिंग की आवश्यकता होती है, लेकिन यह इसके लायक है। यह रिश्ते की एक-से-एक प्रकृति को लागू करता है, और यह आवश्यक जुड़ाव को गति देता है।
आप इन तीनों डिज़ाइनों को SO में टैग के रूप में या वेब पर लेखों के रूप में देख सकते हैं।
सिंगल-टेबल-इनहेरिटेंस class-table-inheritance साझा-प्राथमिक-कुंजी