Joined Strategy এবং Table-per-Class Strategy

JPA তে Inheritance Mapping - জেপিএ  (JPA) - Java Technologies

304

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 ব্যবহার করা হয়েছে।

ডেটাবেস টেবিলের গঠন:

  1. Vehicle Table:

    idname
    1Car
    2Bike
  2. Car Table:

    idcarModel
    1Sedan
  3. Bike Table:

    idbikeType
    2Mountain

এখানে, 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 ব্যবহার করা হয়েছে।

ডেটাবেস টেবিলের গঠন:

  1. Vehicle Table:

    idname
    1Car
    2Bike
  2. Car Table:

    idnamecarModel
    1CarSedan
  3. Bike Table:

    idnamebikeType
    2BikeMountain

এখানে, প্রতিটি টেবিল তার নিজস্ব ক্ষেত্র ধারণ করে এবং Vehicle টেবিলের ক্ষেত্র গুলি Car এবং Bike টেবিলের মধ্যে পুনরাবৃত্তি করা হচ্ছে।


Joined Strategy এবং Table-per-Class Strategy এর মধ্যে পার্থক্য

বৈশিষ্ট্যJoined StrategyTable-per-Class Strategy
টেবিলের সংখ্যাএকাধিক টেবিল (সুপারক্লাস এবং সাবক্লাসের জন্য আলাদা টেবিল)প্রতিটি ক্লাসের জন্য আলাদা টেবিল
ডেটাবেসে সম্পর্কটেবিলগুলোর মধ্যে join সম্পর্ক থাকেকোনো join সম্পর্ক নেই, প্রতিটি টেবিল সম্পূর্ণ স্বাধীন
ফিল্ড ডুপ্লিকেশনডুপ্লিকেশন কম থাকে কারণ সুপারক্লাসের ক্ষেত্রগুলো একটি টেবিলে থাকেসাবক্লাসের ক্ষেত্রগুলি সুপারক্লাসের ক্ষেত্রের সাথে মিশে যায়
পারফরম্যান্সjoin অপারেশন কারণে কিছু পারফরম্যান্স হিট হতে পারেকোনো join নেই, তাই পারফরম্যান্স ভাল
ডেটা পুনঃব্যবহারডেটা পুনঃব্যবহার সহজ, কারণ সাধারণ ফিল্ডগুলো একটি টেবিলে থাকেপ্রতিটি ক্লাসের জন্য আলাদা টেবিল হওয়ায় কিছু ডেটা পুনঃব্যবহার সম্ভব না
ডেটা রক্ষণাবেক্ষণডেটা রক্ষণাবেক্ষণ সহজ, কারণ একাধিক টেবিলের মধ্যে সম্পর্ক থাকেডেটা রক্ষণাবেক্ষণ কঠিন হতে পারে, কারণ আলাদা টেবিল ব্যবহার হয়

সারাংশ


  • Joined Strategy হল এমন একটি পদ্ধতি যেখানে সুপারক্লাস এবং সাবক্লাসের জন্য আলাদা টেবিল তৈরি করা হয় এবং এগুলোর মধ্যে সম্পর্ক join করা হয়। এতে ডেটা পুনঃব্যবহার সহজ হয়, তবে কিছু পারফরম্যান্স সমস্যা থাকতে পারে।
  • Table-per-Class Strategy হল একটি পদ্ধতি যেখানে প্রতিটি ক্লাসের জন্য আলাদা টেবিল তৈরি করা হয়। এতে পারফরম্যান্স ভালো হয়, তবে কিছু ডেটা পুনঃব্যবহার করা কঠিন হতে পারে এবং ডেটাবেসে কিছু ডুপ্লিকেশন হতে পারে।

JPA তে ইনহেরিটেন্স মডেল নির্বাচন করার সময় এই দুটি স্ট্রাটেজি নির্বাচন করতে পারেন, যেটি আপনার অ্যাপ্লিকেশনের পারফরম্যান্স এবং ডেটা রক্ষণাবেক্ষণের প্রয়োজনীয়তার উপর নির্ভর করে।

Content added By
Promotion

Are you sure to start over?

Loading...