डेटाबेस के बारे में हर डेवलपर को क्या पता होना चाहिए? [बन्द है]


206

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



डेवलपर्स और अन्य सॉफ़्टवेयर पेशेवरों को डेटाबेस के बारे में जानने के लिए क्या महत्वपूर्ण अवधारणाएं हैं?


प्रतिक्रियाओं के लिए दिशानिर्देश:


अपनी सूची को छोटा रखें।
प्रति उत्तर एक अवधारणा सबसे अच्छी है।

विशिष्ट होना
"डेटा मॉडलिंग" एक महत्वपूर्ण कौशल हो सकता है , लेकिन इसका क्या मतलब है ठीक है?

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

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

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


15
इसे बंद करने के लिए वोट क्यों ?? यह एक समुदाय विकिया है और इसलिए उपयुक्त है।
डेविड

5
मैं बंद होने पर फिर से खोलने के लिए मतदान करूंगा ... मैं उन चीजों की एक सूची भी देखना चाहता हूं, जो डीबीए को OOP और एप्लिकेशन / सिस्टम सॉफ्टवेयर डिजाइन के बारे में पता होना चाहिए (.. नहीं)
चार्ल्स ब्रेटाना

7
@gnovice: उस संदर्भ में "व्यक्तिपरक" शब्द उन सवालों का जिक्र है जो पूरी तरह से राय का विषय हैं। "आप जो सेलको की किताब के बारे में क्या सोचते हैं?" - यह एक व्यक्तिपरक सवाल है। यह प्रश्न वस्तुनिष्ठ जानकारी की याचना कर रहा है, यह सिर्फ इतना है कि कोई "सही" उत्तर नहीं है। मुझे लगता है कि एक कदम वापस लेना महत्वपूर्ण है और पूछना है, "क्या यह सिर्फ निष्क्रिय प्रतिबंध है, या यह कुछ डेवलपर्स के लिए उपयोगी है?" वैसे भी मेरे दो सेंट - ऐसा नहीं है कि मैं इसके लिए प्रतिनिधि अंक अर्जित कर रहा हूं। :-)
हार्वेस्ट

6
निजी तौर पर, मुझे इन सवालों से नफरत है। वे लगभग हमेशा व्यक्तिगत राय के ढेर, उपयोगी जानकारी पर प्रकाश डालते हैं और व्यक्तिपरक घोषणाओं पर भारी पड़ते हैं। लेकिन मैं इसे अकेले इस कारण से बंद करने को तैयार नहीं हूँ; यह हो सकता है , आधे रास्ते सभ्य होना हारून, यदि आप प्रतिक्रिया के लिए कुछ दिशा निर्देश तय: एकल विषय जवाब (तुम क्या पता होना चाहिए और आप इसे क्यों पता होना चाहिए), कोई डुप्लिकेट, ऊपर वोट क्या आपसे सहमत हूँ ... और सबसे महत्वपूर्ण रूप से, अपने स्वयं के विचारों को उन उत्तरों में स्थानांतरित करें जो इसे प्रदर्शित करते हैं। जैसा कि यह खड़ा है, यह एक ब्लॉग पोस्ट या फ़ोरम चर्चा की तरह पढ़ता है, जिनमें से कोई भी एसओ पर कोई व्यवसाय नहीं है।
शोग

4
मुझे यह दिलचस्प लगता है: "यह एक सामुदायिक विकी है और इसलिए उपयुक्त है।" एक सीडब्ल्यू कैसे पृथ्वी पर इसे उपयुक्त बना सकता है? या तो एक प्रश्न उचित है या नहीं, और मुझे लगता है कि इस सवाल यह है कि जिस तरह से अगर कोई एक जवाब की तलाश में है मददगार व्यक्तिपरक है। यह दिलचस्प हो सकता है, लेकिन यह केवल एक विशेषता नहीं है जो एक प्रश्न होना चाहिए।
जॉर्ज स्कोली

जवाबों:


106

डेटाबेस के बारे में बहुत पहले बात करने वाले को यह जानना चाहिए कि डेटाबेस क्या हैं ? न कि वे कैसे काम करते हैं, न ही आप एक का निर्माण कैसे करते हैं, और न ही आप किसी डेटाबेस में डेटा को पुनः प्राप्त या अपडेट करने के लिए कोड कैसे लिखते हैं। लेकिन वे किस लिए हैं?

दुर्भाग्य से, इस एक का जवाब एक चलती लक्ष्य है। डेटाबेस के हेयड में, 1970 के दशक के शुरुआती दौर में, डेटाबेस डेटा के बंटवारे के लिए थे। यदि आप एक डेटाबेस का उपयोग कर रहे थे, और आप डेटा साझा नहीं कर रहे थे, तो आप एक अकादमिक परियोजना में शामिल थे या आप अपने आप सहित संसाधनों को बर्बाद कर रहे थे। एक डेटाबेस की स्थापना और एक DBMS का नामकरण ऐसे स्मारकीय कार्य थे जो कई बार शोषित डेटा के संदर्भ में, निवेश से मेल खाने के लिए भारी पड़ते थे।

पिछले 15 वर्षों में, डेटाबेस का उपयोग केवल एक एप्लिकेशन से जुड़े लगातार डेटा को संग्रहीत करने के लिए किया गया है। MySQL , या Access , या SQL सर्वर के लिए एक डेटाबेस का निर्माण इतना नियमित हो गया है कि डेटाबेस लगभग एक साधारण अनुप्रयोग का एक नियमित हिस्सा बन गए हैं। कभी-कभी, मिशन के रेंगने से वह प्रारंभिक सीमित मिशन ऊपर की ओर बढ़ जाता है, क्योंकि डेटा का वास्तविक मूल्य स्पष्ट हो जाता है। दुर्भाग्य से, डेटाबेस जो एक ही उद्देश्य को ध्यान में रखते हुए तैयार किए गए थे, अक्सर नाटकीय रूप से विफल हो जाते हैं जब उन्हें एक भूमिका में धकेल दिया जाता है जो उद्यम व्यापक और मिशन महत्वपूर्ण होता है।

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

