রিলেশনাল ডাটাবেসগুলি নেস্টেড ফর্ম্যাটে তথ্য ফেরত সমর্থন করে না কেন?


46

মনে করুন আমি এমন একটি ব্লগ তৈরি করছি যা আমার পোস্ট এবং মন্তব্য থাকতে চাই। সুতরাং আমি দুটি টেবিল তৈরি করেছি, একটি স্বতঃসংশোধক পূর্ণসংখ্যার 'আইডি' কলাম সহ একটি 'পোস্ট' সারণী এবং একটি 'মন্তব্য' টেবিল যা বিদেশী কী 'পোস্ট_আইডি' রয়েছে।

তারপরে আমি এটি চালাতে চাই যা সম্ভবত আমার সবচেয়ে সাধারণ ক্যোয়ারী হবে যা কোনও পোস্ট এবং এর সমস্ত মন্তব্য পুনরুদ্ধার করা। রিলেশনাল ডাটাবেসের পরিবর্তে নতুন হওয়ার কারণে, আমার কাছে যে দৃষ্টিভঙ্গিটি সবচেয়ে স্পষ্ট দেখা যায় তা হ'ল এমন একটি কোয়েরি লিখতে হবে যা দেখতে এমন কিছু দেখাচ্ছে:

SELECT id, content, (SELECT * FROM comments WHERE post_id = 7) AS comments
FROM posts
WHERE id = 7

যা আমাকে চাইলে পোস্টের আইডি এবং বিষয়বস্তু দেয়, পাশাপাশি প্রাসঙ্গিকভাবে মন্তব্যযুক্ত সারিগুলি অ্যারেতে সুন্দরভাবে প্যাকেজ করা হয় (আপনি JSON এ ব্যবহার করার মতো নেস্টেড উপস্থাপনা)। অবশ্যই, এসকিউএল এবং রিলেশনাল ডাটাবেসগুলি এর মতো কাজ করে না এবং নিকটতম তারা পেতে পারে 'পোস্ট' এবং 'মন্তব্যে' এর মধ্যে একটি সংযোগ করা যা তথ্যগুলির অযৌক্তিক নকলকে ফেরত দেবে (একই পোস্টের তথ্যের সাথে পুনরাবৃত্তি করা হবে) প্রতিটি সারিতে), যার অর্থ প্রক্রিয়াজাতকরণের সময়টি এটি সমস্ত একসাথে রাখার জন্য এবং আমার সমস্ত ORM- এ পার্স করার এবং এটিকে পূর্বাবস্থায় ফেরাতে উভয়ই ব্যয় হয়।

এমনকি যদি আমি আমার ওআরএমকে পোস্টের মন্তব্যগুলি আগ্রহের সাথে লোড করার নির্দেশ দিই, তবে সর্বোত্তমভাবে করানো হ'ল পোস্টটির জন্য একটি জিজ্ঞাসা প্রেরণ করা, এবং তারপরে সমস্ত মন্তব্যগুলি পুনরুদ্ধার করার জন্য দ্বিতীয় কোয়েরি এবং তারপরে তাদের ক্লায়েন্ট-সাইডে রাখা, যা এছাড়াও অদক্ষ।

আমি বুঝতে পারি যে রিলেশনাল ডাটাবেসগুলি প্রমাণিত প্রযুক্তি (নরক, তারা আমার থেকেও বেশি বয়স্ক) এবং কয়েক দশক ধরে তাদের মধ্যে অনেকগুলি গবেষণা করা হয়েছে এবং আমি নিশ্চিত যে তারা কেন সত্যই কারণ আছে (এবং এসকিউএল স্ট্যান্ডার্ড) তারা যেভাবে কাজ করে সে জন্য ডিজাইন করা হয়েছে, তবে আমি নিশ্চিত নই যে আমি উপরে বর্ণিত পদ্ধতিটি কেন সম্ভব নয়। এটি আমার কাছে রেকর্ডগুলির মধ্যে একটি অন্যতম প্রাথমিক সম্পর্ক বাস্তবায়নের সবচেয়ে সহজ এবং সুস্পষ্ট উপায় বলে মনে হয়। রিলেশনাল ডাটাবেসগুলি কেন এমন কিছু দেয় না?

