15

के लिए पूछ रहे हैं मैं डेटाबेस संचालित प्रणाली विकसित करने के शुरुआती चरणों में हूं और सिस्टम का सबसे बड़ा हिस्सा विरासत प्रकार के रिश्ते के आसपास घूमता है। लगभग 10 कॉलम वाली एक मूल इकाई है और माता-पिता से विरासत में लगभग 10 बाल संस्थाएं होंगी। प्रत्येक बच्चे की इकाई में लगभग 10 कॉलम होंगे। मैंने सोचा कि यह मूल इकाई को अपनी मेज देने के लिए समझ में आया है और प्रत्येक बच्चे को अपनी टेबल - एक टेबल-प्रति-सबक्लास संरचना प्रदान करें।उपयोगकर्ता denormalized डेटाबेस

आज, मेरे उपयोगकर्ताओं ने मेरे द्वारा बनाई गई प्रणाली की संरचना को देखने का अनुरोध किया। उन्होंने टेबल-प्रति-सबक्लास संरचना के विचार पर झुकाया। वे एक बड़ी ~ 100 कॉलम टेबल पसंद करेंगे क्योंकि उनके लिए अपने स्वयं के कस्टम प्रश्नों को करना आसान होगा।

क्या मुझे उपयोगकर्ताओं के लिए डेटाबेस को denormalizing पर विचार करना चाहिए?

+1

क्या आप कृपया अपनी डेटाबेस संरचना को थोड़ा और विस्तारित कर सकते हैं?मैं यहां वर्तमान के खिलाफ प्रवाह करने जा रहा हूं और ऐसी स्थिति का वर्णन करता हूं जहां यह उपयोगी हो सकता है, लेकिन मुझे संरचना को जानने की जरूरत है। – Quassnoi

+1

उपयोगकर्ताओं को समाप्त करने के लिए अंतर्निहित वस्तुओं को उजागर करते समय खतरे का एक शब्द है। हालांकि इस स्थिति में एक दृश्य इष्टतम है, उपयोगकर्ताओं को कच्चे डेटा को नहीं देखना चाहिए। बेशक, मुझे केवल एक मौजूदा प्रोग्रामर माना जा सकता है जो सोचता है कि अंतिम उपयोगकर्ता केवल इन प्रकार की चीजों को गड़बड़ कर देंगे। :) – bogertron

+0

@bogertron: अस्तित्व = elitist। मुझे टिप्पणी करने से पहले मुझे वास्तव में शब्द का उपयोग शुरू करना चाहिए। – bogertron

उत्तर

59

बिलकुल नहीं। आप उन्हें यह देखने के लिए बाद में एक दृश्य बना सकते हैं कि वे क्या देखना चाहते हैं।

+2

वहां गया, ऐसा किया। जाने का यह रास्ता है। –

+1

मैं प्रोग्रामिंग परिस्थितियों में आया हूं जहां मुझे अपने उपयोगकर्ताओं के अनुरोध पर तालिकाओं को संशोधित करते समय बनाई गई गड़बड़ी को ठीक करना पड़ा, और जब मैं कहता हूं कि आप स्वयं कर रहे हैं और भविष्य के डेवलपर्स एक पक्ष को सेट करते हैं तो मुझे विश्वास है उचित आवेदन करने के लिए डेटाबेस, और क्वेरी के लिए उनके लिए विचार सेट अप करें। +5 अगर मैं केवल कर सकता था! –

+2

यदि आपके उपयोगकर्ता जटिल प्रश्नों के साथ बहुत सी रिपोर्टिंग करने जा रहे हैं तो आप अपने लेनदेन प्रणाली के एक वेयर हाउस निकालने पर विचार करना चाहेंगे। इस तरह प्रत्येक को दूसरे से परेशान नहीं किया जाएगा। – Jay

13

वे प्रभावी रूप से एक रिपोर्ट के लिए पूछ रहे हैं।

आप उन्हें पर देख सकते हैं जिसमें वे सभी फ़ील्ड हैं ... इस तरह आप अपने डेटा मॉडल को गड़बड़ नहीं करते हैं।

3

अगर आपने अपने उपयोगकर्ताओं को प्रारूप में एक दृश्य बनाया है, तो अभी भी उचित रूप से सामान्यीकृत तालिका को बनाए रखने के दौरान?

+0

हालांकि यह सबसे अच्छा जवाब नहीं है, मैं स्पष्ट रूप से और संक्षेप में एक संभावित समाधान व्यक्त करने के लिए इसे वोट दे रहा हूं। –

8

नहीं। डेटा को सही तरीके से व्यवस्थित करें और यदि उपयोगकर्ताओं को डेटा के एक असामान्य दृश्य की आवश्यकता है तो इसे डेटाबेस में एक दृश्य के रूप में बनाएं।

