Exam-ready answer with definition, conversion rules, diagrams, relational tables, examples, and conclusion.
একটি E-R মডেল থেকে কার্ডিনালিটি রেসিও-এর সাহায্যে কিভাবে রিলেশনাল মডেল তৈরি করবে তা উদাহরণসহ ব্যাখ্যা কর।
E-R Model বা Entity-Relationship Model হলো database-এর conceptual design। এতে entity, attribute এবং relationship diagram-এর মাধ্যমে দেখানো হয়। কিন্তু database implement করার জন্য এই E-R Model-কে Relational Model-এ convert করতে হয়।
Relational Model-এ data table আকারে রাখা হয়। তাই E-R Model-এর entity সাধারণত table-এ, attribute column-এ এবং relationship foreign key বা separate relationship table-এ convert হয়।
সহজ ভাষায়: E-R Model হলো database-এর নকশা, আর Relational Model হলো সেই নকশা অনুযায়ী তৈরি করা table structure।
Cardinality Ratio হলো এমন একটি ধারণা যা নির্দেশ করে একটি entity-এর কতগুলি instance অন্য entity-এর কতগুলি instance-এর সঙ্গে যুক্ত হতে পারে।
E-R Model থেকে Relational Model তৈরি করার সময় cardinality ratio খুব গুরুত্বপূর্ণ, কারণ relationship কীভাবে table-এ convert হবে তা cardinality ratio-এর উপর নির্ভর করে।
| Cardinality Ratio | অর্থ | Example |
|---|---|---|
| 1 : 1 | একটি entity instance অন্য entity-এর একটি instance-এর সঙ্গে যুক্ত | Person - Passport |
| 1 : N | একটি entity instance অন্য entity-এর একাধিক instance-এর সঙ্গে যুক্ত | Department - Employee |
| M : N | একাধিক entity instance অন্য entity-এর একাধিক instance-এর সঙ্গে যুক্ত | Student - Course |
E-R Model-কে Relational Model-এ convert করার জন্য কিছু basic rules অনুসরণ করা হয়।
| E-R Model Component | Relational Model Component |
|---|---|
| Entity | Table / Relation |
| Attribute | Column / Field |
| Entity Instance | Row / Tuple |
| Key Attribute | Primary Key |
| Relationship | Foreign Key বা Separate Table |
| Multivalued Attribute | Separate Table |
E-R Model-এর প্রতিটি strong entity-এর জন্য একটি table তৈরি করা হয়। Entity-এর simple attributes table-এর columns হয় এবং key attribute primary key হয়।
Entity: Student
Attributes:
Student_ID, Student_Name, Address, Phone
এর relational table হবে:
Student(Student_ID, Student_Name, Address, Phone)
এখানে Student_ID হলো primary key।
One-to-One relationship-এ একটি entity-এর একটি record অন্য entity-এর একটি record-এর সঙ্গে যুক্ত থাকে।
এই ধরনের relationship convert করার সময় সাধারণত একটি table-এর primary key অন্য table-এ foreign key হিসেবে রাখা হয়। অনেক ক্ষেত্রে দুই entity-এর data এক table-এ merge করাও যায়, যদি design simple হয়।
+----------------+ has +----------------+
| Person | --------------------> | Passport |
+----------------+ +----------------+
| Person_ID | | Passport_ID |
| Person_Name | | Issue_Date |
+----------------+ +----------------+
Person(Person_ID, Person_Name)
Passport(Passport_ID, Issue_Date, Person_ID)
এখানে Person_ID Passport table-এ foreign key হিসেবে রাখা হয়েছে। কারণ একটি passport একজন person-এর সঙ্গে যুক্ত থাকে।
One-to-Many relationship-এ একটি entity-এর একটি record অন্য entity-এর একাধিক record-এর সঙ্গে যুক্ত থাকে।
এই relationship convert করার সময় one side-এর primary key-কে many side-এর table-এ foreign key হিসেবে রাখা হয়।
+----------------+ has +----------------+
| Department | --------------------> | Employee |
+----------------+ +----------------+
| Dept_ID | | Emp_ID |
| Dept_Name | | Emp_Name |
+----------------+ | Salary |
+----------------+
এখানে একটি Department-এ অনেক Employee থাকতে পারে। তাই relationship হলো 1:N।
Department(Dept_ID, Dept_Name)
Employee(Emp_ID, Emp_Name, Salary, Dept_ID)
এখানে Dept_ID Employee table-এ foreign key হিসেবে রাখা হয়েছে। কারণ Employee table হলো many side।
Important Rule: 1:N relationship-এর ক্ষেত্রে foreign key সবসময় many side-এর table-এ বসে।
Many-to-Many relationship-এ একটি entity-এর একাধিক record অন্য entity-এর একাধিক record-এর সঙ্গে যুক্ত থাকে।
এই relationship সরাসরি দুই table-এর মধ্যে foreign key দিয়ে handle করা যায় না। তাই একটি separate table বা junction table তৈরি করা হয়।
+----------------+ enrolls in +----------------+
| Student | -----------------------> | Course |
+----------------+ +----------------+
| Student_ID | | Course_ID |
| Student_Name | | Course_Name |
+----------------+ +----------------+
এখানে একজন Student একাধিক Course নিতে পারে এবং একটি Course-এ অনেক Student ভর্তি হতে পারে। তাই relationship হলো M:N।
Student(Student_ID, Student_Name)
Course(Course_ID, Course_Name)
Enrollment(Student_ID, Course_ID, Enrollment_Date)
এখানে Enrollment হলো junction table। এই table-এ Student_ID এবং Course_ID foreign key হিসেবে থাকবে। এই দুইটি attribute একসঙ্গে composite primary key হিসেবেও ব্যবহার করা যেতে পারে।
Important Rule: M:N relationship-এর ক্ষেত্রে অবশ্যই একটি separate relationship table তৈরি করা হয়।
অনেক সময় relationship-এর নিজস্ব attribute থাকে। যেমন Student এবং Course-এর মধ্যে Enrollment relationship-এর attribute হতে পারে Enrollment_Date, Grade বা Semester।
এই ধরনের attribute relationship table-এর মধ্যে রাখা হয়।
Student(Student_ID, Student_Name)
Course(Course_ID, Course_Name)
Enrollment(Student_ID, Course_ID, Enrollment_Date, Grade, Semester)
এখানে Enrollment_Date, Grade এবং Semester relationship attribute হিসেবে Enrollment table-এ রাখা হয়েছে।
Weak Entity হলো এমন entity যার নিজস্ব complete primary key থাকে না এবং এটি অন্য strong entity-এর উপর নির্ভর করে।
Weak entity convert করার সময় strong entity-এর primary key weak entity table-এ foreign key হিসেবে যুক্ত করা হয়। Weak entity-এর partial key এবং strong entity-এর primary key মিলে primary key তৈরি করতে পারে।
Employee has Dependent
Employee(Emp_ID, Emp_Name)
Dependent(Dependent_Name, Age, Relation)
Employee(Emp_ID, Emp_Name)
Dependent(Emp_ID, Dependent_Name, Age, Relation)
এখানে Emp_ID weak entity Dependent table-এ foreign key হিসেবে রাখা হয়েছে। Emp_ID এবং Dependent_Name একসঙ্গে composite primary key হতে পারে।
এখন একটি complete example দেখা যাক। ধরা যাক, একটি education system-এ Student, Course এবং Department entity আছে।
+----------------+ has +----------------+
| Department | --------------------> | Course |
+----------------+ +----------------+
| Dept_ID | | Course_ID |
| Dept_Name | | Course_Name |
+----------------+ +----------------+
+----------------+ enrolls in +----------------+
| Student | --------------------> | Course |
+----------------+ +----------------+
| Student_ID | | Course_ID |
| Student_Name | | Course_Name |
+----------------+ +----------------+
| Relationship | Cardinality | Conversion Rule |
|---|---|---|
| Department has Course | 1 : N | Dept_ID foreign key Course table-এ যাবে |
| Student enrolls in Course | M : N | Enrollment নামে separate table তৈরি হবে |
Department(Dept_ID, Dept_Name)
Course(Course_ID, Course_Name, Dept_ID)
Student(Student_ID, Student_Name)
Enrollment(Student_ID, Course_ID, Enrollment_Date)
এখানে Course table-এ Dept_ID foreign key হিসেবে আছে, কারণ Department এবং Course-এর relationship 1:N। আবার Student এবং Course-এর M:N relationship handle করার জন্য Enrollment table তৈরি করা হয়েছে।
| Cardinality Ratio | Conversion Rule | Example |
|---|---|---|
| 1 : 1 | এক table-এর primary key অন্য table-এ foreign key হিসেবে রাখা যায় | Person - Passport |
| 1 : N | One side-এর primary key many side-এ foreign key হিসেবে রাখা হয় | Department - Employee |
| M : N | Separate junction table তৈরি করা হয় | Student - Course |
| Weak Entity | Owner entity-এর primary key weak entity table-এ foreign key হিসেবে যুক্ত হয় | Employee - Dependent |
| Relationship Attribute | Relationship table-এর column হিসেবে রাখা হয় | Enrollment_Date, Grade |
সুতরাং, E-R Model থেকে Relational Model তৈরি করার সময় cardinality ratio অত্যন্ত গুরুত্বপূর্ণ ভূমিকা পালন করে। Cardinality ratio দেখে বোঝা যায় relationship 1:1, 1:N নাকি M:N হবে এবং সেই অনুযায়ী foreign key বা separate relationship table তৈরি করা হয়।
1:N relationship-এর ক্ষেত্রে foreign key many side-এ রাখা হয় এবং M:N relationship-এর ক্ষেত্রে separate junction table তৈরি করা হয়। এইভাবে cardinality ratio-এর সাহায্যে একটি clear, systematic এবং implementable relational model তৈরি করা যায়।