(অস্বীকৃতি: আমি বেশিরভাগই রেলস এবং নোএসকিউএল ডেটাস্টোর ব্যবহার করে ওয়েব অ্যাপস লিখি তবে সম্প্রতি আমি পোস্টগ্রেস চেষ্টা করে দেখছি, এবং আমি আসলে এটি অনেক পছন্দ করি relation আমি সম্পর্কযুক্ত ডাটাবেসগুলিকে আক্রমণ করার অর্থ বোঝাতে চাইছি না, আমি কেবল বিচলিত ed

আমি কীভাবে কোনও রেলস অ্যাপ্লিকেশনটিকে অনুকূলিত করব, বা কোনও নির্দিষ্ট ডাটাবেসে এই সমস্যাটি সম্পর্কে কীভাবে আমার উপায় হ্যাক করব তা জিজ্ঞাসা করছি না। আমি জিজ্ঞাসা করছি কেন এসকিউএল স্ট্যান্ডার্ডটি যখন আমার কাছে বিপরীতমুখী এবং অপব্যয়জনক মনে হয় তখন কেন এইভাবে কাজ করে। এসকিউএলের মূল ডিজাইনাররা তাদের ফলাফলগুলি দেখতে দেখতে কেন কিছু historicalতিহাসিক কারণ থাকতে হবে।


1
সমস্ত orms সেভাবে কাজ করে না। হাইবারনেট / নিবারনেট সুনির্দিষ্টভাবে যোগদানের জন্য অনুমতি দেয় এবং একক জিজ্ঞাসা থেকে পুরো অবজেক্ট ট্রিকে আগ্রহী করে তুলতে পারে।
নাথন গঞ্জালেজ

1
এছাড়াও, আলোচনার একটি আকর্ষণীয় বিষয় হওয়ার পরেও, আমি নিশ্চিত নই যে এইএসসি স্কেল ছেলেদের সাথে বৈঠক না করেই এটি সত্যই জবাবদিহিত
নাথান গঞ্জালেজ

@ নাথান: হ্যাঁ, সব না। আমি সিকুয়েল ব্যবহার করছি যা আপনাকে প্রদত্ত কোন প্রশ্নের ( ডক্স ) জন্য কোন পদ্ধতির পছন্দ তা বেছে নিতে দেয় তবে তারা এখনও একাধিক-ক্যোয়ারী পদ্ধতির উত্সাহ দেয় (পারফরম্যান্সের কারণে, আমি মনে করি)।

5
কারণ একটি আরডিবিএমএস সেটগুলি সঞ্চয় এবং পুনরুদ্ধার করার জন্য ডিজাইন করা হয়েছে - এটি প্রদর্শনের জন্য ডেটা ফেরত দেওয়ার উদ্দেশ্যে নয়। এটি এমভিসির মতো ভাবুন - কেন মডেলটিকে ধীর বা আরও বেশি কঠিন করে তুলতে ব্যয় করে দৃষ্টিভঙ্গিটি প্রয়োগ করার চেষ্টা করবে? আরডিবিএমএস এমন সুবিধাগুলি সরবরাহ করে যা নোএসকিউএল ডাটাবেসগুলি (এবং ভিসার বিপরীতে) করতে পারে না - আপনি যদি এটি ব্যবহার করেন কারণ এটি আপনার সমস্যা সমাধানের সঠিক সরঞ্জাম, আপনি এটি প্রদর্শনের জন্য প্রস্তুত ডেটা ফেরত দিতে বলবেন না।

উত্তর:


42

সিজে ডেট এসকিউএল এবং রিলেশনাল থিওরির 7 তম অধ্যায় এবং পরিশিষ্ট বিতে এ সম্পর্কে বিশদে যায় । আপনি ঠিক বলেছেন, রিলেশনাল থিওরিতে এমন কোনও কিছুই নেই যা কোনও বৈশিষ্ট্যের ডেটা টাইপকে নিজেই সম্পর্ক হতে নিষেধ করে, যতক্ষণ না এটি প্রতিটি সারিতে একই রকমের সম্পর্ক। আপনার উদাহরণ যোগ্যতা অর্জন করবে।

কিন্তু তারিখ বলছেন এই মত কাঠামো "সাধারণত - কিন্তু সবসময় না - বিপরীত" (অর্থাত একটি খারাপ ধারণা) কারণ সম্পর্কের শ্রেণীবিন্যাসের হয় সামঁজস্যহীন । উদাহরণস্বরূপ, নেস্টেড স্ট্রাকচার থেকে একটি পরিচিত "ফ্ল্যাট" কাঠামোয় রূপান্তরটি বরাবর বাসা বাঁধতে পুনরায় বিপরীত হতে পারে না।

প্রশ্নগুলি, সীমাবদ্ধতাগুলি এবং আপডেটগুলি আরও জটিল, লেখার পক্ষে আরও শক্ত এবং আরডিবিএমএসকে সমর্থন করা যদি আপনি সম্পর্ক-মূল্যবান বৈশিষ্ট্যগুলিকে (আরভিএ এর) মঞ্জুর করেন তবে সমর্থন করা আরও শক্ত।

এটি ডাটাবেস ডিজাইনের নীতিগুলিকেও জঘন্য করে তোলে, কারণ সম্পর্কের সর্বোত্তম স্তরক্রম এত পরিষ্কার নয়। প্রদত্ত সরবরাহকারী সরবরাহকারী অংশগুলির জন্য আমাদের কি নেস্টেড আরভিএ সহ সরবরাহকারীদের একটি সম্পর্ক ডিজাইন করা উচিত? বা প্রদত্ত অংশ সরবরাহকারী সরবরাহকারীদের জন্য নেস্টেড আরভিএর সাথে অংশগুলির একটি সম্পর্ক? বা উভয়টি সঞ্চয় করুন, বিভিন্ন ধরণের ক্যোয়ারী চালানো সহজ করার জন্য?

এই একই দ্বিধাটি হায়ারারিকাল ডাটাবেস এবং ডকুমেন্ট-ভিত্তিক ডাটাবেস মডেলগুলির ফলাফল। অবশেষে, নেস্টেড ডেটা স্ট্রাকচারগুলিতে অ্যাক্সেসের জটিলতা এবং ব্যয় ডিজাইনারদের বিভিন্ন ক্যোয়ারী দ্বারা আরও সহজে অনুসন্ধানের জন্য ডেটা রিডান্ট্রেস স্টোর করতে চালিত করে। রিলেশনাল মডেল রিডানডেন্সিকে নিরুৎসাহিত করে, সুতরাং আরভিএরাই রিলেশনাল মডেলিংয়ের লক্ষ্যগুলির বিরুদ্ধে কাজ করতে পারে।

আমি যা বুঝি (সেগুলি আমি ব্যবহার করি নি) থেকে, রিল এবং ডেটাফোর হ'ল আরডিবিএমএস প্রকল্প যা সম্পর্কিত-মূল্যবান বৈশিষ্ট্যগুলিকে সমর্থন করে।


@ ডোর্টাসের মন্তব্য:

কাঠামোগত প্রকারগুলি এসকিউএল -৯৯ এর অংশ, এবং ওরাকল এগুলি সমর্থন করে। তবে তারা বেস সারণির প্রতি সারি নেস্টেড টেবিলে একাধিক টিপল সংরক্ষণ করে না। সাধারণ উদাহরণটি হ'ল "ঠিকানা" বৈশিষ্ট্য যা বেস টেবিলের একক কলাম বলে মনে হয় তবে রাস্তার, শহর, ডাক কোড ইত্যাদির জন্য আরও উপ-কলাম রয়েছে has

নেস্টেড টেবিলগুলিও ওরাকল দ্বারা সমর্থিত এবং এগুলি বেস টেবিলের সারি প্রতি একাধিক টিপলকে মঞ্জুরি দেয়। তবে আমি জানি না যে এটি স্ট্যান্ডার্ড এসকিউএল এর একটি অংশ। এবংএকটি ব্লগের উপসংহারটি মনে রাখবেন: "আমি কখনই কোনও সারণী বিবৃতিতে নেস্টেড টেবিল ব্যবহার করব না You আপনি তাদের সমস্ত সময় ইউএন-নেস্টিংয়ে আবার ব্যয় করতে তাদের ব্যয় করবেন!"


3
আমি প্রকৃতপক্ষে অন্যের মধ্যে একটি সম্পর্ক সংরক্ষণ করতে চাই না - এগুলি পৃথক টেবিলগুলিতে থাকত এবং যথারীতি অস্বীকৃত হয়। আমি কেবল জিজ্ঞাসা করছি কেন এই ধরণের ফলাফল এম্বেড করার প্রশ্নগুলিতে অনুমতি দেওয়া হয় না, যখন এটি জয়েন মডেলটির চেয়ে আমার কাছে বেশি স্বজ্ঞাত মনে হয়।
প্রাইসিয়াসডোডিলি

ফলাফল সেট এবং টেবিল এক প্রকারের। তারিখ তাদের যথাক্রমে সম্পর্ক এবং রিভারকে কল করে (সাদৃশ্য অনুসারে, 42 একটি পূর্ণসংখ্যা, যেখানে একটি ভেরিয়েবলের xপূর্ণসংখ্যার মান 42 থাকতে পারে)। একই ক্রিয়াকলাপগুলি সম্পর্ক এবং রিভারদের ক্ষেত্রে প্রযোজ্য, তাই তাদের কাঠামোটি সামঞ্জস্যপূর্ণ হওয়া দরকার।
বিল কারভিন

2
স্ট্যান্ডার্ড এসকিউএল নেস্টেড টেবিলগুলিকে সমর্থন করে। এগুলিকে "কাঠামোগত প্রকার" বলা হয়। ওরাকল হ'ল একটি ডিবিএমএস যা এই বৈশিষ্ট্যটি ধারণ করে।
এনভোভেল

2
ডেটা সদৃশতা এড়ানোর জন্য, আপনার ফ্ল্যাট, ডেটা-নকল পদ্ধতিতে আপনার ক্যোয়ারীটি অবশ্যই লিখতে হবে?
ইমন নের্বোন

1
@ ইমননর্বোন, রিলেশনাল অপারেশনের প্রতিসাম্য। উদাহরণস্বরূপ, প্রক্ষেপণ। যদি আমি কোনও আরভিএর বাইরে কিছু উপ-গুণাবলী নির্বাচন করি, তবে আমি কীভাবে মূল শ্রেণিবিন্যাসের পুনরুত্পাদন ফলাফলের বিরুদ্ধে বিপরীত অপারেশন প্রয়োগ করতে পারি? আমি তারিখের বইয়ের 293 পৃষ্ঠার পৃষ্ঠাটি গুগল
বুকগুলিতে

15

প্রথম দিকের কিছু ডাটাবেস সিস্টেম হায়ারারিকাল ডেটাবেস মডেলের উপর ভিত্তি করে ছিল । এটি আপনার গাছের মতো পিতামাতা এবং বাচ্চাদের সাথে কাঠামোর মতো ডেটা উপস্থাপন করে in এইচডিএমএস মূলত আপেক্ষিক মডেল দ্বারা নির্মিত ডেটাবেস দ্বারা নিরস্ত করা হয়েছিল। এর প্রধান কারণগুলি হ'ল আরডিবিএমএস "বহু থেকে বহু" সম্পর্কের মডেল করতে পারে যা শ্রেণিবদ্ধ ডাটাবেসের জন্য কঠিন ছিল এবং আরডিবিএমএস সহজেই এমন অনুসন্ধানগুলি সম্পাদন করতে পারে যা মূল নকশার অংশ ছিল না যেখানে এইচডিবিএমএস আপনাকে নকশাকালীন সময়ে নির্দিষ্ট রাস্তাগুলি অনুসন্ধান করতে বাধা দেয় const

বন্য অঞ্চলে হায়ারারিকিকাল ডাটাবেস সিস্টেমের কয়েকটি উদাহরণ রয়েছে, বিশেষত উইন্ডোজ রেজিস্ট্রি এবং এলডিএপি।

এই বিষয়টির বিস্তৃত কভারেজ নিম্নলিখিত নিবন্ধে উপলব্ধ


10

আমি মনে করি যে আপনার প্রশ্নটি সত্যই কেন্দ্রীভূত হয়েছে যখন ডেটাবেসগুলি একটি দৃ log় যুক্তি এবং সেট থেরোরিটিক ভিত্তিতে থাকে এবং তারা রেফারেন্সিয়াল অখণ্ডতা, সম্মতি নিশ্চিতকরণের সময় (2-মাত্রিক) সেটে ডেটা মজুদ করে এবং পুনরুদ্ধার করতে খুব ভাল কাজ করে while এবং অন্যান্য অনেকগুলি জিনিস, তারা যাকে অবজেক্ট-ওরিয়েন্টেড ফর্ম্যাট বা শ্রেণিবদ্ধ বিন্যাস বলতে পারে তাতে ডেটা প্রেরণের (এবং প্রাপ্তি) কোনও (অতিরিক্ত) বৈশিষ্ট্য সরবরাহ করে না।

তারপরে আপনি দাবি করেন যে "আমি যদি নিজের ওআরএমকে পোস্টের মন্তব্যগুলি আগ্রহের সাথে লোড করার জন্য নির্দেশ দিই তবে পোস্টের জন্য একটি ক্যোয়ারী প্রেরণ করা, এবং তারপরে সমস্ত মন্তব্যগুলি পুনরুদ্ধার করার জন্য দ্বিতীয় কোয়েরি করা এবং তারপরে সেগুলি একসাথে রাখা ক্লায়েন্ট-সাইড, যা হয় অদক্ষ "

আমি 2 টি প্রশ্ন পাঠাতে এবং 2 টি ব্যাচ ফলাফল প্রাপ্তিতে অদক্ষ কিছুই দেখতে পাচ্ছি না:

--- Query-1-posts
SELECT id, content 
FROM posts
WHERE id = 7


--- Query-2-comments
SELECT * 
FROM comments 
WHERE post_id = 7

আমি যুক্তি দিয়েছি যে (প্রায়) সবচেয়ে কার্যকর উপায় (প্রায়, যেহেতু আপনার সত্যিকারের প্রয়োজন নেই posts.idএবং সমস্ত কলামের প্রয়োজন নেই comments.*)

টড যেমন তার মন্তব্যে ইঙ্গিত করেছেন, আপনার ডাটাবেসটি প্রদর্শনের জন্য প্রস্তুত ডেটা ফেরত দিতে বলা উচিত নয়। এটি করা আবেদনের কাজ। প্রতিটি ডিসপ্লে অপারেশনের জন্য আপনার প্রয়োজনীয় ফলাফল পেতে আপনি (এক বা কয়েকটি) কোয়েরি লিখতে পারেন যাতে ডিবি থেকে অ্যাপ্লিকেশনটিতে তার (বা মেমরি বাস) এর মাধ্যমে প্রেরিত ডেটাগুলিতে কোনও অপ্রয়োজনীয় সদৃশ হয় না।

আমি সত্যিই ওআরএম সম্পর্কে কথা বলতে পারি না তবে সম্ভবত তাদের মধ্যে কিছু আমাদের জন্য এই কাজের অংশ নিতে পারে।

ওয়েব সার্ভার এবং ক্লায়েন্টের মধ্যে ডেটা বিতরণে অনুরূপ কৌশল ব্যবহার করা যেতে পারে। অন্যান্য কৌশল (যেমন ক্যাচিং) ব্যবহার করা হয় যাতে ডাটাবেস (বা ওয়েব বা অন্যান্য সার্ভার) সদৃশ অনুরোধের সাথে ওভারলোড হয় না।

আমার অনুমান যে এসকিউএল এর মতো মানদণ্ডগুলি যদি সর্বোত্তম হয় তবে যদি তারা একটি অঞ্চলে বিশেষীভূত থাকে এবং কোনও ক্ষেত্রের সমস্ত অঞ্চল coverেকে রাখার চেষ্টা না করে।

অন্যদিকে, এসকিউএল স্ট্যান্ডার্ড নির্ধারণকারী কমিটী ভবিষ্যতে অন্যথায় ভালভাবে ভাবতে পারে এবং এই জাতীয় অতিরিক্ত বৈশিষ্ট্যের জন্য স্ট্যান্ডার্ডাইজেশন সরবরাহ করতে পারে। তবে এটি এমন কোনও জিনিস নয় যা এক রাতে ডিজাইন করা যায়।


1
আমি এই অর্থে অক্ষম বলতে চাইছিলাম যে আমার অ্যাপ্লিকেশনটিতে কেবল একটিটির পরিবর্তে দুটি ওভারহেড এবং দুটি ডাটাবেস কল বিলম্বিত করতে হবে। এ ছাড়াও, যোগদানের জন্য কি কেবল প্রদর্শন করতে প্রস্তুত এমন ফর্ম্যাটে ডেটা ফিরিয়ে দেওয়া হচ্ছে না? বা একটি ডাটাবেস ভিউ ব্যবহার করছেন? আপনি চাইলে কেবল আরও ছোট প্রশ্নগুলি চালিয়ে এবং সেগুলি আপনার অ্যাপ্লিকেশনে একত্রে সেলাই করে এগুলিকে বিভ্রান্ত করতে পারেন, তবে সেগুলি এখনও দরকারী সরঞ্জাম। আমি মনে করি না আমি যা প্রস্তাব করছি তা ব্যবহারের সহজ এবং আরও পারফরম্যান্স বাদে একটি যোগদানের চেয়ে উল্লেখযোগ্যভাবে আলাদা।

2
@ প্রিয়স: একাধিক প্রশ্ন চালানোর জন্য কোনও বাড়তি ওভারহেডের দরকার নেই। বেশিরভাগ ডাটাবেস আপনাকে একক ব্যাচে একাধিক প্রশ্ন জমা দিতে দেয় এবং একক কোয়েরিতে একাধিক ফলাফল সেট গ্রহণ করতে দেয়।
ড্যানিয়েল প্রাইডেন

@ প্রিরিসডোডিলি ফ্লুয়েডস - ইপারকিউবের উত্তরের এসকিউএল স্নিপেটটি একটি একক কোয়েরি যা একক ডাটাবেসে কল পাঠানো হবে এবং একটি প্রতিক্রিয়াতে দুটি ফলাফল সেট ফেরত দেবে।
কারসন 63000

5

আমি একটি যথাযথ, তর্কযুক্ত উত্তর দিয়ে উত্তর দিতে পারছি না, তাই আমি ভুল হলে আমাকে বিস্মৃত করতে নির্দ্বিধায় (তবে দয়া করে আমাকে সংশোধন করুন যাতে আমরা নতুন কিছু শিখতে পারি)। আমি মনে করি যে এর কারণ হ'ল রিলেশনাল ডাটাবেসগুলি রিলেশনাল মডেলকে কেন্দ্র করে, যা ঘুরে দেখা যায় এমন কিছু ভিত্তিতে যা আমি "ফার্স্ট অর্ডার লজিক" নামক কিছুই জানি না। আপনি যা জিজ্ঞাসা করতে পারেন তা গাণিতিক / যৌক্তিক কাঠামোর সাথে সম্পর্কিত ডেটাবেসগুলিতে ধারণামূলকভাবে ফিট করে না। তদুপরি, আপনি যা জিজ্ঞাসা করেন তা সাধারণত গ্রাফ ডাটাবেসগুলির মাধ্যমে সহজেই সমাধান করা হয়, আরও ইঙ্গিত দেয় যে এটি যেটি অর্জন করতে চান তার সাথে দ্বন্দ্ব করে এমন ডেটাবেসটির অন্তর্নিহিত ধারণাটি রয়েছে।


5

আমি জানি আপনি কমপক্ষে এসএমএল সার্ভার যখন নেভিগেশন এক্সএমএল ব্যবহার করেন তখন নেস্টেড কোয়েরিগুলিকে সমর্থন করে।

SELECT id, content, (SELECT * FROM comments WHERE post_id = posts.id FOR XML PATH('comments'), TYPE) AS comments
FROM posts
WHERE id = 7
FOR XML PATH('posts')

এখানে সমস্যাটি আরডিবিএমএসের সহায়তার অভাব নয়, তবে টেবিলগুলিতে নেস্টেড টেবিলগুলির সমর্থনের অভাব।

পাশাপাশি, আপনাকে অভ্যন্তরীণ যোগদান ব্যবহার থেকে বিরত রাখে কী?

SELECT id, content, comments.*
FROM posts inner join comments on comments.post_id = posts.id
WHERE id = 7

অভ্যন্তরীণ জোড়টিকে আপনি নেস্টেড টেবিল হিসাবে প্রকৃতপক্ষে দেখতে পারেন, কেবলমাত্র প্রথম 2 টি ক্ষেত্রের সামগ্রীতে একটি সম্ভব সময় পুনরাবৃত্তি করা হয়। আমি যোগদানের পারফরম্যান্স সম্পর্কে খুব চিন্তার উদ্বিগ্ন হব না, এর মতো একটি ক্যোয়ারির একমাত্র ধীর অংশটি হ'ল ডাটাবেস থেকে ক্লায়েন্টের আইও। এটি কেবল তখনই সমস্যা হবে যখন সামগ্রীতে প্রচুর পরিমাণে ডেটা থাকবে। যে ক্ষেত্রে আমার দুইটি প্রশ্নের সঙ্গে এক সুপারিশ করবে select id, contentএবং ভেতরের যোগ দিতে এবং সঙ্গে এক select posts.id, comments.*। একাধিক পোস্টের সাথেও এটি স্কেল করে, কারণ আপনি এখনও কেবল 2 টি ক্যোরি ব্যবহার করবেন।


প্রশ্নগুলি এটিকে সম্বোধন করে। হয় আপনাকে দুটি রাউন্ড ট্রিপ করতে হবে (অনুকূল নয়) অথবা আপনাকে প্রথম দুটি কলামে অপ্রয়োজনীয় ডেটা ফেরত দিতে হবে (এছাড়াও অনুকূল নয়)। তিনি অনুকূল সমাধান চান (আমার মতে অবাস্তব নয়)।
স্কট হুইটলক

আমি জানি, তবে অনুকূল সমাধান হিসাবে কোনও স্তন্যপান জিনিস নেই। কেবলমাত্র আমি যুক্তি দিতে পারি যে ওভারহেড ন্যূনতম হবে এবং কোথায় এটি নির্ভর করে। আপনি যদি সর্বোত্তম সমাধান চান তবে বেঞ্চমার্ক এবং বিভিন্ন পদ্ধতির চেষ্টা করুন। এমনকি এক্সএমএল সমাধানটি নির্দিষ্ট পরিস্থিতির উপর নির্ভর করে ধীর হতে পারে এবং আমি নোএসকিউএল ডেটাস্টোরগুলির সাথে অপরিচিত তাই এর মতো কিছু থাকলে আমি বলতে পারি না for xml
ডোরাস

5

আসলে ওরাকল আপনি যা চান তা সমর্থন করে তবে আপনাকে "কার্সার" কীওয়ার্ড দিয়ে সাব-কোয়েরিটি মোড়ানো দরকার। খোলা কার্সারের মাধ্যমে ফলাফলগুলি আনা হয়। জাভাতে, উদাহরণস্বরূপ মন্তব্যগুলি ফলাফলের সেট হিসাবে প্রদর্শিত হবে। এর উপর আরও দেখুন "CURSOR Expression" এ ওরাকল এর ডকুমেন্টেশন

SELECT id, content, cursor(SELECT * FROM comments WHERE post_id = 7) AS comments
FROM posts
WHERE id = 7

1

কেউ কেউ বাসা বাঁধে (শ্রেণিবিন্যাস) সমর্থন করে।

আপনি যদি একটি প্রশ্ন জিজ্ঞাসা করতে চান তবে আপনার কাছে একটি টেবিল থাকতে পারে যা স্বয়ং উল্লেখ করে। কিছু আরডিএমএস এই ধারণাটিকে সমর্থন করে। উদাহরণস্বরূপ, এসকিউএল সার্ভারের সাহায্যে একজন শ্রেণিবদ্ধ প্রশ্নের জন্য সাধারণ টেবিল এক্সপ্রেশন (সিটিই) ব্যবহার করতে পারেন।

আপনার ক্ষেত্রে পোস্টগুলি স্তর 0 এ হবে এবং তারপরে সমস্ত মন্তব্যগুলি স্তর 1 এ হবে।

অন্যান্য বিকল্পগুলি হল 2 টি ক্যোয়ারী বা প্রত্যাবর্তিত প্রতিটি রেকর্ডের জন্য অতিরিক্ত তথ্য সহ একটি যোগদান করুন (অন্যরা উল্লেখ করেছেন)।

শ্রেণিবদ্ধ উদাহরণ:

https://stackoverflow.com/questions/14274942/sql-server-cte-and-recursion-example

উপরের লিঙ্কে, এমপ্লেভেল নীড়ের স্তর (বা শ্রেণিবিন্যাস) দেখায়।


এসকিউএল সার্ভারে উপ-ফলাফল সংক্রান্ত কোনও ডকুমেন্টেশন খুঁজে পাচ্ছি না। এমনকি সিটিই ব্যবহার করার সময়ও। রেজাল্ট অনুসারে আমি কেবলমাত্র যথেষ্ট জোরালো-টাইপযুক্ত কলামগুলির সাথে সারিগুলির ডেটা বোঝাতে চাইছি। আপনি কি আপনার উত্তরে রেফারেন্স যুক্ত করতে পারবেন?
স্যান্ডরক

@ সানড্রোক - একটি ডাটাবেস একটি এসকিউএল কোয়েরি থেকে একটি ফলাফল পুনরায় পাঠাবে। নিজেই ক্যোয়ারীতে স্তরগুলি সনাক্ত করে আপনি একটি শ্রেণিবিন্যাসিক বা নেস্টেড ফলাফল সেট তৈরি করতে পারেন যা প্রক্রিয়াজাতকরণ হতে পারে। আমি মনে করি বর্তমানে এটি নিকটতম, আমরা নীচে থাকা ডেটা ফেরত পেতে গনিগ।
জন রেয়নর

0

আমি দুঃখিত আমি নিশ্চিত যে আমি আপনার সমস্যাটি ঠিক বুঝতে পেরেছি না।

এমএসএসকিউএলে আপনি কেবলমাত্র দুটি এসকিউএল বিবৃতি কার্যকর করতে পারেন।

SELECT id, content
FROM posts
WHERE id = 7

SELECT * FROM comments WHERE post_id = 7

এবং এটি একই সাথে আপনার 2 ফলাফলের সেটগুলি ফিরিয়ে দেবে।


প্রশ্ন জিজ্ঞাসা করা ব্যক্তিটি বলছেন যে এটি কম দক্ষ কারণ এটি ডাটাবেসে দুটি রাউন্ড-ট্রিপের ফলস্বরূপ, এবং আমরা সাধারণত ওভারহেডের কারণে রাউন্ড ট্রিপগুলি হ্রাস করার চেষ্টা করি। তিনি এক রাউন্ড ট্রিপ করতে এবং উভয় টেবিল ফিরে পেতে চান।
স্কট হুইটলক

তবে এটি এক রাউন্ড ট্রিপ হবে। stackoverflow.com/questions/2336362/...
তীব্র আঘাত MaGriff

0

আরডিবিএমগুলি তত্ত্বের উপর ভিত্তি করে এবং তারা তত্ত্বের সাথে লেগে থাকে। এটি কিছু সুন্দর ধারাবাহিকতা এবং গাণিতিকভাবে প্রমাণিত নির্ভরযোগ্যতার জন্য অনুমতি দেয়।

কারণ মডেলটি সহজ এবং আবার তত্ত্বের উপর ভিত্তি করে এটি লোকেদের অনুকূলকরণ এবং অনেকগুলি বাস্তবায়ন করা সহজ করে তোলে। এটি নোএসকিউএল এর বিপরীতে যেখানে প্রত্যেকে এটি কিছুটা আলাদা করে।

অতীতে হায়ারারচাল ডেটাবেসগুলি তৈরি করার চেষ্টা করা হয়েছিল কিন্তু আইআইআরসি (এটি গুগল করতে পারে না) এর মধ্যেও বিভিন্ন সমস্যা রয়েছে (চক্র এবং সমতা মাথায় আসে)।


0

আপনার একটি নির্দিষ্ট প্রয়োজন আছে। আপনি যে ফর্ম্যাটটিতে চান সেটি কোনও ডাটাবেস থেকে ডেটা বের করার পক্ষে অগ্রাধিকার দেওয়া হবে, যাতে আপনি যা চান তা এটি করতে পারেন।

কিছু কিছু ডাটাবেস পাশাপাশি করে না, তবে যাইহোক এটি করার জন্য এগুলি তৈরি করা অসম্ভব নয়। অন্যান্য অ্যাপ্লিকেশনগুলিতে ফর্ম্যাটিং ছেড়ে দেওয়া বর্তমান প্রস্তাবনা, তবে কেন এটি করা যায় না তা ন্যায়সঙ্গত করে না।

আপনার পরামর্শের বিরুদ্ধে আমার কেবল যুক্তিই এই ফলাফলটিটিকে "স্কয়ার" উপায়ে পরিচালনা করতে সক্ষম হচ্ছে। এটি ব্যবহার করে ডেটাবেসটিতে কোনও ফলাফল তৈরি করা বা কিছুটা হস্তক্ষেপ না করা একটি খারাপ ধারণা হবে। ধরা যাক যে আমি আপনার পরামর্শ মতো একটি দৃষ্টিভঙ্গি তৈরি করেছি, আমি কীভাবে এটি অন্য একটি নির্বাচিত বিবৃতিতে অন্তর্ভুক্ত করব? ডাটাবেসগুলি ফলাফল নিতে এবং তাদের সাথে জিনিসগুলি করতে পছন্দ করে। আমি কীভাবে এটি অন্য টেবিলে যোগদান করব? আমি কীভাবে আপনার ফলাফলের সাথে অন্যটির সাথে সেট করা তুলনা করব?

তারপরে আরডিএমএসের সুবিধা হ'ল বর্গের নমনীয়তা। সারণী থেকে ডেটা বাছাইয়ের বাক্য গঠন সিস্টেমের ব্যবহারকারী বা অন্যান্য বস্তুর তালিকার খুব কাছাকাছি (অন্তত লক্ষ্য এটি goal)। সম্পূর্ণ ভিন্নভাবে কিছু করার কোনও বিন্দু আছে তা নিশ্চিত নন। তারা প্রসেসালাল কোড / কার্সার বা বিএলবিএস ডেটা খুব দক্ষতার সাথে পরিচালনা করার পয়েন্টেও পায় নি।


0

আমার মতে এটি বেশিরভাগ এসকিউএল এবং সামগ্রিক ক্যোয়ারীগুলি সম্পন্ন করার কারণেই হয় - সমাপ্ত ফাংশন এবং গোষ্ঠীকরণ ফলাফলগুলি প্রত্যাবর্তনের জন্য বৃহত 2-মাত্রিক রাউসেটে কার্যকর করা হয়। এটি প্রথম থেকেই এটির মতো এবং এটি খুব দ্রুত (বেশিরভাগ নোএসকিউএল সমাধানগুলি সমষ্টি সহ বেশ ধীর এবং জটিল প্রশ্নের পরিবর্তে ডেনরমালাইজড স্কিমা উপর নির্ভর করে)

অবশ্যই পোস্টগ্রাইএসকিউএলে অবজেক্ট-ওরিয়েন্টেড ডাটাবেস থেকে কিছু বৈশিষ্ট্য রয়েছে। এই মেলগুলি ( বার্তা ) অনুসারে আপনি কাস্টম সমষ্টি তৈরি করে যা আপনার প্রয়োজন তা অর্জন করতে পারেন।

ব্যক্তিগতভাবে আমি ডক্ট্রিন ওআরএম (পিএইচপি) এর মতো ফ্রেমওয়ার্কগুলি ব্যবহার করছি যা সম্মিলন অ্যাপ্লিকেশন সাইড করে এবং কর্মক্ষমতা বাড়ানোর জন্য অলস-লোডিংয়ের মতো বৈশিষ্ট্যগুলি সমর্থন করে।


0

পোস্টগ্রিএসকিউএল অ্যারে এবং জেএসওন সহ বিভিন্ন ধরণের কাঠামোগত ডেটা ধরণের সমর্থন করে । এসকিউএল বা এম্বেড হওয়া পদ্ধতিগত ভাষাগুলির একটি ব্যবহার করে, আপনি নির্বিচারে জটিল কাঠামোর সাথে মানগুলি তৈরি করতে এবং সেগুলি আপনার অ্যাপ্লিকেশনটিতে ফিরিয়ে দিতে পারেন। আপনি কাঠামোগত যে কোনওরকমের কলাম সহ টেবিলগুলিও তৈরি করতে পারেন, যদিও আপনি আপনার ডিজাইনের অযৌক্তিকভাবে সংজ্ঞা দিচ্ছেন কিনা তা যত্ন সহকারে বিবেচনা করা উচিত।


1
এটি পূর্বের
gnat

প্রশ্নটি বিশেষত জেএসওএন-এর উল্লেখ করেছে এবং এই উত্তরটি কেবলমাত্র এটিই উল্লেখ করতে পারে যে কমপক্ষে একটি আরডিবিএমএস থেকে জেএসএনকে জিজ্ঞাসা করে ফেরত দেওয়া যেতে পারে। আমি বরং প্রশ্নটিতে মন্তব্য করে বলতে চাই যে এটি একটি মিথ্যা ভিত্তির উপর ভিত্তি করে এবং তাই কোনও নির্দিষ্ট উত্তর আশা করতে পারে না। যাইহোক, স্ট্যাকএক্সচেঞ্জ আমাকে এটি করতে দেয় না।
জোনাথন রজার্স
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.