रिलेशनल डेटाबेस केवल SQL प्रश्नों को क्यों स्वीकार करते हैं?


15

जहाँ तक मुझे पता है, अधिकांश रिलेशनल डेटाबेस किसी ड्राइवर-स्तरीय एपीआई को प्रश्नों के लिए नहीं देते हैं, सिवाय एक queryफ़ंक्शन के जो एक तर्क के रूप में SQL स्ट्रिंग लेता है।

मैं सोच रहा हूं कि अगर कोई ऐसा कर सके तो कितना आसान होगा:

var result = mysql.select('article', {id: 3})

शामिल तालिकाओं के लिए, यह थोड़ा अधिक जटिल होगा, लेकिन फिर भी संभव है। उदाहरण के लिए:

var tables = mysql.join({tables: ['article', 'category'], on: 'categoryID'});
mysql.select(tables, {'article.id': 3}, ['article.title', 'article.body', 'category.categoryID'])

क्लीनर कोड, कोई स्ट्रिंग पार्सिंग ओवरहेड, इंजेक्शन की कोई समस्या नहीं, क्वेरी तत्वों का आसान पुन: उपयोग ... मैं बहुत सारे फायदे देख सकता हूं।

क्या कोई विशिष्ट कारण है कि इसे केवल SQL के माध्यम से प्रश्नों तक पहुंच प्रदान करने के लिए चुना गया था?


14
आपका पहला उदाहरण क्या करता है कि एक ORM पहले से ही प्रदान नहीं करता है?
रॉबर्ट हार्वे

4
आपका तरीका ठीक काम करेगा यदि केवल वही चीज़ जो कभी भी किया गया था, सरल प्रश्न थे।
ब्लरफेल

5
@ रोबर्टहवे कुछ नहीं। लेकिन इसे एसक्यूएल में बदलने की जरूरत है। मेरे सवाल का मुद्दा यह है कि डेटा हेरफेर संचालन के लिए हमारे पास ड्राइवर-स्तरीय पहुंच क्यों नहीं हो सकती है।
lortabac

20
मेरे लिए यह पूछने जैसा है कि टोस्टर आइस क्रीम को स्वीकार क्यों नहीं करते।
एचएलजीईएम

2
कोई पहले से ही सोच रहा था कि आप क्या सोच रहे हैं और इसे एक कदम आगे ले गए और इस तरह ओआरएम का जन्म हुआ।
मफिन मैन

जवाबों:


33

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

अपने आप को SQL कमांड बनाने के लिए इन दिनों कम आम है - कई लोग किसी प्रकार के ORM का उपयोग करते हैं। हालाँकि ये अंततः SQL स्टेटमेंट में तब्दील हो जाते हैं, फिर भी वे आपके द्वारा प्रदान की जाने वाली एपीआई प्रदान कर सकते हैं।


17
मैं हाथ से SQL कमांड बनाने के बारे में असहमत हूं। ORM बहुत ही सरल डेटा मॉडल के लिए ठीक हैं। तुच्छ से परे कुछ भी आप अपनी एसक्यूएल परत लिख रहे हैं।
मार्टिन यॉर्क

2
मैं शैतानों की वकालत करूंगा और ध्यान दें कि किसी भी उचित ORM को किसी एप्लिकेशन की जरूरतों को पूरा करने के लिए कॉन्फ़िगर किया जाना चाहिए।
bunglestink

7
@ लोकीअस्तारी: सच है, लेकिन तुच्छ CRUD सामान आपके आवेदन का 80% या अधिक बना सकता है।
रॉबर्ट हार्वे

@ समय, उत्कृष्ट बिंदु। वास्तव में, प्रश्न में प्रस्तावित काल्पनिक वाक्यविन्यास JSON जैसा एक बहुत कुछ दिखता है।
जॉन एम गैंट

JSON एक डेटा एनकैप्सुलेशन और ट्रांसफर प्रारूप है, न कि कोई भाषा।
क्रेग

35

क्योंकि SQL एक सामान्य API प्रदान करता है। आप एक एएनएसआई 92 एसक्यूएल आज्ञाकारी ड्राइवर लिख सकते हैं जो एसक्यूएल का उत्सर्जन करता है और आपको वांछित एपीआई को उजागर करता है। एक विशेष बोनस के रूप में, यह बिना किसी पुनर्लेखन के लगभग किसी भी SQL डेटाबेस के साथ काम करेगा।

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


7

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

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

डेटाबेस में कई नई सुविधाएँ हैं, इसलिए मुझे नहीं लगता कि वे स्थिर हो रहे हैं। वे सिर्फ वही नहीं कर रहे हैं जो आप किसी कारण से प्रस्तावित करते हैं।

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

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


SQL सर्वर में .NET कोड वास्तव में डेटाबेस इंजन के अंदर नहीं चलता है। यह .NET कोड सर्वर पर असेंबली के लिए संकलित है और संग्रहीत कार्यविधियाँ स्टैटिक क्लास मेथड्स के लिए जिम्मेदार हैं जिन्हें डेटाबेस सर्वर जानता है कि कैसे कॉल करना है। विधियाँ किसी डेटा प्रदाता का उपयोग करती हैं और किसी अन्य .NET कोड की तरह डेटाबेस से संबंध बनाती हैं। आपके पास डेटाबेस (Oracle, Sybase) के साथ एक समान स्थिति है जो जावा संग्रहीत प्रक्रियाओं का समर्थन करती है। दूसरी ओर, SQL, डेटाबेस का "मूल इंटरफ़ेस" है, जो अधिकांश डेटाबेस उत्पादों के समान है और वास्तव में सीधे डेटाबेस में पार्स और निष्पादित होता है।
क्रेग

@ क्रेग - उत्कृष्ट बिंदु।
जेएफओ

3

SQL DBMS मूल भाषा और कई के माध्यम से स्टोर में पर्याप्त रूप से अनुकूलित पहुंच प्रदान करते हैं, जैसा कि आप ध्यान दें कि कोई अन्य एपीआई प्रदान नहीं करता है।

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

यहां तक ​​कि डेटाबेस जो SQL DML के उपयोग की आवश्यकता होती है, अक्सर परिणाम सेट करने के लिए इट्रेटर एक्सेस प्रदान करने के लिए एक कर्सर लाइब्रेरी प्रदान करते हैं, और प्रसिद्ध Microsoft Access और Btrieve SQL DBMS दोनों एक डेटाबेस के रूप में एक डेटाबेस में व्यक्तिगत तालिकाओं के लिए एक सीधा रिकॉर्ड इंटरफ़ेस प्रदान करते हैं। विशिष्ट परिस्थितियों में बहुत उच्च प्रदर्शन के लिए।

जैसा कि कहा गया है, इस तरह के सिंटैक्स का उपयोग करने वाले जटिल प्रश्न 70 के दशक के अंत से नेटवर्क डेटाबेस के व्यवहार को पुन: पेश करेंगे।

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

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