मान लीजिए मैं एक ब्लॉग बना रहा हूं, जिसमें मुझे पोस्ट और टिप्पणियां चाहिए। इसलिए मैं दो तालिकाएँ बनाता हूं, एक 'पोस्ट' तालिका जिसमें एक स्वत: अंकन पूर्णांक 'आईडी' कॉलम और एक 'टिप्पणियां' तालिका है जिसमें एक विदेशी कुंजी 'पोस्ट_ड' है।
फिर मैं दौड़ना चाहता हूं कि शायद मेरी सबसे आम क्वेरी क्या होगी, जो कि एक पोस्ट और उसकी सभी टिप्पणियों को पुनः प्राप्त करना है। संबंधपरक डेटाबेस के लिए नया होने के नाते, जो दृष्टिकोण मेरे लिए सबसे स्पष्ट प्रतीत होता है वह एक क्वेरी लिखना है जो कुछ इस तरह दिखाई देगा:
SELECT id, content, (SELECT * FROM comments WHERE post_id = 7) AS comments
FROM posts
WHERE id = 7
जो मुझे वांछित पोस्ट की आईडी और सामग्री प्रदान करेगा, साथ ही सभी प्रासंगिक टिप्पणी पंक्तियों को एक सरणी में बड़े करीने से पैक किया गया है (एक नेस्टेड प्रतिनिधित्व जैसा कि आप JSON में उपयोग करेंगे)। बेशक, SQL और संबंधपरक डेटाबेस इस तरह से काम नहीं करते हैं, और निकटतम वे प्राप्त कर सकते हैं 'पोस्ट' और 'टिप्पणियों' के बीच एक जुड़ाव करना है जो डेटा के बहुत सारे अनावश्यक दोहराव को वापस कर देगा (एक ही पोस्ट की जानकारी के साथ दोहराया हर पंक्ति में), जिसका अर्थ है कि प्रसंस्करण समय डेटाबेस पर खर्च करने के लिए दोनों को एक साथ रखा जाता है और मेरे ORM को पार्स और पूर्ववत करने के लिए।
यहां तक कि अगर मैं अपने ओआरएम को पोस्ट की टिप्पणियों को उत्सुकता से लोड करने का निर्देश देता हूं, तो सबसे अच्छा यह होगा कि आप पोस्ट के लिए एक क्वेरी भेज दें, और फिर सभी टिप्पणियों को पुनः प्राप्त करने के लिए एक दूसरी क्वेरी, और फिर उन्हें क्लाइंट-साइड एक साथ रख दें, जो भी अक्षम है।
मैं समझता हूं कि संबंधपरक डेटाबेस सिद्ध प्रौद्योगिकी हैं (नरक, वे मुझसे बड़े हैं), और यह कि दशकों में उन पर एक टन शोध किया गया है, और मुझे यकीन है कि वहाँ एक बहुत अच्छा कारण है कि वे (और क्यों) SQL मानक) वे करने के तरीके को तैयार करने के लिए डिज़ाइन किए गए हैं, लेकिन मुझे यकीन नहीं है कि मैं जिस दृष्टिकोण को ऊपर उल्लिखित करता हूं वह संभव नहीं है। यह मुझे रिकॉर्ड के बीच सबसे बुनियादी संबंधों में से एक को लागू करने का सबसे सरल और स्पष्ट तरीका लगता है। रिलेशनल डेटाबेस कुछ इस तरह की पेशकश क्यों नहीं करते?
(अस्वीकरण: मैं ज्यादातर रेल और NoSQL डेटास्टोर्स का उपयोग करके वेबपेज लिखता हूं, लेकिन हाल ही में मैं पोस्टग्रेज की कोशिश कर रहा हूं, और मुझे वास्तव में यह बहुत पसंद है। मैं रिलेशनल डेटाबेस पर हमला करने का मतलब नहीं हूं, मैं सिर्फ हैरान हूं।)
मैं यह नहीं पूछ रहा हूं कि रेल एप्लिकेशन को कैसे अनुकूलित किया जाए, या किसी विशेष डेटाबेस में इस समस्या के बारे में अपना तरीका कैसे हैक किया जाए। मैं पूछ रहा हूं कि जब यह मेरे लिए काउंटरपिनिटिव और बेकार लगता है तो एसक्यूएल मानक इस तरह से काम करता है। कुछ ऐतिहासिक कारण होना चाहिए कि SQL के मूल डिजाइनर इस तरह से देखने के लिए अपने परिणाम चाहते थे।