तीसरी चीज़ डेवलपर्स को सीखने की ज़रूरत है, कम से कम एक सिंहावलोकन में, डेटा मॉडलिंग है, जिसमें वैचारिक डेटा मॉडलिंग, तार्किक डेटा मॉडलिंग और भौतिक डेटा मॉडलिंग शामिल है।

वैचारिक डेटा मॉडलिंग वास्तव में डेटा केंद्रित दृष्टिकोण से विश्लेषण की आवश्यकता है।

लॉजिकल डेटा मॉडलिंग आम तौर पर वैचारिक डेटा मॉडलिंग में खोजी गई आवश्यकताओं के लिए एक विशिष्ट डेटा मॉडल का अनुप्रयोग है। रिलेशनल मॉडल किसी अन्य विशिष्ट मॉडल की तुलना में कहीं अधिक उपयोग किया जाता है, और डेवलपर्स को सुनिश्चित करने के लिए रिलेशनल मॉडल को सीखने की आवश्यकता होती है। एक nontrivial आवश्यकता के लिए एक शक्तिशाली और प्रासंगिक संबंधपरक मॉडल डिजाइन करना एक तुच्छ कार्य नहीं है। यदि आप संबंधपरक मॉडल को गलत समझते हैं तो आप अच्छी SQL टेबल नहीं बना सकते।

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

अगली बात यह है कि डेवलपर्स को सीखने की ज़रूरत है कि गति (प्रदर्शन) महत्वपूर्ण है, डिजाइन अच्छाई के अन्य उपाय और भी महत्वपूर्ण हैं , जैसे कि सड़क के नीचे डेटाबेस के दायरे को संशोधित करने और विस्तारित करने की क्षमता, या प्रोग्रामिंग की सादगी।

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

वाह!


बहुत अच्छा लिखा है! और ऐतिहासिक परिप्रेक्ष्य उन लोगों के लिए बहुत अच्छा है जो उस समय (यानी मेरे) डेटाबेस का काम नहीं कर रहे थे।
हारून पकड़ा गया

6
अच्छी तरह लिखा हुआ। और मुझे लगता है कि आपके अंतिम बिंदु को अब तक बहुत बार अनदेखा किया गया है जो लोग 'बस इसे पूरा करने' की कोशिश कर रहे हैं।
डेव

1
मेरे द्वारा लिखे गए और समझाए जाने वाले प्लान, इंडेक्सिंग और डेटा सामान्यीकरण जैसे विषयों के बीच एक संबंध है। मैं चर्चा मंच के कुछ प्रकार में अधिक गहराई से उस संबंध पर चर्चा करना पसंद करूंगा। एसओ ऐसा कोई फोरम नहीं है।
वाल्टर मिती

1
यदि आप इस राक्षस को पढ़ते हुए पाते हैं, तो कल्पना करें कि इसे लिखने में कैसा लगा! मैं एक निबंध लिखने के लिए तैयार नहीं था। एक बार जब मैंने शुरुआत की, तो यह सिर्फ बहने लगा। जिसने भी इस डॉकिंग को जोड़ा है वह वास्तव में पाठकों की मदद करता है, आई.एम.ओ.
वाल्टर मिती

3
@Walter आपने इस एक को छोड़कर अपने सभी बिंदुओं के लिए स्पष्टीकरण प्रदान किया: "डेटाबेस के बारे में दूसरी बात डेवलपर्स को सीखने की आवश्यकता है जो दुनिया का संपूर्ण डेटा केंद्रित दृश्य है। डेटा केंद्रित दुनिया का दृश्य प्रक्रिया केंद्रित दुनिया के दृष्टिकोण से अधिक भिन्न है। अधिकांश डेवलपर्स ने कभी भी सीखा है। इस अंतर की तुलना में, संरचित प्रोग्रामिंग और ऑब्जेक्ट ओरिएंटेड प्रोग्रामिंग के बीच का अंतर अपेक्षाकृत छोटा है। " क्या आप इस बारे में विस्तार से बता सकते हैं? आपने कहा कि अंतर बड़ा है, लेकिन मुझे लगता है कि मैं वास्तव में डेटा-केंद्रित दृश्य को समझना चाहता हूं और यह प्रक्रिया के दृश्य से कैसे अलग है।
jedd.ahyoung

73

अच्छा प्रश्न। निम्नलिखित कुछ विचार बिना किसी विशेष क्रम के हैं:

  1. सामान्यीकरण, कम से कम दूसरे सामान्य रूप में, आवश्यक है।

  2. उचित कैस्केडिंग डिलीट और अपडेट विचार के साथ, संदर्भात्मक अखंडता भी आवश्यक है।

  3. चेक बाधाओं का अच्छा और उचित उपयोग। डेटाबेस को अधिक से अधिक काम करने दें।

  4. डेटाबेस और मध्य स्तरीय कोड दोनों में व्यावसायिक तर्क को न बिखेरें। एक या दूसरे को चुनें, अधिमानतः मध्य स्तरीय कोड में।

  5. प्राथमिक कुंजी और क्लस्टर किए गए कुंजी के लिए एक सुसंगत दृष्टिकोण पर निर्णय लें।

  6. सूचकांक से अधिक मत करो। बुद्धिमानी से अपने अनुक्रमित चुनें।

  7. लगातार तालिका और स्तंभ नामकरण। एक मानक उठाओ और इसे छड़ी।

  8. डेटाबेस में स्तंभों की संख्या को सीमित करें जो शून्य मानों को स्वीकार करेंगे।

  9. ट्रिगर के साथ दूर मत जाओ। उनका उपयोग है, लेकिन जल्दी में चीजों को जटिल कर सकते हैं।

  10. यूडीएफ के साथ सावधान रहें। वे महान हैं लेकिन प्रदर्शन समस्याओं का कारण बन सकते हैं जब आपको पता नहीं होता है कि उन्हें क्वेरी में कितनी बार बुलाया जा सकता है।

  11. डेटाबेस डिजाइन पर सेल्को की पुस्तक प्राप्त करें। आदमी घमंडी है लेकिन उसका सामान जानता है।


