Entity Relationship Mapping (ERM) হল একটি গুরুত্বপূর্ণ ধারণা যা Java Persistence API (JPA)-তে ডাটাবেস টেবিলের মধ্যে সম্পর্ককে মডেল করে। এটি জাভা অবজেক্ট এবং ডাটাবেস টেবিলের মধ্যে সম্পর্ক স্থাপন করে, যেমন One-to-One, One-to-Many, Many-to-One, এবং Many-to-Many সম্পর্ক।
Spring Boot JPA এর মাধ্যমে, আমরা JPA অ্যানোটেশন ব্যবহার করে এই সম্পর্কগুলো মডেল করতে পারি। এই সম্পর্কগুলো ডাটাবেসের টেবিলগুলির মধ্যে অবজেক্টের মধ্যকার সম্পর্ক নির্দেশ করে এবং Spring Boot JPA সহজেই এই সম্পর্কগুলো ম্যানেজ করতে সহায়তা করে।
Entity Relationship Mapping: বিভিন্ন সম্পর্ক
1. One-to-One Relationship
One-to-One সম্পর্ক হল এমন একটি সম্পর্ক যেখানে একটি Entity অন্য একটি Entity এর সাথে একে অপরের সাথে সম্পর্কিত থাকে। এক Entity-এর একটি রেকর্ড অন্য Entity-এর একটি রেকর্ডের সাথে সম্পর্কিত।
উদাহরণ: One-to-One Relationship
ধরা যাক, একটি Person Entity এবং একটি Passport Entity রয়েছে, যেখানে একজন ব্যক্তির একটি Passport রয়েছে।
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.OneToOne;
@Entity
public class Person {
@Id
private Long id;
private String name;
@OneToOne
private Passport passport;
// Getter এবং Setter
}
import javax.persistence.Entity;
import javax.persistence.Id;
@Entity
public class Passport {
@Id
private Long id;
private String passportNumber;
// Getter এবং Setter
}
এখানে, Person Entity-এর passport প্রপার্টি একটি One-to-One সম্পর্ক নির্দেশ করছে যেখানে একটি Person এর একটি Passport থাকে।
2. One-to-Many Relationship
One-to-Many সম্পর্ক হল এমন একটি সম্পর্ক যেখানে একটি Entity একাধিক Entity-র সাথে সম্পর্কিত থাকে। সাধারণত, এক Entity এর একটি রেকর্ড অন্য Entity এর অনেক রেকর্ডের সাথে সম্পর্কিত।
উদাহরণ: One-to-Many Relationship
ধরা যাক, একটি Department Entity এবং একটি Employee Entity রয়েছে, যেখানে একটি Department অনেক Employee কে ধারণ করে।
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.OneToMany;
@Entity
public class Department {
@Id
private Long id;
private String name;
@OneToMany(mappedBy = "department")
private List<Employee> employees;
// Getter এবং Setter
}
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.ManyToOne;
@Entity
public class Employee {
@Id
private Long id;
private String name;
@ManyToOne
private Department department;
// Getter এবং Setter
}
এখানে, Department Entity-তে One-to-Many সম্পর্ক ব্যবহার করা হয়েছে, যেখানে একটি Department অনেক Employee কে ধারণ করে।
3. Many-to-One Relationship
Many-to-One সম্পর্ক হল এমন একটি সম্পর্ক যেখানে অনেক Entity একটি Entity এর সাথে সম্পর্কিত থাকে। অর্থাৎ, একাধিক রেকর্ড একক রেকর্ডের সাথে সম্পর্কিত থাকে।
উদাহরণ: Many-to-One Relationship
উপরের Employee এবং Department সম্পর্কের উল্টো, Many-to-One সম্পর্ক নির্দেশ করার জন্য Employee Entity তে @ManyToOne অ্যানোটেশন ব্যবহার করা হয়েছে, এবং Department Entity তে @OneToMany অ্যানোটেশন ব্যবহার করা হয়েছে।
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.ManyToOne;
@Entity
public class Employee {
@Id
private Long id;
private String name;
@ManyToOne
private Department department;
// Getter এবং Setter
}
এখানে, Employee Entity-তে Many-to-One সম্পর্ক ব্যবহার করা হয়েছে, যেখানে একাধিক Employee একটি Department এর সাথে সম্পর্কিত।
4. Many-to-Many Relationship
Many-to-Many সম্পর্ক হল এমন একটি সম্পর্ক যেখানে একাধিক Entity একাধিক Entity-র সাথে সম্পর্কিত থাকে। একটি Entity-এর একাধিক রেকর্ড অন্য Entity-এর একাধিক রেকর্ডের সাথে সম্পর্কিত।
উদাহরণ: Many-to-Many Relationship
ধরা যাক, একটি Student Entity এবং একটি Course Entity রয়েছে, যেখানে একটি Student একাধিক Course এ ভর্তি হতে পারে এবং একটি Course-এ একাধিক Student থাকতে পারে।
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.ManyToMany;
@Entity
public class Student {
@Id
private Long id;
private String name;
@ManyToMany(mappedBy = "students")
private List<Course> courses;
// Getter এবং Setter
}
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.ManyToMany;
@Entity
public class Course {
@Id
private Long id;
private String courseName;
@ManyToMany
private List<Student> students;
// Getter এবং Setter
}
এখানে, Student এবং Course Entity-তে Many-to-Many সম্পর্ক ব্যবহার করা হয়েছে, যেখানে একটি Student একাধিক Course তে ভর্তি হতে পারে এবং একটি Course তে একাধিক Student থাকতে পারে।
@JoinColumn এবং @JoinTable অ্যানোটেশন
@JoinColumn এবং @JoinTable অ্যানোটেশন ব্যবহার করা হয় জটিল সম্পর্কগুলির মধ্যে ডাটাবেস টেবিলের কলাম সম্পর্কিত করার জন্য।
- @JoinColumn: এটি সাধারণত Many-to-One এবং One-to-One সম্পর্কের ক্ষেত্রে ব্যবহৃত হয়, যেখানে দুইটি Entity একে অপরের সাথে সম্পর্কিত থাকে।
- @JoinTable: এটি Many-to-Many সম্পর্কের ক্ষেত্রে ব্যবহৃত হয়, যেখানে একটি অ্যাসোসিয়েটিং টেবিল তৈরি করা হয়, যা দুইটি Entity এর মধ্যে সম্পর্ক স্থাপন করে।
উদাহরণ: @JoinColumn ব্যবহার করা (Many-to-One)
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
@Entity
public class Employee {
@Id
private Long id;
private String name;
@ManyToOne
@JoinColumn(name = "department_id")
private Department department;
// Getter এবং Setter
}
এখানে, @JoinColumn(name = "department_id") ব্যবহার করা হয়েছে, যা Employee টেবিলের মধ্যে department_id কলামটি নির্ধারণ করে।
উদাহরণ: @JoinTable ব্যবহার করা (Many-to-Many)
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.JoinTable;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToMany;
@Entity
public class Student {
@Id
private Long id;
private String name;
@ManyToMany
@JoinTable(
name = "student_course",
joinColumns = @JoinColumn(name = "student_id"),
inverseJoinColumns = @JoinColumn(name = "course_id")
)
private List<Course> courses;
// Getter এবং Setter
}
এখানে, @JoinTable ব্যবহার করা হয়েছে একটি student_course টেবিল তৈরি করার জন্য, যা Student এবং Course Entity এর মধ্যে সম্পর্ক স্থাপন করে।
Conclusion
Entity Relationship Mapping (ERM) Spring Boot JPA-তে একটি গুরুত্বপূর্ণ ধারণা, যা ডাটাবেসের মধ্যে সম্পর্কিত টেবিলের মধ্যে অবজেক্টের সম্পর্ক স্থাপন করতে সহায়তা করে। @Entity, @Table, @Id, @Column, @OneToOne, @OneToMany, @ManyToOne, এবং @ManyToMany অ্যানোটেশনগুলি ব্যবহৃত হয় Spring Boot JPA-তে Entity সম্পর্ক নির্ধারণ করতে।
এই অ্যানোটেশনগুলির মাধ্যমে JPA ডাটাবেসের টেবিলগুলির মধ্যে সম্পর্ক স্থাপন করা যায় এবং ডাটাবেস অপারেশনগুলি আরও সহজ, পরিষ্কার এবং কার্যকরী হয়।
Read more