JPA (Java Persistence API) এ Inheritance Mapping এর মাধ্যমে একটি Superclass এবং তার Subclass গুলির মধ্যে সম্পর্ক প্রতিষ্ঠিত হয়। JPA বিভিন্ন ধরনের ইনহেরিটেন্স স্ট্রাটেজি সমর্থন করে, যার মধ্যে অন্যতম Joined Strategy এবং Table-per-Class Strategy। এগুলি ডেটাবেসে ইনহেরিটেন্স সম্পর্কিত ডেটা কীভাবে সংরক্ষিত হবে তা নির্ধারণ করে।
1. Joined Strategy
Joined Strategy (বা Joined Table Inheritance) হল একটি ইনহেরিটেন্স স্ট্রাটেজি যেখানে সুপারক্লাসের জন্য একটি টেবিল এবং প্রতিটি সাবক্লাসের জন্য পৃথক টেবিল তৈরি হয়। তবে, এই টেবিলগুলির মধ্যে একটি সম্পর্ক থাকে, অর্থাৎ সাবক্লাসের টেবিল সুপারক্লাসের টেবিলের সাথে join করা হয়। প্রতিটি টেবিল শুধুমাত্র তার নিজস্ব ক্ষেত্রগুলো ধারণ করে, এবং সব টেবিলের মধ্যে একটি সাধারণ সম্পর্ক থাকে।
Joined Strategy এর বৈশিষ্ট্য:
- ডেটাবেসে সম্পর্ক: একটি সুপারক্লাস এবং তার সাবক্লাসের মধ্যে সম্পর্ক join করা হয়।
- ফিল্ডগুলির বিভাজন: প্রতিটি টেবিল শুধুমাত্র নিজস্ব ক্ষেত্রগুলি ধারণ করে এবং সুপারক্লাসের ফিল্ডগুলো আলাদা টেবিলের মধ্যে সংরক্ষিত থাকে।
- ডুপ্লিকেশন কমানো: সাধারণ ফিল্ডগুলো (যেমন সুপারক্লাসের) একাধিক সাবক্লাসের জন্য পুনরাবৃত্তি করা হয় না, বরং একটিতে সংরক্ষিত থাকে।
উদাহরণ:
@Entity
@Inheritance(strategy = InheritanceType.JOINED)
public class Vehicle {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private String name;
// Getter and Setter
}
@Entity
public class Car extends Vehicle {
private String carModel;
// Getter and Setter
}
@Entity
public class Bike extends Vehicle {
private String bikeType;
// Getter and Setter
}
এখানে, Vehicle সুপারক্লাস এবং Car, Bike দুটি সাবক্লাস। @Inheritance(strategy = InheritanceType.JOINED) এর মাধ্যমে JPA-তে Joined Strategy ব্যবহার করা হয়েছে।
ডেটাবেস টেবিলের গঠন:
Vehicle Table:
id name 1 Car 2 Bike Car Table:
id carModel 1 Sedan Bike Table:
id bikeType 2 Mountain
এখানে, Vehicle টেবিলের id ফিল্ডটি Car এবং Bike টেবিলের সাথে যুক্ত, এবং তারা নির্দিষ্ট ডেটা সংরক্ষণ করে।
2. Table-per-Class Strategy
Table-per-Class Strategy হল এমন একটি ইনহেরিটেন্স স্ট্রাটেজি যেখানে প্রতি ক্লাস (সুপারক্লাস এবং সাবক্লাস) এর জন্য আলাদা আলাদা টেবিল তৈরি করা হয়, এবং প্রতিটি টেবিল তার নিজস্ব ক্ষেত্রগুলো ধারণ করে। এতে কোনো join অপারেশন প্রয়োজন হয় না, কারণ প্রতিটি ক্লাসের ডেটা তার নিজস্ব টেবিলে সংরক্ষিত থাকে।
Table-per-Class Strategy এর বৈশিষ্ট্য:
- পৃথক টেবিল: সুপারক্লাস এবং সাবক্লাসের জন্য আলাদা টেবিল তৈরি করা হয়।
- ডেটাবেসে ডুপ্লিকেশন: সাবক্লাসের ক্ষেত্রগুলি সুপারক্লাসের ক্ষেত্রের সাথে মিশে থাকতে পারে, যার ফলে কিছু ডুপ্লিকেশন হতে পারে।
- কোনো Join নেই: কোনো
joinটেবিলের মধ্যে করা হয় না, যা ডেটা অ্যাক্সেসে আরও দ্রুততা আনে।
উদাহরণ:
@Entity
@Inheritance(strategy = InheritanceType.TABLE_PER_CLASS)
public class Vehicle {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private String name;
// Getter and Setter
}
@Entity
public class Car extends Vehicle {
private String carModel;
// Getter and Setter
}
@Entity
public class Bike extends Vehicle {
private String bikeType;
// Getter and Setter
}
এখানে, @Inheritance(strategy = InheritanceType.TABLE_PER_CLASS) দ্বারা Table-per-Class Strategy ব্যবহার করা হয়েছে।
ডেটাবেস টেবিলের গঠন:
Vehicle Table:
id name 1 Car 2 Bike Car Table:
id name carModel 1 Car Sedan Bike Table:
id name bikeType 2 Bike Mountain
এখানে, প্রতিটি টেবিল তার নিজস্ব ক্ষেত্র ধারণ করে এবং Vehicle টেবিলের ক্ষেত্র গুলি Car এবং Bike টেবিলের মধ্যে পুনরাবৃত্তি করা হচ্ছে।
Joined Strategy এবং Table-per-Class Strategy এর মধ্যে পার্থক্য
| বৈশিষ্ট্য | Joined Strategy | Table-per-Class Strategy |
|---|---|---|
| টেবিলের সংখ্যা | একাধিক টেবিল (সুপারক্লাস এবং সাবক্লাসের জন্য আলাদা টেবিল) | প্রতিটি ক্লাসের জন্য আলাদা টেবিল |
| ডেটাবেসে সম্পর্ক | টেবিলগুলোর মধ্যে join সম্পর্ক থাকে | কোনো join সম্পর্ক নেই, প্রতিটি টেবিল সম্পূর্ণ স্বাধীন |
| ফিল্ড ডুপ্লিকেশন | ডুপ্লিকেশন কম থাকে কারণ সুপারক্লাসের ক্ষেত্রগুলো একটি টেবিলে থাকে | সাবক্লাসের ক্ষেত্রগুলি সুপারক্লাসের ক্ষেত্রের সাথে মিশে যায় |
| পারফরম্যান্স | join অপারেশন কারণে কিছু পারফরম্যান্স হিট হতে পারে | কোনো join নেই, তাই পারফরম্যান্স ভাল |
| ডেটা পুনঃব্যবহার | ডেটা পুনঃব্যবহার সহজ, কারণ সাধারণ ফিল্ডগুলো একটি টেবিলে থাকে | প্রতিটি ক্লাসের জন্য আলাদা টেবিল হওয়ায় কিছু ডেটা পুনঃব্যবহার সম্ভব না |
| ডেটা রক্ষণাবেক্ষণ | ডেটা রক্ষণাবেক্ষণ সহজ, কারণ একাধিক টেবিলের মধ্যে সম্পর্ক থাকে | ডেটা রক্ষণাবেক্ষণ কঠিন হতে পারে, কারণ আলাদা টেবিল ব্যবহার হয় |
সারাংশ
- Joined Strategy হল এমন একটি পদ্ধতি যেখানে সুপারক্লাস এবং সাবক্লাসের জন্য আলাদা টেবিল তৈরি করা হয় এবং এগুলোর মধ্যে সম্পর্ক join করা হয়। এতে ডেটা পুনঃব্যবহার সহজ হয়, তবে কিছু পারফরম্যান্স সমস্যা থাকতে পারে।
- Table-per-Class Strategy হল একটি পদ্ধতি যেখানে প্রতিটি ক্লাসের জন্য আলাদা টেবিল তৈরি করা হয়। এতে পারফরম্যান্স ভালো হয়, তবে কিছু ডেটা পুনঃব্যবহার করা কঠিন হতে পারে এবং ডেটাবেসে কিছু ডুপ্লিকেশন হতে পারে।
JPA তে ইনহেরিটেন্স মডেল নির্বাচন করার সময় এই দুটি স্ট্রাটেজি নির্বাচন করতে পারেন, যেটি আপনার অ্যাপ্লিকেশনের পারফরম্যান্স এবং ডেটা রক্ষণাবেক্ষণের প্রয়োজনীয়তার উপর নির্ভর করে।
Read more