1
मद पर विस्तार से ध्यान देना 4. यह एक ऐसा विषय है जिसने मुझे हमेशा प्रभावित किया है।
ब्रैड

9
@ डेविड: मैंने हमेशा इसे दोनों जगहों पर रखना पसंद किया है। इस तरह से आप बग के साथ-साथ उपयोगकर्ता त्रुटि के खिलाफ भी सुरक्षित हैं। प्रत्येक कॉलम को अशक्त बनाने का कोई कारण नहीं है, या रेंज में 1-12 के बाहर मानों को एक Monthकॉलम में डाला जा सकता है । जटिल व्यावसायिक नियम, निश्चित रूप से, एक और कहानी है।
आरोनोक्यूज

1
@ ब्रैड - काम पर हमारे अधिकांश एप्लिकेशन ठोस प्रोग्रामिंग प्रक्रियाओं को लागू करने से पहले अच्छी तरह से किए गए थे। इसलिए, हमने व्यापार तर्क को हर जगह बिखेर दिया है। यह कुछ यूआई में है, कुछ मध्य स्तरीय में और कुछ डेटाबेस में। यह एक गड़बड़ है। IMO, व्यापार तर्क मध्य स्तरीय में है।
रैंडी मिंडर

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

1
बिंदु # 8 वास्तव में महत्वपूर्ण है। स्तंभ प्रकार को सामान्य रूप से कैसे प्राप्त करें, यह जानना बहुत महत्वपूर्ण है।
क्रिस वेस्ट

22

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

दूसरा, कि विभिन्न उद्देश्यों के लिए अलग-अलग डेटाबेस सेटअप हैं। यदि कोई डेटा वेयरहाउस उपलब्ध है, तो आप ऑन-लाइन ट्रांसेक्शनल डेटाबेस से ऐतिहासिक रिपोर्ट बनाने वाला डेवलपर नहीं चाहते हैं।

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

इसे विगत करें, यह इस बात पर निर्भर करता है कि डेवलपर्स कितनी बारीकी से शामिल हैं। मैंने उन नौकरियों में काम किया है, जहां मैं डेवलपर और डी वास्तविक डीबीए था, जहां डीबीए सिर्फ गलियारे से नीचे थे, और जहां डीबीए अपने क्षेत्र में बंद हैं। (मैं तीसरा नापसंद करता हूं।) यह मानते हुए कि डेवलपर्स डेटाबेस डिजाइन में शामिल हैं:

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

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

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

उन्हें इस बात का बुनियादी ज्ञान होना चाहिए कि किसी योजना को कैसे प्राप्त किया जाए, और इसे सामान्य रूप से कैसे पढ़ा जाए (कम से कम यह बताने के लिए पर्याप्त है कि एल्गोरिदम कुशल हैं या नहीं)।

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

उन्हें निश्चित रूप से पता होना चाहिए कि उत्पादन डेटा, या उत्पादन कोड, या कुछ भी ऐसा नहीं है, और उन्हें पता होना चाहिए कि सभी स्रोत कोड VCS में जाते हैं।

मैं निस्संदेह कुछ भूल गया हूं, लेकिन औसत डेवलपर को डीबीए की आवश्यकता नहीं है, बशर्ते कि हाथ में एक वास्तविक डीबीए हो।


19

मूल अनुक्रमण

मैं हमेशा एक तालिका या संपूर्ण डेटाबेस को बिना अनुक्रमित, या मनमाने ढंग से / बेकार अनुक्रमित के साथ देखकर हैरान रह जाता हूं। यहां तक ​​कि अगर आप डेटाबेस को डिज़ाइन नहीं कर रहे हैं और आपको केवल कुछ प्रश्नों को लिखना है, तो भी कम से कम समझना महत्वपूर्ण है:

  • आपके डेटाबेस में क्या अनुक्रमित है और क्या नहीं:
  • स्कैन के प्रकारों के बीच अंतर, वे कैसे चुने जाते हैं, और जिस तरह से आप एक क्वेरी लिखते हैं, वह पसंद को प्रभावित कर सकता है;
  • कवरेज की अवधारणा (आपको सिर्फ लिखना क्यों नहीं चाहिए SELECT *);
  • एक गुच्छेदार और गैर-संकुल सूचकांक के बीच का अंतर;
  • क्यों अधिक / बड़े अनुक्रमित जरूरी बेहतर नहीं हैं;
  • फ़ंक्शंस में आपको फ़िल्टर कॉलम लपेटने से बचने का प्रयास क्यों करना चाहिए।

उदाहरण के लिए, डिजाइनरों को सामान्य सूचकांक विरोधी पैटर्न के बारे में पता होना चाहिए:

  • एक्सेस एंटी-पैटर्न (हर कॉलम को एक-एक करके अनुक्रमित करते हुए)
  • कैच-ऑल एंटी-पैटर्न (सभी या अधिकांश स्तंभों पर एक विशाल सूचकांक, जाहिरा तौर पर गलत धारणा के तहत बनाया गया था कि यह उन कॉलमों में से किसी भी शामिल होने वाले प्रत्येक बोधगम्य क्वेरी को गति देगा)।

किसी डेटाबेस के अनुक्रमण की गुणवत्ता - और आप जो प्रश्न लिखते हैं, उसका लाभ उठाते हैं या नहीं - अब तक के प्रदर्शन का सबसे महत्वपूर्ण हिस्सा है। एसओ और अन्य मंचों पर खराब प्रदर्शन के बारे में शिकायत करने वाले 10 में से 9 प्रश्न, खराब अनुक्रमण या गैर-सारगर्भित अभिव्यक्ति के कारण हमेशा खराब होते हैं।


क्या आप "कवरेज" पर विस्तार से बता सकते हैं? मैं देख सकता हूं कि SELECT * को पाने के लिए एक अच्छी आदत क्यों नहीं है, लेकिन मुझे "कवरेज" का अर्थ नहीं पता है और आश्चर्य है कि क्या यह SELECT * से बचने के लिए किसी अन्य कारण से संबंधित है।
एडमंड

