2011-04-20 33 views
7

मैंने हाल ही में छोटी, प्रबंधनीय सारणी में एक बहुत बड़ी डेटाबेस तालिका तोड़ दी है और अधिकांश भाग के लिए मैं अपने काम से संतुष्ट हूं और मुझे लगता है कि डेटा ठीक से सामान्यीकृत है।डाटाबेस सामान्यीकरण

लेकिन इसमें एक अपवाद है। प्रश्न में तालिका एक उत्पाद डेटाबेस से हैं जो कंपनी द्वारा बेचे जाने वाले उत्पादों के बारे में जानकारी संग्रहीत करती है (आपने अनुमान लगाया है)। मैंने अधिकतर जानकारी को दो टेबलों में विभाजित किया है: ProductBase और ProductBasePackaging

इन तालिकाओं में जानकारी की छतरी होती है जो किसी व्यक्तिगत उत्पाद की बजाय आधार भाग संख्या से प्रासंगिक होती है (प्रत्येक आधार संख्या के लिए कई उत्पाद होते हैं)।

ProductBase बल्कि निर्माण अर्थात सामग्री पर सामान्य जानकारी के इस तरह के रूप MarketingCopy, Keywords आदि और भी जानकारी, घटक आदि

और ProductBasePackaging निश्चित रूप से पैकेजिंग के बारे में डेटा को होल्ड शामिल हैं।

अब जब मैं डेटा मैनिपुलेशन के लिए आवेदन लिख रहा हूं, तो मुझे दूसरा अनुमान लगाना शुरू हो रहा है। ऐसा लगता है जैसे मैंने अभी अपने आप को कठिन बना दिया है कि मुझे एक ही कुंजी (आधार भाग संख्या) का उपयोग करने वाली कई तालिकाओं का ट्रैक रखना होगा। या क्या मैं उन्हें इस तरह से अलग करने का अधिकार रखता हूं और शायद इसे एक कदम आगे ले गया और निर्माण को अपनी खुद की मेज में भी अलग कर दिया?

मैं एसक्यूएल का उपयोग करने में बहुत अच्छी तरह से जानता हूं लेकिन यह पहली बार है कि मुझे वास्तव में डेटाबेस संरचना को डिजाइन करना पड़ा है, अकेले ही एक बड़े मौजूदा डेटाबेस को पुन: स्थापित करने दें। तो मूल रूप से मैं जो पूछ रहा हूं, क्या मेरे पास एक ही कुंजी के साथ कई टेबल हैं जो डेटा के प्रकार से अलग हो या एक ही टेबल में चीजें एक साथ रख सकें जहां मैं एक ही कुंजी का उपयोग करके एक टेबल से जो कुछ भी कर सकता हूं उसका संदर्भ दे सकता हूं?

क्षमा करें मुझे पता है कि पढ़ने के लिए बहुत कुछ था, मुझे उम्मीद है कि यह समझ में आया है, और उन सभी के लिए धन्यवाद जो इसे बनाते हैं!

उत्तर

8

सामान्यीकरण अपने आवश्यक बॉक्स संदर्भ एक में एक दर्द की तरह लग रहे हो सकता है ** अभी होगा - लेकिन मुझ पर भरोसा, लंबे समय में, आप खुशी हो जाएगा आप इसे किया! गैर-सामान्यीकृत "फ्लैट" टेबल, सबकुछ के साथ, लेकिन उनमें से रसोईघर सिंक समय के साथ बहुत अप्रबंधनीय हो जाएगा, डेटा विसंगतियां रेंगेंगी, और इससे पहले कि आप इसे जानते हों, आपके पास बकवास - गलती का एक विशाल स्टीमिंग ढेर है - डेटा जो नहीं करता अब कोई समझदारी करो!

हाँ, में शामिल होने के टेबल काम का एक सा हो सकता है - लेकिन विशेष रूप से डेटा प्रदर्शित करने के लिए, आप निश्चित रूप से विचारों जो मदद कर सकते हैं बारे में उन एक बार मिलती है और फिर बस के रूप में "आभासी तालिकाओं" है कि सब कुछ पकड़ उन्हें इस्तेमाल की जांच करनी चाहिए फिर।