वैकल्पिक रूप से, मान लें कि शायद इस परियोजना के लिए आरडीबीएमएस उपयुक्त संग्रहण उपकरण नहीं है।

+0

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

+0

मुझे ओओडीबी के बारे में बहुत कुछ पता नहीं है, लेकिन नहीं, मुझे विश्वास नहीं है कि डेटाबेस के लिए या डेटाबेस से पूछताछ के लिए मानक है। विभिन्न उत्पाद विभिन्न कम या कम "एसक्यूएल-जैसे" वाक्यविन्यास प्रदान करते हैं। आप एक एक्सएमएल डेटाबेस भी देख सकते हैं जिसके लिए एक मानक क्वेरी भाषा मौजूद है, यह नहीं कि बहुत कम लोग मास्टर करने में सक्षम हैं, या यहां तक ​​कि समझते हैं। –

5

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

4

वे क्या जानते हैं !? आप तर्क दे सकते हैं कि उपयोगकर्ता को पहले स्थान पर सीधे पहुंच नहीं लेनी चाहिए।

ऐसा करने से आप बड़े प्रदर्शन के मुद्दों के लिए खुल जाते हैं, सिर्फ इसलिए कि कुछ उपयोगकर्ता हास्यास्पद प्रश्न चला रहे हैं।

+0

मुझे लगता है कि जब वह "उपयोगकर्ता" कहता है तो वह वास्तव में "ग्राहकों" का मतलब है। इस उदाहरण में –

+1

वही अंतर। यदि वे इस डीबी के शीर्ष पर एप्लिकेशन का उपयोग करेंगे, तो वे * उपयोगकर्ता * हैं। –

1

मैं दृढ़ता से उस उत्तर के साथ आने की अनुशंसा करता हूं जिसमें आपके डेटाबेस के विरुद्ध कोई प्रत्यक्ष रिपोर्ट नहीं चलती है। जो क्षण होता है, आपकी डीबी संरचना पत्थर में स्थापित होती है और आप मूल रूप से विरासत पर विचार कर सकते हैं।

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

बस स्पष्ट होने के लिए: मैं व्यक्तिगत रूप से प्रति सबक्लास दृष्टिकोण तालिका का पक्ष लेता हूं, लेकिन मुझे नहीं लगता कि यह वास्तव में एक बड़ी समस्या है क्योंकि लेनदेन तालिकाओं की सीधी रिपोर्टिंग होने वाली है।के लिए या अपने उपयोगकर्ताओं के प्रस्ताव के खिलाफ तकनीकी कारणों का एक बहुत से

3

अलावा, आप विभिन्न scenarious और (अधिक महत्वपूर्ण) लागत उन परिणामों के के परिणामों से संवाद स्थापित करने में एक ही पृष्ठ पर होना चाहिए। उपयोगकर्ताओं के लिए अपने ग्राहकों होते हैं और वे आप एक काम करने के लिए भुगतान कर रहे हैं, की व्याख्या है कि उनके भयंकर "प्रस्तावित" विचारों उन्हें विकास समय, अतिरिक्त हार्डवेयर संसाधन, आदि में अधिक पैसा खर्च कर सकते

उम्मीद है कि आप यह व्याख्या कर सकते हैं इस तरह से आपकी विशेषज्ञता दिखाती है और आपका विचार लंबे समय तक आपके उपयोगकर्ताओं के लिए एक बेहतर मूल्य क्यों है।

2

हर किसी के रूप में कम या ज्यादा उल्लेख किया गया है, इस तरह पागलपन है, और आप हमेशा एक दृश्य बना सकते हैं।

यदि आप उन्हें इस बिंदु पर चारों ओर आने के लिए नहीं मिल पा रहे हैं, तो उन्हें यह थ्रेड और उन पेशेवरों की संख्या दिखाने पर विचार करें जिन्होंने यह कहकर वजन कम किया कि उपयोगकर्ता उन चीज़ों के साथ दखल दे रहे हैं जिन्हें वे पूरी तरह समझ नहीं पाते हैं, और प्रभाव एक कमजोर नींव होगी।

डेवलपर शिल्प का एक बड़ा हिस्सा यह है कि लंबे समय तक काम नहीं करेगा, और सामान्यीकरण के नियम उस सम्मान में लगभग कैननिकल हैं। ऐसी स्थितियां हैं जहां आपको denormalize (डेटा गोदामों, आदि) की आवश्यकता है, लेकिन यह उनमें से एक की तरह नहीं लगता है!