1
@ एडमंड: एक इंडेक्स एक क्वेरी को शामिल करता है यदि सभी आउटपुट फ़ील्ड इंडेक्स का हिस्सा होते हैं (या तो INCLUDEएसक्यूएल कॉलम या एसक्यूएल में कॉलम के रूप में)। यदि किसी दिए गए क्वेरी के लिए एकमात्र उपलब्ध इंडेक्स नॉन-कवरिंग है, तो सभी पंक्तियों को एक-एक करके प्राप्त करना होगा, जो कि एक बहुत ही धीमी गति से ऑपरेशन है, और क्वेरी ऑप्टिमाइज़र द्वारा तय किए गए समय का अधिकांश हिस्सा यह होगा कि यह isn इसके लायक नहीं है और इसके बजाय एक पूर्ण सूचकांक / तालिका स्कैन करें। इसलिए आप नहीं लिखते हैं SELECT *- यह वस्तुतः गारंटी देता है कि कोई भी सूचकांक क्वेरी को कवर नहीं करेगा।
हारून

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

@ एडमंड: पोस्टग्रेक्यूएल में INCLUDEकॉलम नहीं हो सकते हैं (मैं निश्चित रूप से नहीं कह सकता), लेकिन इसका मतलब यह नहीं है कि आप उन कॉलमों को नहीं रख सकते जिन्हें आप वास्तविक सूचकांक डेटा में कवर करना चाहते हैं। यही हमें SQL Server 2000 दिनों में वापस करना था। कवरेज अभी भी कोई फर्क नहीं पड़ता कि आप किस DBMS पर हैं।
एरोन

16

मानकीकरण

यह हमेशा मुझे किसी को अत्यधिक जटिल प्रश्न लिखने के लिए संघर्ष करते हुए देखने के लिए प्रेरित करता है जो सामान्यीकृत डिजाइन के साथ पूरी तरह से सीधा होता ("मुझे प्रति क्षेत्र कुल बिक्री दिखाएं")।

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

बहुत कम से कम, आपको पता होना चाहिए कि 3NF क्या है और वहां कैसे पहुंचा जाए। अधिकांश लेन-देन डेटाबेस के साथ, प्रश्नों को लिखने और अच्छे प्रदर्शन को बनाए रखने में आसान बनाने के बीच यह एक बहुत अच्छा संतुलन है।


14

कैसे काम करता है अनुक्रमित

यह शायद सबसे महत्वपूर्ण नहीं है, लेकिन यकीन है कि सबसे कम करके आंका गया विषय है।

अनुक्रमणिका के साथ समस्या यह है कि एसक्यूएल ट्यूटोरियल आमतौर पर उनका उल्लेख नहीं करते हैं और सभी खिलौना उदाहरण बिना किसी सूचकांक के काम करते हैं।

" अनुक्रमणिका क्वेरी को तेज़ बनाता है " की तुलना में अधिक अनुभवी डेवलपर्स इंडेक्स के बारे में अधिक जानकारी के बिना काफी अच्छा (और जटिल) SQL लिख सकते हैं ।

ऐसा इसलिए है क्योंकि SQL डेटाबेस ब्लैक-बॉक्स के रूप में काम करते हुए बहुत अच्छा काम करते हैं:

मुझे बताएं कि आपको क्या चाहिए (gmeme SQL), मैं इसका ध्यान रखूंगा।

और यह सही परिणाम प्राप्त करने के लिए पूरी तरह से काम करता है। एसक्यूएल के लेखक को यह जानने की जरूरत नहीं है कि सिस्टम पर्दे के पीछे क्या कर रहा है - जब तक सब कुछ sooo न हो जाए .....

जब अनुक्रमण एक विषय बन जाता है। लेकिन यह आमतौर पर बहुत देर से होता है और कोई (कोई कंपनी?) पहले से ही एक वास्तविक समस्या से पीड़ित है।

इसीलिए मेरा मानना ​​है कि डेटाबेस के साथ काम करते समय इंडेक्सिंग नंबर 1 विषय नहीं है । दुर्भाग्य से, इसे भूलना बहुत आसान है।

अस्वीकरण

मेरे मुक्त ई-पुस्तक " यूज़ द इंडेक्स, ल्यूक " की प्रस्तावना से तर्कों को उधार लिया गया है । मैं अपना काफी समय यह समझाने में बिता रहा हूं कि इंडेक्स कैसे काम करते हैं और उनका सही इस्तेमाल कैसे करते हैं।


12

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

मुझे लगता है कि डेटा मॉडलिंग एक महत्वपूर्ण घटक है और एक अपेक्षाकृत पुरानी अवधारणा है, फिर भी यह एक ऐसा है जिसे सॉफ्टवेयर उद्योग में कई लोग भूल गए हैं। डेटा मॉडलिंग, विशेष रूप से वैचारिक मॉडलिंग, एक प्रणाली के कार्यात्मक व्यवहार को प्रकट कर सकता है और विकास के लिए एक रोड मैप के रूप में भरोसा किया जा सकता है।

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


क्या आप इकाई-संबंध आरेख करने में पसंद करते हैं?
क्रोसेंब्लम

हां ... क्या मैं ईआरडी का उल्लेख करना भूल गया? :-)
फर्नांडो

+1 ... लेकिन आपको महसूस करना होगा कि आप SO पर हैं: प्लंबर का घर
ओआरएम इम्पीडेंस मिसमैच को ठीक करने में बिताता है


9

प्रत्येक डेवलपर को पता होना चाहिए कि यह गलत है: "डेटाबेस ऑपरेशन को प्रोफाइलिंग कोड कोड से पूरी तरह से अलग है।"

पारंपरिक अर्थों में एक स्पष्ट बिग-ओ है। जब आप एक EXPLAIN PLAN(या समतुल्य) करते हैं तो आप एल्गोरिथ्म देख रहे हैं। कुछ एल्गोरिदम में नेस्टेड लूप शामिल होते हैं और O ( n ^ 2) होते हैं। अन्य एल्गोरिदम में बी-ट्री लुकअप और शामिल हैं ( एन लॉग एन ) हैं।

