উদাহরণস্বরূপ, বলুন আমি কোনও ব্যবহারকারী এবং তার সমস্ত ফোন নম্বর এবং ইমেল ঠিকানা আনতে চাই। ফোন নম্বর এবং ইমেলগুলি পৃথক টেবিলগুলিতে সংরক্ষণ করা হয়, একাধিক ফোন / ইমেলের এক ব্যবহারকারী। আমি এটি বেশ সহজেই করতে পারি:
SELECT * FROM users user
LEFT JOIN emails email ON email.user_id=user.id
LEFT JOIN phones phone ON phone.user_id=user.id
এর সাথে সমস্যা * এটি হ'ল এটি ব্যবহারকারীর নাম, ডিওবি, প্রিয় রঙ এবং প্রতিটি টেবিলে ব্যবহারকারীর টেবিলে সঞ্চিত সমস্ত অন্যান্য তথ্য (ব্যবহারকারীদের ইমেল ফোনের রেকর্ডে) সম্ভবত ব্যান্ডউইথ খায় এবং ধীর করে দেয় ফলাফল নিচে।
এটা সুন্দর হবে না যদি এটা প্রত্যেক ব্যবহারকারীর জন্য অবশ্যই একটি একক সারি ফিরে, এবং যে রেকর্ড মধ্যে একটি ছিল তালিকা এবং ইমেল একটি তালিকা ফোনের? এটি ডেটা দিয়ে কাজ করা আরও সহজ করে তুলবে।
আমি জানি আপনি লিনকিউ বা সম্ভবত অন্যান্য ফ্রেমওয়ার্ক ব্যবহার করে এর মতো ফলাফল পেতে পারেন তবে এটি সম্পর্কিত রিটার্নাল ডেটাবেসের অন্তর্নিহিত নকশায় দুর্বলতা বলে মনে হচ্ছে।
আমরা নোএসকিউএল ব্যবহার করে এটি পেতে পারি, তবে কোনও মাঝারি স্থলটি থাকা উচিত নয়?
আমি কিছু অনুপস্থিত করছি? কেন এর অস্তিত্ব নেই?
* হ্যাঁ, এটি এইভাবে ডিজাইন করা হয়েছে। আমি এটা পাই. আমি ভাবছি কেন এমন বিকল্প নেই যার সাথে কাজ করা সহজ। এসকিউএল এটি যা করছে তা করে রাখতে পারে তবে তারপরে তারা কিছু বা কিছু কীওয়ার্ড যুক্ত করতে পারে পোস্ট-প্রসেসিংয়ের কিছুটা যা কোনও কার্তেসিয়ান পণ্যের পরিবর্তে নেস্টেড ফর্ম্যাটে ডেটা ফেরত দেয় returns
আমি জানি এটি আপনার পছন্দের স্ক্রিপ্টিং ভাষায় করা যেতে পারে, তবে এটির প্রয়োজন যে এসকিউএল সার্ভারটি হয় নিরপেক্ষ ডেটা প্রেরণ করে (নীচে উদাহরণস্বরূপ) অথবা আপনি একাধিক প্রশ্ন ইস্যু করতে পারেন SELECT email FROM emails WHERE user_id IN (/* result of first query */)
।
মাইএসকিউএল পরিবর্তে এর মতো কিছু ফিরিয়ে আনুন:
[
{
"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, তবে ইমেল এবং ফোন নম্বর ফলাফল সেটগুলিতে ব্যবহারকারী_আইড থাকা দরকার যাতে আমি তাদের সাথে ব্যাক আপ ব্যবহার করতে পারি আমি আগে নিয়ে এসেছি। আবার, অপ্রয়োজনীয় ডেটা এবং অপ্রয়োজনীয় পোস্ট-প্রসেসিং।