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