यह बहुत गंभीर है। यह समझने में केंद्रीय है कि सूचकांक क्यों मायने रखता है। यह गति-सामान्यीकरण-विकेंद्रीकरण के व्यापारों को समझने के लिए केंद्रीय है। यह समझने के लिए केंद्रीय है कि डेटा वेयरहाउस एक स्टार-स्कीमा का उपयोग क्यों करता है जो लेन-देन के अपडेट के लिए सामान्यीकृत नहीं है।

यदि आप एल्गोरिथ्म पर अस्पष्ट हैं, तो निम्नलिखित का उपयोग किया जा रहा है। रूक जा। क्वेरी निष्पादन योजना की व्याख्या करें। तदनुसार अनुक्रमित करें।

इसके अलावा, कोरोलरी: अधिक सूचकांक बेहतर नहीं हैं।

कभी-कभी एक ऑपरेशन पर केंद्रित एक सूचकांक अन्य संचालन को धीमा कर देगा। दो संचालन के अनुपात के आधार पर, एक सूचकांक को जोड़ने से अच्छे प्रभाव हो सकते हैं, कोई समग्र प्रभाव नहीं हो सकता है या समग्र प्रदर्शन के लिए हानिकारक हो सकता है।


मुझे लग रहा था कि इसे गलत तरीके से लिया जाएगा। "पारंपरिक" से मेरा तात्पर्य यह था कि एल्गोरिदम पर आपका वास्तव में कोई नियंत्रण नहीं है, केवल उन लोगों को प्रभावित करने की क्षमता है जो उपयोग किए जाते हैं। वैसे भी, मैंने उस भाषा को हटा दिया क्योंकि मैं मुख्य पोस्ट में कुछ भी विवादास्पद नहीं चाहता।
Aaronaught

@ ऐरन: आपके पास एल्गोरिदम पर नियंत्रण है। यही सूचकांक है।
S.Lott

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

@ ऐरन: कम नियंत्रण वास्तव में यह समझने के लिए दायित्व को दूर नहीं करता है कि क्या क्वेरी * O ** (* n ^ 2) या * O ** (* n लॉग एन ) या सिर्फ ** O ** (n) है। कम नियंत्रण वास्तव में यह समझने की बाध्यता को दूर नहीं करता है कि क्या हो रहा है और यह पता लगाने के लिए कि इसे कैसे नियंत्रित किया जाए।
लोट

@ S.Lott: मुझे लगता है कि हम यहाँ एक ही तरफ हैं, के रूप में मैं एक सुझाव दे रहा था अधिक से अधिक डेटाबेस के लिए बोझ की रूपरेखा - "आप की जरूरत है ... [कैसे] एक प्रश्न योजना पढ़ पता करने के लिए"। लेकिन मेरा संपादन वापस लुढ़का हुआ लगता है, इसलिए ... मुझे लगता है कि यह अब समुदाय का है।
हारून पकड़ा गया

8

मुझे लगता है कि हर डेवलपर को समझना चाहिए कि डेटाबेस को एक अलग प्रतिमान की आवश्यकता होती है

अपने डेटा पर प्राप्त करने के लिए क्वेरी लिखते समय, एक सेट-आधारित दृष्टिकोण की आवश्यकता होती है। कई लोग इसके साथ एक अंतरजातीय पृष्ठभूमि का संघर्ष करते हैं। और फिर भी, जब वे इसे गले लगाते हैं, तो वे बेहतर परिणाम प्राप्त कर सकते हैं, भले ही समाधान वह नहीं हो सकता है जो पहले अपने पुनरावृत्त-मन में प्रस्तुत किया था।


कृपया स्पष्ट करें कि "सेट-बेस्ड" दृष्टिकोण से क्या मतलब है
विवियन रिवर

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

8

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

एक और बात जो डेवलपर्स को समझनी चाहिए वह यह है कि डेटाबेस को डिज़ाइन करते समय आपके दिमाग में तीन बातें होनी चाहिए:

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

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

  3. सुरक्षा - यह डेटा आपकी कंपनी का जीवन-रक्त है, इसमें अक्सर व्यक्तिगत जानकारी भी होती है जिसे चुराया जा सकता है। अपने डेटा को SQL इंजेक्शन के हमलों और धोखाधड़ी और पहचान की चोरी से बचाना सीखें।

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

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

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

कभी भी डेटाबेस के नए संस्करण में उत्पादन संस्करण की तुलना में विकसित नहीं होता है। कभी नहीं, कभी नहीं, कभी भी उत्पादन डेटाबेस के खिलाफ सीधे विकसित नहीं होता है।

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

डेटाबेस कोड कोड है, इसे अपने बाकी कोड की तरह ही सोर्स कंट्रोल में नहीं रखने का कोई बहाना नहीं है।


6

विकासवादी डेटाबेस डिजाइन। http://martinfowler.com/articles/evodb.html

ये चुस्त कार्यप्रणाली डेटाबेस परिवर्तन प्रक्रिया को प्रबंधनीय, अनुमानित और परीक्षण योग्य बनाती है।

डेवलपर्स को पता होना चाहिए कि संस्करण नियंत्रण, निरंतर एकीकरण और स्वचालित परीक्षण के संदर्भ में उत्पादन डेटाबेस को फिर से तैयार करने के लिए क्या करना है।

इवोल्यूशनरी डेटाबेस डिज़ाइन प्रक्रिया के प्रशासनिक पहलू हैं, उदाहरण के लिए इस कोडबेस के सभी डेटाबेस में कुछ जीवन काल के बाद एक कॉलम को छोड़ दिया जाना है।

कम से कम पता है, कि डेटाबेस रीफैक्टरिंग अवधारणा और कार्यप्रणाली मौजूद हैं। http://www.agiledata.org/essays/databaseRefactoringCatalog.html

वर्गीकरण और प्रक्रिया विवरण इन रिफ़ेक्टरिंग के लिए टूलिंग को लागू करना भी संभव बनाता है।