यह भी लगता है कि आपके पास अपने हाथ पर उपयोगकर्ता का एक विशेष रूप से परेशान ब्रांड हो सकता है - एमेच्युअर डेवलपर जो सोचता है कि वे केवल आपके पास अपना काम बेहतर कर सकते हैं। यह मदद कर सकता है या नहीं भी हो सकता है, लेकिन मुझे पता चला है कि वे प्रकार प्रस्तुति के लिए अच्छी प्रतिक्रिया देते हैं - कुछ बार अब मुझे पता चला है कि अगर मैं अपने व्यक्तित्व में तेज और थोड़ा बल दिखाता हूं, तो यह उन्हें महसूस करने में मदद करता है मैं एक विशेषज्ञ हूं और शुरू करने से पहले समस्याओं का एक गुच्छा रोकता हूं।

1

मैं एक दृश्य (जैसा कि अन्य ने सुझाव दिया है) या एक इनलाइन टेबल-मूल्यवान फ़ंक्शन (इसका लाभ आपको पैरामीटर की आवश्यकता है - जैसे दिनांक सीमा या ग्राहक खाता - जो उपयोगकर्ताओं को पूछताछ से रोकने में मदद कर सकता है समस्या स्थान पर किसी भी सीमा के बिना) पहले। एक इनलाइन टीवीएफ वास्तव में एक parametrized दृश्य है और यह एक दृष्टिकोण के बहुत करीब है कि कैसे इंजन उन्हें बहु-कथन तालिका मूल्यवान समारोह या एक स्केलर समारोह के साथ व्यवहार करता है, जो अविश्वसनीय रूप से खराब प्रदर्शन कर सकते हैं।

हालांकि, कुछ मामलों में, यह दृश्य जटिल या गहन होने पर उत्पादन प्रदर्शन को प्रभावित कर सकता है। खराब लिखित विज्ञापन उपयोगकर्ता प्रश्नों के साथ, यह ताले को लंबे समय तक बने रहने का कारण बन सकता है या बेहतर निर्मित क्वेरी पर आगे बढ़ने के कारण आगे बढ़ सकता है। उपयोगकर्ताओं के लिए ई-आर डेटा मॉडल को गलत तरीके से परिभाषित करना और उन मामलों में गुणात्मक संख्याएं उत्पन्न करना भी संभव है जहां कई से कई या कई से अधिक संबंध हैं। अगला विकल्प इंडेक्स के साथ इन विचारों को पूरा करने या टेबल बनाने और उन्हें अद्यतन रखने के लिए हो सकता है, जो हमें मेरे अगले विकल्प के करीब ले जाता है ...

तो, दृश्य विकल्प के उन दोषों को देखते हुए और पहले से ही इसे कम करने की सोच डेटा की प्रतिलिपि बनाना शुरू करने के बाद, अगला विकल्प मैं मानता हूं कि डेटा के अलग-अलग पढ़ने के लिए (इन उपयोगकर्ताओं के लिए) संस्करण अलग-अलग है। आम तौर पर, मैं सबसे पहले किमबाल-स्टाइल स्टार स्कीमा को देखता हूं। आपको पूर्णकालिक समय-सतत डेटा गोदाम रखने की आवश्यकता नहीं है। बेशक, यह एक विकल्प है, लेकिन आप डेटा के साथ अद्यतित एक रिपोर्टिंग मॉडल रख सकते हैं। स्टार-स्कीमा denormalization का एक विशेष रूप है और संख्यात्मक रिपोर्टिंग के लिए विशेष रूप से अच्छा है, और एक दिए गए स्टार को गलती से उपयोगकर्ताओं द्वारा दुर्व्यवहार करने में सक्षम नहीं होना चाहिए। आप ट्रिगर्स, अनुसूचित नौकरियों इत्यादि सहित कई तरीकों से स्टार को अद्यतित रख सकते हैं। वे रिपोर्टिंग आवश्यकताओं के लिए बहुत तेज़ हो सकते हैं और उसी उत्पादन स्थापना पर चल सकते हैं - शायद एक अलग उदाहरण पर यदि एक अलग डेटाबेस नहीं है।

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

कुछ आर्किटेक्ट अक्सर अपने सर्वर को दोगुना करते हैं और किसी भी तरह के प्रतिकृति के साथ समान मॉडल का उपयोग करते हैं ताकि एक रिपोर्टिंग सर्वर प्रदान किया जा सके जो अधिक भारी या अलग से अनुक्रमित किया गया हो। ऐसा दूसरा सर्वर रिपोर्टिंग आवश्यकताओं के साथ उत्पादन लेनदेन को प्रभावित नहीं करता है और इसे काफी आसानी से अद्यतित रखा जा सकता है। केवल एक मॉडल होगा, लेकिन निश्चित रूप से, इसमें समान उपयोगिता समस्याएं हैं जो उपयोगकर्ताओं को केवल अंतर्निहित मॉडल तक पहुंच प्रदान करने की इजाजत देती हैं, प्रदर्शन के प्रभाव के बिना, क्योंकि उन्हें अपना खेल का मैदान मिलता है।

