उदाहरण के लिए, मान लें कि मैं एक उपयोगकर्ता और उसके सभी फोन नंबर और ईमेल पते लाना चाहता हूं। फोन नंबर और ईमेल अलग-अलग तालिकाओं में संग्रहीत हैं, एक उपयोगकर्ता से कई फोन / ईमेल। मैं यह आसानी से कर सकता हूं:
SELECT * FROM users user
LEFT JOIN emails email ON email.user_id=user.id
LEFT JOIN phones phone ON phone.user_id=user.id
समस्या * इसके साथ यह है कि यह उपयोगकर्ता के नाम, DOB, पसंदीदा रंग, और उपयोगकर्ता तालिका में संग्रहीत सभी अन्य जानकारी को प्रत्येक रिकॉर्ड (उपयोगकर्ता ईमेल फोन रिकॉर्ड) के लिए फिर से जारी कर रहा है , संभवतः बैंडविड्थ खा रहा है और धीमा कर रहा है परिणाम नीचे।
यह अच्छे नहीं होगा अगर यह प्रत्येक उपयोगकर्ता के लिए एक ही पंक्ति लौट आए, और है कि रिकॉर्ड के भीतर एक था सूची और ईमेल की एक सूची फोन की? इससे डेटा को काम करना भी आसान हो जाएगा।
मुझे पता है कि आप LINQ या शायद अन्य रूपरेखाओं का उपयोग करके इस तरह के परिणाम प्राप्त कर सकते हैं, लेकिन यह संबंधपरक डेटाबेस के अंतर्निहित डिजाइन में कमजोरी लगती है।
हम NoSQL का उपयोग करके इसके चारों ओर प्राप्त कर सकते हैं, लेकिन क्या कोई बीच का मैदान नहीं होना चाहिए?
क्या मैं कुछ भूल रहा हूँ? यह मौजूद क्यों नहीं है?
* हां, इसे इस तरह से डिजाइन किया गया है। मैं समझ गया। मैं सोच रहा हूं कि ऐसा कोई विकल्प क्यों नहीं है जिसके साथ काम करना आसान हो। एसक्यूएल ऐसा कर सकता है जो वह कर रहा है, लेकिन फिर वे एक कीवर्ड या दो जोड़ सकते हैं ताकि थोड़ा बाद में प्रसंस्करण किया जा सके जो कार्टिजियन उत्पाद के बजाय डेटा को नेस्टेड प्रारूप में लौटाता है।
मुझे पता है कि यह आपकी पसंद की स्क्रिप्टिंग भाषा में किया जा सकता है, लेकिन इसके लिए यह आवश्यक है कि SQL सर्वर या तो अनावश्यक डेटा (उदाहरण के लिए नीचे) या आपको कई प्रश्न जारी करने के लिए भेजता है SELECT email FROM emails WHERE user_id IN (/* result of first query */)
।
इसके बजाय MySQL कुछ इस तरह से वापस आ:
[
{
"name": "John Smith",
"dob": "1945-05-13",
"fav_color": "red",
"email": "johnsmith45@gmail.com",
},
{
"name": "John Smith",
"dob": "1945-05-13",
"fav_color": "red",
"email": "john@smithsunite.com",
},
{
"name": "Jane Doe",
"dob": "1953-02-19",
"fav_color": "green",
"email": "originaljane@deerclan.com",
}
]
और फिर कुछ विशिष्ट पहचानकर्ता (जिसका अर्थ है कि मुझे भी प्राप्त करने की आवश्यकता है) पर समूह के लिए ग्राहक-पक्ष को परिणाम सेट करने के लिए सुधार करना है कि आप इसे कैसे चाहते हैं, बस इसे वापस करें:
[
{
"name": "John Smith",
"dob": "1945-05-13",
"fav_color": "red",
"emails": ["johnsmith45@gmail.com", "john@smithsunite.com"]
},
{
"name": "Jane Doe",
"dob": "1953-02-19",
"fav_color": "green",
"emails": ["originaljane@deerclan.com"],
}
]
वैकल्पिक रूप से, मैं 3 प्रश्नों को जारी कर सकता हूं: उपयोगकर्ताओं के लिए 1, ईमेल के लिए 1, और फोन नंबर के लिए 1, लेकिन फिर ईमेल और फोन नंबर के परिणाम सेट के लिए user_id को शामिल करने की आवश्यकता है ताकि मैं उन्हें उपयोगकर्ताओं के साथ मिलान कर सकूं मैंने पहले भ्रूण लिया था। फिर से, अनावश्यक डेटा और अनावश्यक प्रसंस्करण के बाद।