मुझे रिफैक्टिंग कॉन्सेप्ट बहुत पसंद है, लेकिन डीबी के बारे में इसके साथ वास्तविक बड़ा मुद्दा लगातार डेटा है। डीबी को रिफैक्ट करने में अक्सर डेटा माइग्रेशन शामिल होता है जो वास्तव में कठिन होता है, खासकर यदि आपको सिस्टम के किसी भी डाउनटाइम की अनुमति नहीं है। रोलबैक भी तुच्छ नहीं है। मेरे विचार में उचित / सुरक्षित रोलआउट + रोलबैक रणनीतियों में कठिनाइयाँ अक्सर डीबी को रिफलेक्टर करने के लिए शो कोड के रूप में हल्के होते हैं। स्वयं यह अक्सर रिफ्लेक्टर सामान के लिए समझ में आता है, लेकिन आपको हमेशा लागत / लाभ से आगे बढ़ना होगा।
मैनुअल अलदाना

Ambler का 'रिफ़ेक्टिंग डेटाबेस' ( amazon.com/Refactoring-Dat डेटाबेस-Evolutionary-Database- Design/… ) भी देखें ।
जोनाथन लेफ्लर

5

संबंधपरक डेटाबेस के साथ मेरे अनुभव से, हर डेवलपर को पता होना चाहिए:

- विभिन्न डेटा प्रकार :

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

- 1xM और MxM के बारे में जानें :

यह रिलेशनल डेटाबेस के लिए ब्रेड और बटर है। आपको एक-से-कई और कई-से-कई संबंधों को समझने और फिर उपयुक्त होने पर लागू करने की आवश्यकता है।

- " KISS " सिद्धांत के रूप में अच्छी तरह से डीबी पर लागू होता है :

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

- संकेत :

यह पर्याप्त नहीं है यदि आप जानते हैं कि वे क्या हैं। आपको यह समझने की आवश्यकता है कि उनका उपयोग कब करना है और कब नहीं।


भी:

  • बूलियन बीजगणित आपका मित्र है
  • चित्र: DB पर उन्हें संग्रहीत न करें। क्यों न पूछें।
  • चयन के साथ DELETE का परीक्षण करें

छवियों के लिए +1। मैं 'छवियाँ' को 'BLOBs' से बदलूंगा।
अगेल कुरियन

मैं वास्तव में "सादगी" भाग के बारे में निश्चित नहीं हूं। सरलतम संभव डेटाबेस varchar(max)स्तंभों के एक समूह के साथ एक विशाल तालिका है । संबंधपरक डेटाबेस को सामान्यीकृत किया जाना चाहिए , सरलीकृत नहीं ।
एरोन

मेरी पोस्ट के "डेटा प्रकार" भाग में आपकी चिंताओं को पहले कवर किया गया है। मैं संग्रहीत प्रक्रियाओं / ट्रिगर / कर्सर और इतने पर (आवश्यक) उपयोग का उल्लेख कर रहा था।
Anax

5

मैं सभी को DBA और डेवलपर / डिज़ाइनर / आर्किटेक्ट दोनों को बेहतर तरीके से समझना चाहता हूं कि किसी बिजनेस डोमेन को कैसे ठीक से मॉडल किया जाए, और उस बिजनेस डोमेन मॉडल को सामान्यीकृत डेटाबेस लॉजिकल मॉडल, एक अनुकूलित भौतिक मॉडल, और एक में मैप / ट्रांसलेट कैसे करें उपयुक्त वस्तु उन्मुख वर्ग मॉडल, जिनमें से प्रत्येक एक (भिन्न हो सकता है) विभिन्न कारणों से, और समझ सकता है कि कब, क्यों, और कैसे वे (या होना चाहिए) एक दूसरे से अलग हैं।


5

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


5

वाल्टर एम के जवाब के लिए निम्नलिखित टिप्पणी के बारे में:

"बहुत अच्छी तरह से लिखा गया है! और ऐतिहासिक परिप्रेक्ष्य उन लोगों के लिए बहुत अच्छा है जो उस समय (यानी मेरे) डेटाबेस का काम नहीं कर रहे थे"।

ऐतिहासिक परिप्रेक्ष्य एक निश्चित अर्थ में महत्वपूर्ण है। "जो लोग इतिहास को भूल जाते हैं, वे इसे दोहराते हैं।" Cfr XML अतीत की पदानुक्रमिक गलतियों को दोहराते हुए, ग्राफ डेटाबेस अतीत की नेटवर्क गलतियों को दोहराते हुए, OO सिस्टम उपयोगकर्ताओं पर पदानुक्रमित मॉडल के लिए मजबूर करते हैं जबकि हर किसी के दिमाग के दसवें हिस्से के साथ भी यह जानना चाहिए कि पदानुक्रमित मॉडल सामान्य के लिए उपयुक्त नहीं है- वास्तविक दुनिया का उद्देश्य प्रतिनिधित्व, वगैरह, वगैरह।

प्रश्न के लिए ही:

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

और हर डेटाबेस डेवलपर को संबंधपरक बीजगणित के बारे में सब कुछ पता होना चाहिए। तब स्टैक ओवरफ्लो पर अब कोई भी ऐसा डेवलपर नहीं बचा होगा जिसे इन बेवकूफों को पोस्ट करना था "मुझे नहीं पता कि मैं अपना काम कैसे करूं और किसी और को करना चाहता हूं"।


1
मैं मानता हूं कि एक डेवलपर को यह जानना होगा कि एसक्यूएल और आरडीएम कहां है। यह कहते हुए कि, RDM का विवेकपूर्ण उपयोग डेटाबेस डिजाइनर के लिए एक अमूल्य सहयोगी हो सकता है, भले ही कार्यान्वयन SQL हो।
वाल्टर मिटी

1
मामले में आप भूल गए, जॉर्ज
संतायाना

5

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

यदि आप क्वेरी के साथ प्रदर्शन समस्याएँ ले रहे हैं तो समस्या का स्वामित्व भी ले लें। अपने स्वयं के अनुसंधान करें और डीबीए को यह समझाने के लिए धक्का दें कि क्या हो रहा है और उनके समाधान समस्या का समाधान कैसे कर रहे हैं।

