2008-12-21 26 views
7

मेरा मालिक मुझे डेटाबेस को स्वतंत्र बनाने के लिए केवल एएनएसआई एसक्यूएल लिखने के लिए कहता है। लेकिन मैंने सीखा कि यह इतना आसान नहीं है कि कोई डेटाबेस पूरी तरह से एएनएसआई एसक्यूएल संगत नहीं है। SQL code can rarely be ported between database systems without modifications.आप अपने अनुप्रयोगों को डेटाबेस स्वतंत्र कैसे लिखते हैं?

मैंने देखा कि लोग अपने प्रोग्राम डेटाबेस को स्वतंत्र बनाने के लिए अलग-अलग तरीके से देखते हैं। उदाहरण के लिए:

  1. संसाधन फ़ाइलों के लिए SQL कथन बाहरी।
  2. विभिन्न डेटाबेस का समर्थन करने के लिए कई प्रदाताओं वर्ग लिखें।
  3. केवल सरल एसक्यूएल लिखें, और अग्रिम कार्यों/जॉइन से दूर रखें।

क्या आप हमेशा अपना कोड "कोई डेटाबेस तैयार" लिखते हैं? या केवल तभी जरूरी है? यदि हां, तो आप इसे कैसे प्राप्त करते हैं?

+0

[डेटाबेस-अज्ञेय अनुप्रयोगों के लिए डेटाबेस डिज़ाइन] के संभावित डुप्लिकेट (http://stackoverflow.com/questions/204025/database-design-for-डेटा-agnostic- अनुप्रयोग) – user

उत्तर

6

अपने एप्लिकेशन से डेटाबेस इंजन को डीक्यूपल करने के लिए, डेटाबेस एब्स्ट्रक्शन लेयर (data access layer, या DAL) का उपयोग करें। आपने उल्लेख नहीं किया कि आप किस भाषा का उपयोग करते हैं, लेकिन सभी प्रमुख भाषाओं के लिए अच्छी डेटाबेस अमूर्त पुस्तकालय हैं।

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

+0

आप एक डीएएल कैसे करते हैं , किसी अन्य डेटाबेस पर पूरी तरह से परीक्षण किए बिना? उदाहरण के लिए, कुछ डेटाबेस में ताले, लेनदेन और अपवाद पर गैर-सामान्य व्यवहार हो सकता है जो सबकुछ तोड़ सकता है। मेरा मतलब है, डेटाबेस पर संस्करण अपग्रेड होने पर भी ऐप्स का परीक्षण किया जाना चाहिए? क्या यह संभव है कि "एक बार लिखें, प्रत्येक डीबी चलाएं"? –

+0

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

+0

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

7

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

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

2

अपने मालिक को अपने व्यवसाय को ध्यान में रखने के लिए कहें। नहीं, निश्चित रूप से कोई व्यक्ति अपने मालिक को ऐसी बातें नहीं कह सकता है, लेकिन देखते रहें।

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

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

आगे अपने मालिक को सूचित करना आपकी ज़िम्मेदारी है कि विभिन्न विकल्पों की लागत क्या है (प्रदर्शन, विकास की गति, इत्यादि के मामले में)।

"एएनएसआई एसक्यूएल लिखें" ... gah!

+0

यह क्लासिक 'पूर्व तकनीकी बॉस' व्यवहार की तरह लगता है। मुझे एक समान ध्वनि मालिक के आदेश पर एक बार डेटाबेस-अज्ञेय ऐप बनाना पड़ा। भयानक विचार के रूप में यह निकला। – Jennifer

+0

हाँ, कभी-कभी यह एक पूर्व तकनीकी मालिक है। लेकिन अक्सर यह तकनीशियनों से समझने की कमी है कि ऐसी आवश्यकताओं को पीछे हटाना और विभिन्न विकल्पों की लागत का खुलासा करना इस तरह से है कि सूट पचाने और अच्छे व्यवसाय के फैसले कर सकें। – PEZ

+0

और, हाँ, मैंने सिस्टम डेटाबेस अज्ञेयवादी रखने में बहुत सारी ऊर्जा और रचनात्मकता भी बिताई है और यह कभी भी एक अच्छा विचार नहीं रहा है। – PEZ

0

100% ANSI SQL के अनुरूप होने के नाते पूरा करने के लिए एक मुश्किल लक्ष्य है, और अभी तक यह वैसे भी पोर्टेबिलिटी गारंटी नहीं है। तो यह एक कृत्रिम लक्ष्य है।

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

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

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

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


* मैं जब मंच आजादी के बारे में बात कर शब्द "तटस्थ" के बदले "नास्तिक" पसंद करते हैं। यह धार्मिक ओवरटोन से बचाता है। :-)

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