মনে করুন আমি এমন একটি ব্লগ তৈরি করছি যা আমার পোস্ট এবং মন্তব্য থাকতে চাই। সুতরাং আমি দুটি টেবিল তৈরি করেছি, একটি স্বতঃসংশোধক পূর্ণসংখ্যার 'আইডি' কলাম সহ একটি 'পোস্ট' সারণী এবং একটি 'মন্তব্য' টেবিল যা বিদেশী কী 'পোস্ট_আইডি' রয়েছে।
তারপরে আমি এটি চালাতে চাই যা সম্ভবত আমার সবচেয়ে সাধারণ ক্যোয়ারী হবে যা কোনও পোস্ট এবং এর সমস্ত মন্তব্য পুনরুদ্ধার করা। রিলেশনাল ডাটাবেসের পরিবর্তে নতুন হওয়ার কারণে, আমার কাছে যে দৃষ্টিভঙ্গিটি সবচেয়ে স্পষ্ট দেখা যায় তা হ'ল এমন একটি কোয়েরি লিখতে হবে যা দেখতে এমন কিছু দেখাচ্ছে:
SELECT id, content, (SELECT * FROM comments WHERE post_id = 7) AS comments
FROM posts
WHERE id = 7
যা আমাকে চাইলে পোস্টের আইডি এবং বিষয়বস্তু দেয়, পাশাপাশি প্রাসঙ্গিকভাবে মন্তব্যযুক্ত সারিগুলি অ্যারেতে সুন্দরভাবে প্যাকেজ করা হয় (আপনি JSON এ ব্যবহার করার মতো নেস্টেড উপস্থাপনা)। অবশ্যই, এসকিউএল এবং রিলেশনাল ডাটাবেসগুলি এর মতো কাজ করে না এবং নিকটতম তারা পেতে পারে 'পোস্ট' এবং 'মন্তব্যে' এর মধ্যে একটি সংযোগ করা যা তথ্যগুলির অযৌক্তিক নকলকে ফেরত দেবে (একই পোস্টের তথ্যের সাথে পুনরাবৃত্তি করা হবে) প্রতিটি সারিতে), যার অর্থ প্রক্রিয়াজাতকরণের সময়টি এটি সমস্ত একসাথে রাখার জন্য এবং আমার সমস্ত ORM- এ পার্স করার এবং এটিকে পূর্বাবস্থায় ফেরাতে উভয়ই ব্যয় হয়।
এমনকি যদি আমি আমার ওআরএমকে পোস্টের মন্তব্যগুলি আগ্রহের সাথে লোড করার নির্দেশ দিই, তবে সর্বোত্তমভাবে করানো হ'ল পোস্টটির জন্য একটি জিজ্ঞাসা প্রেরণ করা, এবং তারপরে সমস্ত মন্তব্যগুলি পুনরুদ্ধার করার জন্য দ্বিতীয় কোয়েরি এবং তারপরে তাদের ক্লায়েন্ট-সাইডে রাখা, যা এছাড়াও অদক্ষ।
আমি বুঝতে পারি যে রিলেশনাল ডাটাবেসগুলি প্রমাণিত প্রযুক্তি (নরক, তারা আমার থেকেও বেশি বয়স্ক) এবং কয়েক দশক ধরে তাদের মধ্যে অনেকগুলি গবেষণা করা হয়েছে এবং আমি নিশ্চিত যে তারা কেন সত্যই কারণ আছে (এবং এসকিউএল স্ট্যান্ডার্ড) তারা যেভাবে কাজ করে সে জন্য ডিজাইন করা হয়েছে, তবে আমি নিশ্চিত নই যে আমি উপরে বর্ণিত পদ্ধতিটি কেন সম্ভব নয়। এটি আমার কাছে রেকর্ডগুলির মধ্যে একটি অন্যতম প্রাথমিক সম্পর্ক বাস্তবায়নের সবচেয়ে সহজ এবং সুস্পষ্ট উপায় বলে মনে হয়। রিলেশনাল ডাটাবেসগুলি কেন এমন কিছু দেয় না?
(অস্বীকৃতি: আমি বেশিরভাগই রেলস এবং নোএসকিউএল ডেটাস্টোর ব্যবহার করে ওয়েব অ্যাপস লিখি তবে সম্প্রতি আমি পোস্টগ্রেস চেষ্টা করে দেখছি, এবং আমি আসলে এটি অনেক পছন্দ করি relation আমি সম্পর্কযুক্ত ডাটাবেসগুলিকে আক্রমণ করার অর্থ বোঝাতে চাইছি না, আমি কেবল বিচলিত ed
আমি কীভাবে কোনও রেলস অ্যাপ্লিকেশনটিকে অনুকূলিত করব, বা কোনও নির্দিষ্ট ডাটাবেসে এই সমস্যাটি সম্পর্কে কীভাবে আমার উপায় হ্যাক করব তা জিজ্ঞাসা করছি না। আমি জিজ্ঞাসা করছি কেন এসকিউএল স্ট্যান্ডার্ডটি যখন আমার কাছে বিপরীতমুখী এবং অপব্যয়জনক মনে হয় তখন কেন এইভাবে কাজ করে। এসকিউএলের মূল ডিজাইনাররা তাদের ফলাফলগুলি দেখতে দেখতে কেন কিছু historicalতিহাসিক কারণ থাকতে হবে।