Relational Algebra and SQL Commands
Exam-ready answer based on Supplier, Parts, and Catalog schema with relational algebra and equivalent SQL queries.
Question 14
প্রশ্ন
নিচের স্কিমাগুলি বিবেচনা কর:
Supplier(sid, sname, address)
Parts(pid, pname, color)
Catalog(sid, pid, cost)
উপরের স্কিমা টি বিবেচনা করে নিচের প্রশ্নগুলির জন্য রিলেশনাল অ্যালজেবরা এবং তার সমতুল্য
SQL কমান্ডগুলি লেখ।
- রেড কালারের পার্টস যে সমস্ত সাপ্লায়ার সাপ্লাই করেছে তাদের নাম বের কর।
- যে সমস্ত সাপ্লায়ার রেড অথবা গ্রীন কালারের পার্টস সাপ্লাই করেছে তাদের sid বের কর।
Answer: Relational Algebra and Equivalent SQL
Schema Explanation
এখানে তিনটি relation দেওয়া আছে:
| Relation |
Attributes |
Meaning |
| Supplier |
sid, sname, address |
Supplier-এর ID, নাম এবং address সংরক্ষণ করে। |
| Parts |
pid, pname, color |
Part-এর ID, নাম এবং color সংরক্ষণ করে। |
| Catalog |
sid, pid, cost |
কোন supplier কোন part supply করছে এবং তার cost সংরক্ষণ করে। |
Important: Supplier এবং Parts relation সরাসরি connected নয়।
এদের মধ্যে connection তৈরি হয়েছে Catalog relation-এর মাধ্যমে।
Relationship Between Tables
Supplier.sid = Catalog.sid
Parts.pid = Catalog.pid
অর্থাৎ কোনো supplier কোন part supply করছে তা জানতে হলে Supplier, Catalog এবং Parts — এই তিনটি relation join করতে হবে।
Sub-question 1
রেড কালারের পার্টস যে সমস্ত সাপ্লায়ার সাপ্লাই করেছে তাদের নাম বের কর।
Explanation
এখানে আমাদের সেই সমস্ত supplier-এর নাম বের করতে হবে যারা red color-এর parts supply করেছে।
তাই আমাদের করতে হবে:
- Parts table থেকে red color-এর parts select করতে হবে।
- তারপর Parts table-কে Catalog table-এর সঙ্গে pid দিয়ে join করতে হবে।
- তারপর Catalog table-কে Supplier table-এর সঙ্গে sid দিয়ে join করতে হবে।
- শেষে supplier-এর নাম অর্থাৎ sname project করতে হবে।
Relational Algebra
π sname (
Supplier ⨝ Supplier.sid = Catalog.sid
(
Catalog ⨝ Catalog.pid = Parts.pid
(σ color = 'red' (Parts))
)
)
এখানে:
- σ color = 'red' (Parts) red color-এর parts select করছে।
- Catalog ⨝ Parts কোন supplier red part supply করেছে তা বের করছে।
- Supplier ⨝ Catalog supplier-এর details আনছে।
- π sname শুধুমাত্র supplier-এর নাম দেখাচ্ছে।
Equivalent SQL Command
SELECT DISTINCT S.sname
FROM Supplier AS S
JOIN Catalog AS C
ON S.sid = C.sid
JOIN Parts AS P
ON C.pid = P.pid
WHERE P.color = 'red';
এখানে DISTINCT ব্যবহার করা হয়েছে যাতে একই supplier একাধিক red part supply করলেও
তার নাম একবারই দেখায়।
Expected Output Format
| sname |
| Supplier Name 1 |
| Supplier Name 2 |
Actual output database-এর data-এর উপর depend করবে।
Sub-question 2
যে সমস্ত সাপ্লায়ার রেড অথবা গ্রীন কালারের পার্টস সাপ্লাই করেছে তাদের sid বের কর।
Explanation
এখানে আমাদের সেই supplier ID বা sid বের করতে হবে যারা
red অথবা green color-এর parts supply করেছে।
তাই Parts table থেকে red অথবা green color-এর parts select করে Catalog table-এর সঙ্গে join করতে হবে।
তারপর Catalog relation থেকে supplier ID অর্থাৎ sid project করতে হবে।
Relational Algebra
π sid (
Catalog ⨝ Catalog.pid = Parts.pid
(σ color = 'red' OR color = 'green' (Parts))
)
এখানে:
- σ color = 'red' OR color = 'green' (Parts) red অথবা green color-এর parts select করছে।
- Catalog ⨝ Parts supplier এবং part-এর relationship বের করছে।
- π sid supplier ID দেখাচ্ছে।
Alternative Relational Algebra Using Union
একই উত্তর Union operation ব্যবহার করেও লেখা যায়:
π sid (
Catalog ⨝ Catalog.pid = Parts.pid
(σ color = 'red' (Parts))
)
∪
π sid (
Catalog ⨝ Catalog.pid = Parts.pid
(σ color = 'green' (Parts))
)
এখানে প্রথম অংশ red parts-এর supplier sid বের করছে এবং দ্বিতীয় অংশ green parts-এর supplier sid বের করছে।
এরপর union করে final result পাওয়া যাচ্ছে।
Equivalent SQL Command
SELECT DISTINCT C.sid
FROM Catalog AS C
JOIN Parts AS P
ON C.pid = P.pid
WHERE P.color = 'red'
OR P.color = 'green';
একই query IN operator ব্যবহার করে আরও সহজভাবে লেখা যায়:
SELECT DISTINCT C.sid
FROM Catalog AS C
JOIN Parts AS P
ON C.pid = P.pid
WHERE P.color IN ('red', 'green');
এখানে IN ('red', 'green') condition দ্বারা red অথবা green color-এর parts select করা হয়েছে।
Expected Output Format
| sid |
| Supplier ID 1 |
| Supplier ID 2 |
Actual sid values database-এর data-এর উপর depend করবে।
DISTINCT কেন ব্যবহার করা হয়েছে?
যদি কোনো supplier একাধিক red বা green part supply করে, তাহলে join করার ফলে একই supplier-এর sid বা sname
result-এ একাধিকবার আসতে পারে।
এই duplicate records remove করার জন্য SQL query-তে DISTINCT ব্যবহার করা হয়েছে।
Exam Point: Relational Algebra set-based হওয়ায় duplicate automatically remove হয়,
কিন্তু SQL-এ duplicate remove করতে DISTINCT ব্যবহার করা ভালো।
Final Answer Summary
| Question |
Relational Algebra |
SQL Command |
| Red parts supply করা suppliers-এর name |
π sname (Supplier ⨝ Catalog ⨝ σ color='red'(Parts)) |
JOIN Supplier, Catalog, Parts WHERE color='red' |
| Red অথবা Green parts supply করা suppliers-এর sid |
π sid (Catalog ⨝ σ color='red' OR color='green'(Parts)) |
JOIN Catalog, Parts WHERE color IN ('red','green') |
Exam Writing Tips
- প্রথমে schema পরিষ্কারভাবে লিখবে।
- Supplier এবং Parts directly connected নয় — Catalog-এর মাধ্যমে connected — এই point বুঝে query লিখবে।
- Relational Algebra-তে selection আগে করলে answer বেশি clean হয়।
- Projection শেষে লিখবে, কারণ final output-এ কী চাই তা শেষে নির্ধারণ করা হয়।
- SQL-এ proper JOIN condition অবশ্যই লিখবে।
- Duplicate avoid করার জন্য SQL-এ DISTINCT ব্যবহার করবে।
উপসংহার
সুতরাং, Supplier, Parts এবং Catalog schema-তে supplier এবং parts-এর মধ্যে relationship Catalog relation-এর
মাধ্যমে তৈরি হয়েছে। তাই red বা green color-এর parts supply করা supplier খুঁজতে হলে Parts relation থেকে
color condition apply করে Catalog এবং Supplier relation-এর সঙ্গে join করতে হয়।
Relational Algebra query database operation-এর mathematical representation দেয় এবং SQL command একই কাজ
practical database system-এ execute করার জন্য ব্যবহার করা হয়।
Quick Revision Points
- Supplier table supplier details store করে।
- Parts table part details store করে।
- Catalog table supplier এবং parts-এর relationship store করে।
- Red part suppliers-এর name পেতে Supplier, Catalog এবং Parts join করতে হবে।
- Red বা Green part suppliers-এর sid পেতে Catalog এবং Parts join করলেই যথেষ্ট।
- SQL query-তে duplicate avoid করতে DISTINCT ব্যবহার করা হয়।