बहुत सारे NULLS के साथ एक बड़ी तालिका नहीं बनाने की आपकी प्रवृत्ति सही है। भंडारण/पुनर्प्राप्ति/रखरखाव के दृष्टिकोण से, साथ ही डेटा सत्यापन के दृष्टिकोण से यह एक बुरा विचार है (उस पर बाद में अधिक)।
दो सबसे आम तरीके:
1) इसमें सभी सामान्य क्षेत्रों के साथ एक उपयोगकर्ता तालिका है, जिसमें "उपयोगकर्ता टाइप" फ़ील्ड शामिल है। फिर अतिरिक्त फ़ील्ड वाले प्रत्येक उपयोगकर्ता प्रकार के लिए एक अलग तालिका रखें। सभी उपयोगकर्ताओं की उपयोगकर्ता तालिका में एक पंक्ति होती है और एक या अधिक विशिष्ट उपयोगकर्ता प्रकार तालिकाएँ होती हैं। यह भंडारण और त्वरित लॉगिन के लिए सबसे सामान्यीकृत और सबसे कुशल है। यह आपको यह सुनिश्चित करने के लिए बाधाओं और विदेशी कुंजियों का उपयोग करने देता है कि प्रत्येक उपयोगकर्ता प्रकार के लिए सभी आवश्यक जानकारी उपलब्ध है।
2) इसमें सभी सामान्य क्षेत्रों के साथ एक उपयोगकर्ता तालिका है। UserAttributes . जैसी कोई अन्य तालिका बनाएं जिसमें उपयोगकर्ता आईडी, कुंजी और मान के लिए फ़ील्ड हैं। किसी विशेष उपयोगकर्ता के लिए कोई अतिरिक्त मेटाडेटा यहां संग्रहीत किया जा सकता है। इसका लाभ यह है कि प्रत्येक उपयोगकर्ता प्रकार के लिए संग्रहीत किए जाने वाले नए उपयोगकर्ता प्रकार या मेटाडेटा को जोड़ने के लिए किसी डेटाबेस प्रशासन की आवश्यकता नहीं होती है। हालाँकि, यह आपको DB स्तर पर कोई डेटा सत्यापन करने नहीं देता है।