शोध करने के बाद अपने सुझाव भी दें। यही है, मैं डेटाबेस के मुद्दों को डीबीए पर छोड़ने के बजाय समस्या का एक सहकारी समाधान खोजने की कोशिश करता हूं।


अच्छा उत्तर। हम प्रत्येक का अपना क्षेत्र है हम हर समस्या या समाधान में योगदान करते हैं।
क्रोसेंब्लम

5

सादा सम्मान।

  • यह सिर्फ एक भंडार नहीं है
  • आप शायद विक्रेता या डीबीए से बेहतर नहीं जानते
  • आप 3 बजे वरिष्ठ प्रबंधकों द्वारा आप पर चिल्लाते हुए इसका समर्थन नहीं करेंगे

3

एक संभावित स्वर्गदूत के रूप में निरंकुशता पर विचार करें , न कि शैतान पर और विचार करें NoSQL डेटाबेस करें रिलेशनल डेटाबेस के विकल्प के रूप में करें।

इसके अलावा, मुझे लगता है कि एंटिटी-रिलेशन मॉडल प्रत्येक डेटाबेस के लिए एक-पता होना चाहिए, भले ही आप डेटाबेस डिज़ाइन न करें। यह आपको अच्छी तरह से समझा देगा कि आपका डेटाबेस क्या है।


3

कभी भी गलत टेक्स्ट एन्कोडिंग के साथ डेटा न डालें।

एक बार जब आपका डेटाबेस कई एन्कोडिंग के साथ प्रदूषित हो जाता है, तो आप जो सबसे अच्छा कर सकते हैं, वह कुछ प्रकार के हेयुरिस्टिक्स और मैनुअल श्रम को लागू करता है।


2
"गलत टेक्स्ट एन्कोडिंग" क्या है और यह कैसे होता है?
गेन्नेडी वनिन Геннадий Ванин

1
@ vgv8, यह तब होता है जब आपका ग्राहक उपयोगकर्ताओं को आपके इच्छित किसी भी एन्कोडिंग में पाठ प्रस्तुत करने की अनुमति देता है, आप इसे आँख बंद करके संग्रहीत करते हैं। फिर, जब आपको किसी प्रकार का परिवर्तन या विश्लेषण करने की आवश्यकता होती है, तो आपका कोड टूट जाता है, क्योंकि आपका एप्लिकेशन utf-8 को मानता है, लेकिन कुछ बेवकूफों ने utf-16 डेटा जोड़ दिया, और आपके प्रोग्राम की त्रुटियां या अस्पष्टता से थूकना शुरू कर दिया।
मिकेरबी

3

सिंटैक्स और वैचारिक विकल्पों के अलावा वे काम करते हैं (जैसे कि जॉइन, ट्रिगर्स, और संग्रहीत कार्यविधियाँ), एक बात जो डेटाबेस को नियोजित करने वाले प्रत्येक डेवलपर के लिए महत्वपूर्ण होगी:

जानिए कि आपका इंजन विशिष्टता के साथ आपके द्वारा लिखी गई क्वेरी को कैसे निष्पादित करता है।

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

यह वास्तव में कुछ ऐसा है जिसने मेरी आर एंड डी टीम को लापता अर्धविराम या इस तरह से अधिक बार मारा है। अनुमान है कि क्वेरी जल्दी से निष्पादित होगी क्योंकि यह उनके विकास प्रणाली पर तालिकाओं में केवल कुछ हजार पंक्तियों के साथ करता है। यहां तक ​​कि अगर उत्पादन डेटाबेस एक ही आकार का है, तो यह संभावना है कि यह बहुत अधिक उपयोग होने जा रहा है, और इस प्रकार अन्य बाधाओं से पीड़ित हैं, जैसे एक ही समय में कई उपयोगकर्ता इसे एक्सेस कर रहे हैं, या किसी अन्य क्वेरी के साथ कहीं और गलत हो रहा है, इस प्रकार देरी हो रही है। इस क्वेरी का परिणाम।

यहां तक ​​कि सरल चीजें जैसे कि कैसे एक क्वेरी के प्रदर्शन को प्रभावित करता है उत्पादन में अमूल्य हैं। कई डेटाबेस इंजनों की कई विशेषताएं हैं जो वैचारिक रूप से चीजों को आसान बनाती हैं, लेकिन स्पष्ट रूप से नहीं सोचा जाने पर प्रदर्शन में गोचर को पेश कर सकती हैं।

अपने डेटाबेस इंजन निष्पादन प्रक्रिया को जानें और इसके लिए योजना बनाएं।


3

एक मध्य-सड़क पेशेवर डेवलपर के लिए, जो डेटाबेस का बहुत अधिक उपयोग करता है (प्रतिदिन या लगभग दैनिक प्रश्नों को लिखना / बनाए रखना), मुझे लगता है कि उम्मीद किसी अन्य क्षेत्र की तरह होनी चाहिए: आपने कॉलेज में एक लिखा था

हर C ++ geek ने कॉलेज में एक स्ट्रिंग क्लास लिखी। हर ग्राफिक्स geek ने कॉलेज में एक रेअट्रैसर लिखा। हर वेब गीक ने इंटरेक्टिव वेबसाइट (आमतौर पर कॉलेज में "वेब फ्रेमवर्क" होने से पहले) लिखी थीं। हर हार्डवेयर nerd (और यहां तक ​​कि सॉफ्टवेयर nerds) ने कॉलेज में सीपीयू बनाया। प्रत्येक चिकित्सक ने कॉलेज में एक पूरे कैडेवर को विच्छेदित किया, भले ही वह केवल मेरा रक्तचाप लेने वाला हो और मुझे बताए कि मेरा कोलेस्ट्रॉल आज बहुत अधिक है। डेटाबेस अलग क्यों होंगे?

दुर्भाग्य से, वे अलग, आज, किसी कारण से लगते हैं। लोग चाहते हैं कि .NET प्रोग्रामर यह जानना चाहता है कि स्ट्रिंग्स C में कैसे काम करते हैं , लेकिन आपके RDBMS के इंटर्नल को आपको अधिक चिंता नहीं करनी चाहिए

