यहाँ समस्या सबटाइपिंग . है . उपप्रकारों से निपटने के लिए तीन बुनियादी दृष्टिकोण हैं।
- प्रत्येक रिकॉर्ड प्रकार को एक पूरी तरह से अलग तालिका में रखें;
- पैरेंट टेबल में रिकॉर्ड और फिर सबटाइप टेबल में रिकॉर्ड रखें; और
- सभी रिकॉर्ड को एक तालिका में रखें, जिसमें "वैकल्पिक" डेटा (यानी ऐसी चीजें जो उस प्रकार पर लागू नहीं होती) के लिए अशक्त कॉलम हों।
प्रत्येक रणनीति की अपनी खूबियां होती हैं।
उदाहरण के लिए, (3) विशेष रूप से लागू होता है यदि विभिन्न उपप्रकारों के बीच बहुत कम या कोई अंतर नहीं है। आपके मामले में, क्या अलग-अलग लॉग रिकॉर्ड में अतिरिक्त कॉलम होते हैं यदि वे किसी विशेष प्रकार के होते हैं? यदि वे नहीं करते हैं या ऐसे कुछ मामले हैं जब वे उन सभी को एक तालिका में रखते हैं तो यह सही समझ में आता है।
(2) पार्टी टेबल के लिए आम तौर पर इस्तेमाल किया जाता है। यह सीआरएम में एक सामान्य मॉडल है जिसमें एक मूल पार्टी ऑब्जेक्ट शामिल होता है जिसमें व्यक्ति और संगठन के लिए उपप्रकार होते हैं (संगठन में कंपनी, एसोसिएशन, आदि जैसे उपप्रकार भी हो सकते हैं)। व्यक्ति और संगठन के पास अलग-अलग गुण होते हैं (उदाहरण के लिए अभिवादन, दिए गए नाम, जन्म तिथि, आदि व्यक्ति के लिए) इसलिए अशक्त स्तंभों का उपयोग करने के बजाय इसे विभाजित करना समझ में आता है।
(2) संभावित रूप से अधिक स्थान कुशल है (हालांकि आधुनिक डीबीएमएस में न्यूल कॉलम का ओवरहेड बहुत कम है)। बड़ा मुद्दा यह है कि (2) डेवलपर्स के लिए अधिक भ्रमित करने वाला हो सकता है। आपको ऐसी स्थिति मिलेगी जहां किसी को कहीं अतिरिक्त फ़ील्ड स्टोर करने की आवश्यकता होगी और इसे उस कॉलम में खाली कर दिया जाएगा जो उस प्रकार के लिए खाली है क्योंकि डीबीए के लिए कॉलम जोड़ने के लिए अनुमोदन प्राप्त करना आसान है (नहीं, मैं मजाक नहीं कर रहा हूं )।
(1) शायद मेरे अनुभव में 3 में से सबसे कम बार इस्तेमाल की जाने वाली योजना है।
अंत में, मापनीयता पर विचार किया जाना चाहिए और शायद (1) के लिए सबसे अच्छा मामला है। कुछ बिंदुओं पर जॉइन प्रभावी रूप से स्केल नहीं करते हैं और आपको अपने टेबल आकार को कम करने के लिए किसी प्रकार की विभाजन योजना का उपयोग करने की आवश्यकता होगी। (1) ऐसा करने का एक तरीका है (लेकिन एक कच्चा तरीका)।
हालांकि मैं इसके बारे में ज्यादा चिंता नहीं करूंगा। समस्या बनने से पहले आपको आमतौर पर सैकड़ों मिलियन या अरबों रिकॉर्ड तक पहुंचने की आवश्यकता होगी (जब तक कि आपके रिकॉर्ड वास्तव में बड़े न हों, इस मामले में यह जल्दी हो जाएगा)।