मुझे पुराने स्कूल में लाया गया है - जहाँ हमने डेटाबेस स्कीमा को डिज़ाइन करने के लिए सीखा है ताकि एप्लिकेशन की व्यावसायिक परत (या बाकी सब चीजों के लिए OOAD का उपयोग कर) कर सकें। मैं डिजाइनिंग स्कीमा (IMHO :) के साथ बहुत अच्छा रहा हूं और अनावश्यक अतिरेक को दूर करने के लिए सामान्यीकृत किया गया है, लेकिन जहां यह गति को प्रभावित नहीं करता है यानी यदि प्रदर्शन एक हिट थे, तो अतिरेक को जगह में छोड़ दिया गया था। लेकिन ज्यादातर ऐसा नहीं था।
रूबी के ActiveRecord या ActiveJDBC जैसे कुछ ORM फ्रेमवर्क के आगमन के साथ (और कुछ अन्य जिन्हें मैं याद नहीं कर सकता, लेकिन मुझे यकीन है कि वहाँ बहुत सारे हैं) ऐसा लगता है कि वे हर मेज के लिए एक सरोगेट कुंजी रखना पसंद करते हैं, भले ही कुछ प्राथमिक विकल्प हों जैसे 'ईमेल' - एकमुश्त 2NF तोड़ना। ठीक है, मैं बहुत ज्यादा नहीं समझता, लेकिन यह मेरी नसों (लगभग) पर हो जाता है जब इनमें से कुछ ORM (या प्रोग्रामर) 1-1 या 1-0 को स्वीकार नहीं करते हैं। 1 (1 से 0 या 1)। वे यह कहते हैं कि यह सब कुछ एक बड़ी मेज के रूप में होना ही बेहतर है, अगर इसमें nulls
"आज का सिस्टम इसे संभाल सकता है" की एक टिप्पणी है जो मैंने अधिक बार सुनी है।
मैं इस बात से सहमत हूं कि मेमोरी की बाधाओं का सामान्यीकरण से सीधा संबंध था (अन्य लाभ भी हैं :) लेकिन आज के समय में सस्ती मेमोरी और क्वाड-कोर मशीनों के साथ डीबी सामान्यीकरण की अवधारणा सिर्फ ग्रंथों तक ही रह गई है? DBAs के रूप में आप अभी भी 3NF (यदि BCNF :) नहीं है तो सामान्यीकरण का अभ्यास करते हैं? फर्क पड़ता है क्या? क्या "गंदा स्कीमा" उत्पादन प्रणालियों के लिए अच्छा है? अगर यह अभी भी प्रासंगिक है, तो किसी को कैसे "सामान्यीकरण" के लिए मामला बनाना चाहिए।
( नोट: मैं डेटावेयरहाउस के स्टार / स्नोफ्लेक स्कीमा के बारे में बात नहीं कर रहा हूं, जिनके पास डिजाइन के एक भाग / आवश्यकता के रूप में अतिरेक है लेकिन उदाहरण के लिए StackExchange जैसे बैकएंड डेटाबेस के साथ वाणिज्यिक सिस्टम)