डाटाबेस सामान्यीकरण - लगभग 3 एनएफ तक - अच्छी बात (TM) निश्चित रूप से है! मैं हमेशा ऐसा करने की अनुशंसा करता हूं, और फिर उस बिंदु पर कुछ सीमित डी-सामान्यीकरण को वापस पेश किया जाए, जहां प्रदर्शन आवश्यकताओं की आवश्यकता हो सकती है - लेकिन केवल एक बहुत ही नियंत्रित तरीके से, और आपकी पूरी समझ और ज्ञान के साथ कि आप वास्तव में कुछ फिर से denormalizing कर रहे हैं ।

+1

+1 मैं ** विचार ** के बारे में सहमत हूं। ओपी को यह भी ध्यान में रखना चाहिए कि यदि आपने प्रभावी रूप से डी-डुप्लिकेट किया है तो 'जॉइन' टेबल से पूछताछ एक फ्लैट टेबल से बहुत तेज हो सकती है। – Matthew

+1

+1। ऐसा लगता है जैसे ओ.पी. इसे सही के बारे में मिला है। उत्पाद व्यक्तिगत विजेट हैं, है ना? लेकिन वे बिक्री के लिए विभिन्न एसकेयू में बंडल हो जाते हैं। 2,4,8 के पैकेज, आदि। शायद वॉलमार्ट, आदि के लिए विशेष घर पैकेजिंग। आपको यहां कम से कम दो अलग-अलग इकाइयां मिली हैं। –

+0

@ निकोलस हाँ आप सही है। लेकिन क्या आप संभवतः अपने उदाहरण में अलग-अलग इकाइयों पर विस्तार कर सकते हैं? – Nick

3

उत्तर है यह पर निर्भर करता है।

यह आम तौर पर आप पूछताछ करते हैं कि आप आम तौर पर पूछताछ करते हैं कि आप कितनी बार पूछते हैं, तालिका कितनी बड़ी है, सभी डेटा को पकड़ना कितना बड़ा है .... आदि यह निर्भर करता है।
जब आप नहीं कर सकते हैं तो इसका उदाहरण सामान्य होगा यदि आपको नियमित रूप से समेकित या व्युत्पन्न डेटा क्वेरी करने की आवश्यकता होती है और इसे संकलित करने की प्रक्रिया में "लंबा समय" होता है। आमतौर पर हालांकि मुझे लगता है कि डेटा को सामान्यीकृत किया जाना चाहिए।

कहा जा रहा है कि, मुझे यकीन नहीं है कि आपने जो वर्णन किया है वह "सामान्यीकरण" जितना अलग है। सामान्यीकरण में विभिन्न स्तंभों में डुप्लिकेट डेटा को हटाने में शामिल होगा।

चलो पैकेजिंग का अपना उदाहरण लें ... ऐसा लगता है कि आपने कुछ ProductBasePackaging में रिकॉर्ड किया है जो PartNumber से ProductBase या कुछ से संबंधित है।

असल में, यदि आप डेटा को सामान्यीकृत कर रहे थे ... तो आपके पास केवल ProductBasePackaging पंक्ति प्रत्येक प्रकार की पैकेजिंग के लिए होगी ... जैसे कि आप 1000 अलग-अलग उत्पादों को शिप करते हैं लेकिन केवल 10 विभिन्न प्रकार के बक्से का उपयोग करते हैं। ProductBasePackaging में 10 पंक्तियां होंगी, प्रत्येक में एक अद्वितीय बॉक्स पर जानकारी होगी ...तो ProductBase द्वारा PackagingID

+0

आप सही हैं सर यह सामान्यीकरण की तुलना में अधिक अलगाव है कि यह प्रश्न संबंधित है। मैंने जो सामान्यीकरण किया था, वह शुरुआत में था जब हमारे पास एक विशाल मेज थी जिसमें खाली कोशिकाओं का एक टन था क्योंकि एक एप्रन के लिए "थंब लम्बाई" जैसी चीज़ें होती थी और उसी आधार पर वस्तुओं के लिए बार-बार वही डेटा दोहराया जाता था। तालिका में 9 0% कोशिकाएं या तो खाली या डेटा दोहराती थीं, यह बहुत भयानक थी। – Nick

संबंधित मुद्दे