इन बिल्लियों को त्वचा के कई तरीके हैं। सौभाग्य।

1

ग्राहक हमेशा सही है। हालांकि, जब आप अपनी आवश्यकता को डॉलर और सेंट में परिवर्तित करते हैं तो ग्राहक वापस आ सकता है। कोड को लिखने के लिए एक 100 कॉलम टेबल को अतिरिक्त देव समय की आवश्यकता होगी जो डेटाबेस को उचित कार्यान्वयन के साथ स्वचालित रूप से करेगा। इसके अलावा, उनके समर्थन लागत अधिक होगी क्योंकि अधिक कोड का मतलब अधिक समस्याएं और डिबगिंग की कम आसानी है।

1

मैं यहां शैतान के वकील को खेलने जा रहा हूं और कहता हूं कि दोनों समाधान वास्तविक डेटा के खराब अनुमानों की तरह लगते हैं। एक कारण है कि ऑब्जेक्ट उन्मुख प्रोग्रामिंग भाषाएं इन डेटा मॉडलों में से किसी एक के साथ लागू नहीं होती हैं, और ऐसा इसलिए नहीं है क्योंकि कॉड के संबंधों के बारे में 1 9 70 के विचार ऑब्जेक्ट उन्मुख डेटा संरचनाओं को संग्रहित करने और पूछताछ के लिए आदर्श प्रणाली थे। :-)

याद रखें कि एसक्यूएल मूल रूप से उपयोगकर्ता इंटरफ़ेस भाषा के रूप में डिज़ाइन किया गया था (यही कारण है कि यह अंग्रेजी की तरह अस्पष्ट रूप से दिखता है और बिल्कुल उस युग की अन्य भाषाओं की तरह नहीं: अल्गोल, सी, एपीएल, प्रोलॉग)। आज उपयोगकर्ताओं के लिए SQL डेटाबेस को उजागर करने के लिए मैंने जो कारणों को सुना है, वे सुरक्षा हैं (वे सर्वर को नीचे ले जा सकते हैं!) और प्रयोज्यता (जो आप क्लिक करने पर क्लिक कर सकते हैं एसक्यूएल लिखना चाहते हैं?), लेकिन यदि यह उनका सर्वर है और वे चाहते हैं, तो क्यों नहीं उन्हें?

यह देखते हुए कि "सिस्टम का सबसे बड़ा हिस्सा विरासत के प्रकार के आसपास घूमता है", तो मैं गंभीरता से डेटाबेस पर विचार करता हूं जो मुझे उस मूल रूप से प्रतिनिधित्व करता है, या तो Postgres (यदि SQL महत्वपूर्ण है) या मूल ऑब्जेक्ट डेटाबेस (यदि आपको SQL संगतता की आवश्यकता नहीं है, तो साथ काम करने के लिए बहुत ही अच्छे हैं)।

अंत में, याद रखें कि प्रत्येक इंजीनियरिंग निर्णय एक व्यापार है। "अपनी बंदूकें चिपके हुए" (जैसा कि किसी और ने प्रस्तावित किया है) से, आप पूरी तरह से कह रहे हैं कि आपके उपयोगकर्ताओं की इच्छाओं का मूल्य शून्य है। इस के सही उत्तर के लिए SO से मत पूछें, क्योंकि हम नहीं जानते कि आपके उपयोगकर्ता आपके डेटा के साथ क्या करना चाहते हैं (या यहां तक ​​कि आपका डेटा क्या है, या आपके उपयोगकर्ता कौन हैं)। जाओ उन्हें बताएं कि आप कई टेबल समाधान क्यों चाहते हैं, और फिर उन दोनों के साथ समाधान तैयार करें जो आप दोनों को स्वीकार्य हैं।

0

आपने Class Table Inheritance लागू किया है और वे Single Table Inheritance के लिए पूछ रहे हैं। दोनों डिज़ाइन कुछ स्थितियों में मान्य हैं।

आप प्रत्येक डिज़ाइन के फायदे और नुकसान के बारे में अधिक जानने के लिए मार्टिन फाउलर के Patterns of Enterprise Application Architecture की एक प्रति प्राप्त करना चाहेंगे। यह पुस्तक किसी भी मामले में, आपके बुकशेल्फ़ पर एक क्लासिक संदर्भ है।

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