আজকে আমাদের আলোচনার বিষয় – রিলেশনাল অ্যালজেবরার মৌলিক অপারেশন বর্ণনা যা অধ্যায়-৪ এর ডাটাবেস ম্যানেজমেন্ট সিস্টেম এ অন্তর্ভুক্ত। এটি চার বছর মেয়াদি কোর্সের আলোকে লেখা হয়েছে। ডাটাবেস ম্যানেজমেন্ট সিস্টেমের বিভিন্ন ইংরেজি বই অনুসরণ করেই রচনা করা হয়েছে। ইঞ্জিনিয়ারিং বিষয়ের যে-কোন বই সম্পূর্ণরূপে বাংলা ভাষায় রচনা করা সম্ভব নয়। এজন্যে কিছু কিছু ইংরেজি শব্দকে বাংলায় অনুবাদ করা হয়নি। ফলে ছাত্রছাত্রীদের হয়ত কিছুটা অসুবিধা হতে পারে।
রিলেশনাল অ্যালজেবরার মৌলিক অপারেশন বর্ণনা
রিলেশনাল অ্যালজেবরার মৌলিক অপারেশন বর্ণনা
রিলেশনাল অ্যালজেবরা হল প্রসিডিউরাল কুয়েরি ল্যাংগুয়েজ (Procedural query language)। এটি একসেট অপারেশনের সমন্বয়ে গঠিত। এ অপারেশনসমূহ এক অথবা দুইটি রিলেশনকে ইনপুট হিসাবে গ্রহণ করে থাকে এবং একটি নতুন রিলেশনকে
ফলাফল হিসাবে আউটপুট দিয়ে থাকে। রিলেশনাল অ্যালজেবরার ফান্ডামেন্টাল (Fundamental) অপারেশনগুলো হল-Select. Project, Union, Set difference, Cartesian product এবং rename। এ সমস্ত মৌলিক (Fundamental) অপারেশন (Operation) এর সাথে অন্যান্য আরো যে সমস্ত অপারেশন রিলেশনাল অ্যালজেব্রায় ব্যবহৃত হয়, তাদের নাম হল- Set intersection, Natural join, Division এবং Assignment
রিলেশনাল অ্যালজেবরার মৌলিক অপারেশন (Fundamental operations of relational algebra)
রিলেশনাল অ্যালজেবরার ক্ষেত্রে Select, Project ও Rename অপারেশনগুলোকে ইউনারী (Unary) অপারেশন বলা হয়। কারণ তারা মাত্র একটি রিলেশনের উপরে অপারেট (Operate) হয়ে থাকে। এছাড়া অন্যান্য তিনটি অপারেশন যেমন- Union, Set difference, Cartesion product কে বলা হয় বাইনারি (bionary) অপারেশন। কারণ তারা জোড়া রিলেশন এর উপর অপারেট হয়ে থাকে।
১। ইউনারি অপারেশনঃ
সিলেক্ট (Select) অপারেশন: Select অপারেশনকে ছোট হাতের গ্রীক অক্ষর সিগমা (৫) দ্বারা ডিনোট (Denote) করা হয়। কোন একটি এক্সপ্রেশনের প্রেডিকেইটে প্রদত্ত শর্তকে সমর্থন করে এমন একটি টুপলকে (Tuple) নির্বাচন (Select) করার ক্ষেত্রে Select অপারেশনটি ব্যবহৃত হয়। ঐ প্রেডিকেইট (Predicate) কে সিগমা (৫) এর সাবস্ক্রীপ্ট (Subscript) হিসাবে ব্যবহার করা হয়ে থাকে। এতে আর্গুমেন্ট (Argument relation) রিলেশনকে সিগমা (৫) এর পরে বন্ধনীর মধ্যে দেয়া হয়। যেমন- অ্যাকাউন্ট রিলেশন (Account relation) হতে Mirpur branch এর Account number-সমূহ নির্বাচন (Select) করার জন্য এক্সপ্রেশনটি হবে।
σ (account)
Branch-name = Mirpur
এ এক্সপ্রেশনটি Mirpur branch এর সকল অ্যাকাউন্ট নম্বরের তালিকা দেখাবে। যদি চিত্র নং ৮.২.১ এর উপর এক্সপ্রেশনটি নির্বাহ করা হয়, তবে যে ফলাফল পাওয়া যাবে তাহা নিম্নে দেখানো হল।
branch-name | account-name | balance |
Mirpur | A-400 | 500 |
Mirpur | A-500 | 800 |
Mirpur | A-100 | 700 |
চিত্রঃ Select operation এর ফলাফল
অপরদিকে কোন account relation এর সমস্ত টুপল (tuple) হতে শুধুমাত্র 1200 টাকার নিচের balance দেখানোর জন্যে নিম্নের এক্সপ্রেশনটি লিখলেই হবেঃ
এক্সপ্রেশন- σ (Account)
Balance > 1200
প্রজেক্ট অপারেশন (Project operation): প্রজেক্ট (project) অপারেশনকে গ্রীক অক্ষর পাই স দ্বারা ডিনোট (denote) করা হয়। যদি কোন রিলেশন বা টেবিল হতে কোন অ্যাট্রিবিউটকে বাদ দিয়ে প্রয়োজনীয় অন্যান্য অ্যাট্রিবিউটকে প্রদর্শন করার প্রয়োজন হয়, তখন প্রজেশন অপারেশনটি ব্যবহার করা হয়। অর্থাৎ এতে ইচ্ছামাফিক অ্যাট্রিবিউট নির্বাচন বা বর্জন করা যায়। যেমন- ৪.২ নং চিত্র হতে যদি Branch-name কে পরিহার করে শুধুমাত্র Account-number ও Balance কে কোন টেবিলে প্রডিউস (Produce) করতে চাই, তবে যে এক্সপ্রেশনটি লিখতে হবে, তা হলঃ
π (account)
account number, balance
উল্লেখ্য, যে সমস্ত তথ্য প্রডিউস করতে হবে তাদেরকে এর সাবস্ক্রিপট হিসাবে লিখতে হবে এবং আর্গুমেন্ট রিলেশনকে বন্ধনীর মধ্যে লিখতে হবে, যা উপরে দেখানো হয়েছে। উপরোক্ত এক্সপ্রেশনটির ফলাফল চিত্র নং ৮.১.১ অনুসারে নিম্নের চিত্র প্রদত্ত হল:
account number | balance |
A-100 | 5000 |
A-200 | 4000 |
A-505 | 3000 |
A-250 | 1000 |
A-300 | 2000 |
A-310 | 700 |
A-400 | 800 |
চিত্রঃ অ্যাকাউন্ট নম্বর ও ব্যালেন্স
রিনেম অপারেশন (Rename operation) : রিলেশনাল ডাটা মডেলে প্রতিটি রিলেশনের একটি নাম থাকে। কিন্তু রিলেশনা
অ্যালজেবরা এক্সপ্রেশনের কোন নাম থাকে না অথবা কোন নাম দেয়ার ব্যবস্থা নেই। অথচ তাদের একটি নাম থাকা বা নাম দেয়ার ব্যবস্থা থাকা দরকার। রিনেম অপারেশন এর সাহায্যে এ কাজটি সম্পন্ন করা হয়ে থাকে। রিনেম অপারেশনকে (rename operation ছোট হাতের গ্রীক অক্ষর রো (p) দ্বারা ডিনোট করা হয়। উদাহরণস্বরূপ, যদি E একটি রিলেশনাল অ্যালজেবরা এক্সপ্রেশন হয়, তদে তাকে নিম্নলিখিতভাবে প্রকাশ করা যায়-
Px (E)
এ এক্সপ্রেশনটি x নামে E এক্সপ্রেশনের ফলাফল প্রদান করবে।
রিনেম অপারেশনকে নানাভাবে প্রকাশ করা যেতে পারে। যেমন- E যদি n সংখ্যক অ্যাট্রিবিউটযুক্ত একটি রিলেশনাল অ্যালজেবরা হয়, তবে-
Px (A1, A2, An) (E)
এক্সপ্রেশনটি অ্যাট্রিবিউট, সমূহকে A1, A2, An তে রিনেম করেx নামের অধীনে E এক্সপ্রেশনের ফলাফল প্রদান করবে। এখন যদি রিনেম অপারেশন ব্যবহার করে কোন ব্যাংকের রিলেশনাল ডাটাবেস হতে সর্বোচ্চ ব্যালেন্স টুপলকে বের করার জন্যে কুয়েরি এক্সপ্রেশন রচনা করা হয়, তবে তার চূড়ান্ত অবস্থানটি নিম্নরূপ হবে-
π (account)
balance
π account, balance (σ account, balance <d. balance account x p <p (account))
এ এক্সপ্রেশনটি যদি নিম্নের টেবিলের উপর নির্বাহ করা হয়, তবে যে ফলাফল পাওয়া যাবে, তা ৮.৩.৭ নং চিত্রে উল্লেখ করা হলঃ
branch-name | account-number | balance |
Mirpur | A-100 | 500 |
Uttara | A-200 | 1000 |
Tejgaon | A-500 | 3000 |
Dhanmondi | A-300 | 4005 |
Farmgate | A-400 | 5000 |
চিত্র: ৪.৩ দি অ্যাকাউন্ট টেবিল
balance
5000
চিত্র: অ্যাকাউন্ট টেবিলের উপর রিনেম অপারেশন কুয়েরি নির্বাহের ফল
২। বাইনারি অপারেশন: বইনারি অপারেশনের অধীনে যে সমস্ত অপারেশন রয়েছে তা হলঃ
ইউনিয়ন অপারেশন (Union operation) : ইউনিয়ন অপারেশনকে মূলতঃ দুইটি রিলেশনের মধ্যে কুয়েরি ডিজাইনের ক্ষেত্রে ব্যবহার করা হয়। এজন্যে একে বাইনারি অপারেশন বলা হয়। একে সেট থিওরীর U চিহ্ন বা প্রতীক (symbol) দ্বারা ডিনোট করা হয়ে থাকে। যখন দুইটি টেবিলের ইনফরমেশন প্রয়োজন অনুযায়ী প্রদর্শন করার দরকার হয়, তখনই ইউনিয়ন অপারেশন দ্বারা তাদেরকে একত্রিত করা হয়। উদাহরণস্বরূপ, যে সমস্ত কাস্টমার ব্যাংক হতে লোন উত্তোলন করেছে, তাদের নাম এবং যে সমস্ত কাস্টমার ব্যাংকে টাকা জমা রেখেছে, তাদের নাম প্রডিউস করার জন্যে কুয়েরি ডিজাইনের কথা ধরা যায়।
এ কুয়েরি ডিজাইন করতে হলে ডিপোজিটর (depositor) ও বরোয়ার (borrower) রিলেশন ব্যবহার করতে হবে। কারণ সমস্ত কাস্টমারের নাম কোন একটি মাত্র রিলেশনে পাওয়া সম্ভব নয়। সুতরাং এ জন্যে যে কুয়েরিটি ডিজাইন করতে হবে, তা নিম্নে দেয়া হল-
π (borrower) Uπ (depositor)
customer-name customer-name
এ কুয়েরিতে দেখা যাচ্ছে যে, ইউনিয়ন অপারেশন “EU” এর মাধ্যমে দুইটি রিলেশনকে একত্রিত করা হয়েছে। নিম্নে ডিপোজিটর রিলেশন, বরোয়ার রিলেশন এবং এ দুইটি রিলেশনের মধ্যে উপরোক্ত কুয়েরি নির্বাহ করলে যে ফলাফল পাওয়া যাবে, তা চিত্রের মাধ্যমে দেখানো হল :
customer name | account number |
Jasim | A-100 |
Yaseen | A-102 |
Kalam | A-105 |
Kader | A-205 |
Zafar | A-308 |
Alam | A-209 |
চিত্র: ডিপোজিটর রিলেশন
customer name | loan number |
Joly | L-17 |
Poly | L-17 |
Mintu | L-109 |
Alam | L-50 |
Zafar | L-100 |
চিত্র: বরোয়ার রিলেশন
customer name |
Jasim |
Yaseen |
Kalam |
Kader |
Zafar |
Alam |
Joly |
Poly |
Mintu |
চিত্র: ঐ সমস্ত কাস্টমারের নাম, যারা টাকা জমা রেখেছে বা লোন নিয়েছে অথবা উভয়ই
সেট ডিফারেন্স অপারেশন (Set difference operations): সেট ডিফারেন্স অপারেশনকে “-“. চিহ্ন দ্বারা ডিনোট (denote) করা হয়। এটি একটি বাইনারি অপারেশন। এ অপারেশনের সাহায্যে আমরা এমন সব টুপল (tuple) কে খুঁজে বের করতে পারি যারা একটি রিলেশনে আছে কিন্তু অন্য রিলেশনে নাই। যেমন r-s এক্সপ্রেশন এর অর্থ হল এটি সে টুপলগুলোকে বের করবে, যারা। নামক রিলেশনে আছে কিন্তু নামক রিলেশনে নাই। উদাহরণস্বরূপ বলা যায় যে, এমন একটি কুয়েরি ডিজাইন করতে হবে, যা ঐ সমস্ত কাস্টমারের নাম করে করবে, যাদের নাম ডিপোজিটর রিলেশনে আছে কিন্তু বরোয়ার রিলেশনে নাই। এ কুয়েরিটি হবে নিম্নরূপঃ
π (depositor)-π (borrower)
customer-name customer-name
উপরোক্ত এ কুয়েরিটি চিত্র এর উপর নির্বাহ করলে নিম্নের ফলাফল পাওয়া যাবেঃ
customer-name |
Jasim |
Yaseen |
Kalam |
Kader |
চিত্র ৪.৮ যারা শুধু টাকা জমা রেখেছে কিন্তু লোন নেয়নি, তাদের নাম
কার্তেসীয় প্রোডাক্ট অপারেশন (Cartesian product operation) : কার্তেসীয় প্রোডাক্টকে ক্রস (x) চিহ্ন দ্বারা প্রকাশ করা হয়। এটি একটি বাইনারি অপারেশন। কারণ এটি দুইটি রিলেশনের ওপর কাজ করে থাকে। অর্থাৎ এর সাহায্যে দুইটি রিলেশন হতে প্রাপ্ত ইনফরমেশনকে যুক্ত করা যায়। আমরা । ওr₂ রিলেশনের মধ্যে কার্তেনীয় প্রোডাক্ট বুঝানোর জন্যে। ×1₂ আকারে লিখে থাকি। রিলেশনাল ডাটাবেসে এর ব্যবহার ব্যাপক।
মনে করি Dhanmondi; branch-এ যে সমস্ত কাস্টমারের লোন (loan) আছে, তাদের নাম প্রদর্শন করার জন্যে একটি কুয়েরি লিখতে হবে। তাহলে দেখা যাচ্ছে যে, এখানে লোন ও বরোয়ার নামক উভয় রিলেশনই ব্যবহার করতে হবে। সুতরাং কুয়েরিটি হবে নিম্নরূপঃ
σ (borrower x loan)
branch-name = “Dhanmondi”
যদি এ কুয়েরিটি নির্বাহ করা হয় ধানমন্ডি ব্রাঞ্চ হতে যে সমস্ত কাস্টমার লোন নিয়েছে তাদের নাম প্রডিউস হবে।
আরও দেখুনঃ