उनके बारे में सिर्फ पढ़ने से, या यहाँ तक कि ऊपर से नीचे तक अपना काम करने का एक ही स्तर प्राप्त करना लगभग असंभव है। लेकिन अगर आप नीचे से शुरू करते हैं और प्रत्येक टुकड़े को समझते हैं, तो आपके डेटाबेस के लिए बारीकियों का पता लगाना अपेक्षाकृत आसान है। यहां तक ​​कि बहुत से डेटाबेस geeks की चीजें भी नहीं लग सकती हैं, जैसे कि एक गैर-रिलेशनल डेटाबेस का उपयोग कब करें।

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


सी स्ट्रिंग्स के बारे में जुड़े जोएल लेख से, अपरिभाषित व्यवहार के लिए नेतृत्व के निम्नलिखित स्निपेट नहीं हैं: चार * str = "* हैलो!"; str [0] = strlen (str) - 1; str एक स्ट्रिंग शाब्दिक है और केवल मेमोरी में पढ़ने के लिए सामान्य है। आप इसे नहीं लिख सकते:?
हेरिटोएलर्नल

एक पेशेवर डेटाबेस विशेषज्ञ, ठीक है, लेकिन हर डेवलपर ?
बेन एस्टन

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

2

एक गैर-अद्वितीय सूचकांक में स्तंभों का क्रम महत्वपूर्ण है।

पहला कॉलम वह कॉलम होना चाहिए जिसकी सामग्री (यानी कार्डिनैलिटी) में सबसे अधिक परिवर्तनशीलता हो।

यह SQL सर्वर क्षमता को रनटाइम पर इंडेक्स का उपयोग करने के लिए उपयोगी आँकड़े बनाने में सहायता करने के लिए है।


-1 'नियमों का पहला कॉलम ऐसा कॉलम होना चाहिए, जिसकी सामग्री में सबसे अधिक परिवर्तनशीलता हो।' यदि किसी को कुछ बुनियादी ज्ञान है कि अनुक्रमणिका कैसे काम करती है, तो यह देखना सरल है कि आदेश कैसे मायने रखता है और यह कि स्तंभ का क्रम उस तरह पर निर्भर होना चाहिए जिस तरह से तालिका को आगे बढ़ाया जाएगा।
चमत्कार

धन्यवाद, लेकिन अगर सूचकांक 3 फ़ील्ड्स पर बनाया गया था, तो इस आधार पर कि एक विशिष्ट sql क्वेरी उन 3 फ़ील्ड्स का उपयोग करेगा जहाँ उसका खंड, तब, आदेश महत्वपूर्ण हो सकता है, और सबसे पहले दिखाई देने वाले उच्चतम कार्डिनैलिटी वाला फ़ील्ड हो सकता है प्रदर्शन सुधार के लिए नेतृत्व .... या कम से कम मैं एक Microsoft SQL सर्वर प्रदर्शन ट्यूनिंग किताब में पढ़ा है कि क्या। मैंने इसे आज़माया और यह बेहतर तरीके से (वर्षों पहले) काम करता दिखाई दिया।
माइक डी

2

डेटाबेस को प्रोग्राम करने के लिए उपयोग किए जाने वाले टूल को समझें !!!

मैंने इतना समय बर्बाद कर दिया कि मैं यह समझने की कोशिश करूं कि मेरा कोड रहस्यमय तरीके से विफल क्यों हो रहा था।

यदि आप .NET का उपयोग कर रहे हैं, उदाहरण के लिए, आपको यह जानना आवश्यक है कि System.Data.SqlClientनामस्थान में ऑब्जेक्ट्स का सही उपयोग कैसे करें । आपको यह जानने की ज़रूरत है कि अपनी SqlConnectionवस्तुओं को कैसे प्रबंधित किया जाए, यह सुनिश्चित करने के लिए कि उन्हें खोला, बंद किया गया है, और जब आवश्यक हो, ठीक से निपटारा किया जाए।

आपको यह जानना होगा कि जब आप एक का उपयोग करते हैं SqlDataReader, तो इसे अपने से अलग बंद करना आवश्यक है SqlConnection। आपको यह समझने की आवश्यकता है कि डेटाबेस से हिट की संख्या को कम करने के लिए उपयुक्त होने पर कनेक्शन को कैसे खुला रखा जाए (क्योंकि वे कंप्यूटिंग समय के मामले में अपेक्षाकृत महंगे हैं)।


2
  • मूल एसक्यूएल कौशल।
  • अनुक्रमण।
  • DATE / TIME / TIMESTAMP के विभिन्न अवतारों से निपटें।
  • JDBC ड्राइवरआपके द्वारा उपयोग किए जा रहे प्लेटफ़ॉर्म के लिए प्रलेखन।
  • बाइनरी डेटा प्रकार ( CLOB , BLOB , आदि) के साथ डील

1

कुछ परियोजनाओं के लिए, और ऑब्जेक्ट-ओरिएंटेड मॉडल बेहतर है।

अन्य परियोजनाओं के लिए, एक संबंधपरक मॉडल बेहतर है।



1

RDBMS संगतता

देखें कि एक से अधिक RDBMS में एप्लिकेशन को चलाने के लिए क्या आवश्यक है। यदि हाँ, तो यह आवश्यक हो सकता है:

  • RDBMS SQL एक्सटेंशन से बचें
  • ट्रिगर और स्टोर प्रक्रियाओं को समाप्त करें
  • सख्त SQL मानकों का पालन करें
  • फ़ील्ड डेटा प्रकार परिवर्तित करें
  • लेन-देन अलगाव के स्तर को बदलें

अन्यथा, इन प्रश्नों को अलग से व्यवहार किया जाना चाहिए और अनुप्रयोग के विभिन्न संस्करणों (या कॉन्फ़िगरेशन) को विकसित किया जाएगा।


1

SQL क्वेरी द्वारा दी गई पंक्तियों के क्रम पर निर्भर न हों।


3
... जब तक कि इसमें कोई ORDER BYखंड न हो?
एरोन ने

और ORDER BYअनावश्यक रूप से उपयोग न करें क्योंकि यह SQL सर्वर पर लोड जोड़ता है
विवियन नदी

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.