Single Table Strategy গাইড ও নোট

Java Technologies - হাইবারনেট (Hibernate) - Hibernate Inheritance Mapping
303

Single Table Strategy হল Hibernate ORM-এ Inheritance Mapping পদ্ধতির একটি ধরন, যেখানে সমস্ত অবজেক্টের ডেটা একটি একক টেবিলেই সংরক্ষিত হয়, এবং ইনহেরিটেড ক্লাসের মধ্যে পার্থক্য চিহ্নিত করার জন্য একটি বিশেষ কলাম ব্যবহৃত হয়। এটি Inheritance Mapping এর মধ্যে সবচেয়ে সহজ পদ্ধতি, কারণ এখানে সমস্ত ডেটা একটি মাত্র টেবিলের মধ্যে থাকে এবং পারেন্ট এবং চাইল্ড ক্লাসের সকল ডেটা একই টেবিলে সংরক্ষিত হয়।


Single Table Inheritance Strategy: কীভাবে কাজ করে?

Hibernate এর Single Table Strategy-এ:

  • Parent class এবং Child classes সবগুলোই একই টেবিলে সংরক্ষিত হয়।
  • একটি Discriminator column (যেটি সাধারণত @DiscriminatorColumn অ্যানোটেশন দ্বারা চিহ্নিত হয়) থাকে যা নির্ধারণ করে কোন রেকর্ডটি কোন ক্লাসের অন্তর্গত। এই কলামটি type বা class type নির্দেশ করে।
  • যখন Hibernate কনফিগার করা হয়, তখন এটি সমস্ত ইনহেরিটেড ক্লাসের জন্য একক টেবিল তৈরি করে, এবং এই টেবিলের প্রতিটি রেকর্ড একটি নির্দিষ্ট ক্লাসের প্রতিনিধিত্ব করে।

Single Table Strategy এর উপকারিতা:

  1. Performance: একক টেবিলে সমস্ত ডেটা সংরক্ষণ করার কারণে ডেটা অ্যাক্সেস দ্রুত হতে পারে কারণ কোনো JOIN অপারেশন প্রয়োজন হয় না।
  2. Simplicity: এই স্ট্রাটেজি ব্যবহার করে টেবিলের সংখ্যা কম থাকে এবং অ্যাপ্লিকেশন ব্যবস্থাপনা সহজ হয়।
  3. Less Join Operations: যখন ইনহেরিটেন্স স্ট্রাকচার খুব গভীর না হয়, তখন Single Table Strategy-এ জয়েন অপারেশনগুলির প্রয়োজন হয় না, যার ফলে পারফরম্যান্স উন্নত হয়।

Single Table Strategy এর সীমাবদ্ধতা:

  1. Data Redundancy: যদি চাইল্ড ক্লাসগুলির মধ্যে অনেক ক্ষেত্র সমান থাকে, তবে এগুলি একসাথে সংরক্ষণ করার ফলে ডেটা পুনরাবৃত্তি হতে পারে।
  2. Large Tables: একক টেবিলের মধ্যে অনেক তথ্য রাখলে টেবিলটি বড় হয়ে যেতে পারে, বিশেষত যদি ইনহেরিটেন্স স্ট্রাকচারটি গভীর হয় বা অনেক সাবক্লাস থাকে।
  3. Inheritance Constraints: যদি আপনি অনেক আলাদা টাইপের ডেটা সংরক্ষণ করতে চান, তবে একক টেবিলে এগুলিকে চিহ্নিত করা কঠিন হতে পারে।

Single Table Strategy এর উদাহরণ

ধরা যাক, আমাদের দুটি ক্লাস আছে: Employee (Parent class) এবং Manager, Developer (Child classes)। আমরা Single Table Strategy ব্যবহার করব।

Step 1: Parent এবং Child Classes তৈরি করা

import javax.persistence.*;

@Entity
@Inheritance(strategy = InheritanceType.SINGLE_TABLE)
@DiscriminatorColumn(name = "employee_type", discriminatorType = DiscriminatorType.STRING)
public class Employee {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private int id;
    
    private String name;
    private String department;

    // Getters and Setters
}

@Entity
@DiscriminatorValue("Manager")
public class Manager extends Employee {
    private int teamSize;

    // Getters and Setters
}

@Entity
@DiscriminatorValue("Developer")
public class Developer extends Employee {
    private String programmingLanguage;

    // Getters and Setters
}

এখানে:

  • @Inheritance(strategy = InheritanceType.SINGLE_TABLE): এটি বলে দেয় যে ইনহেরিটেন্স স্ট্রাটেজি হল Single Table
  • @DiscriminatorColumn(name = "employee_type", discriminatorType = DiscriminatorType.STRING): এটি employee_type নামের একটি কলাম তৈরি করবে, যা প্রতিটি রেকর্ডের জন্য ক্লাস টাইপ চিহ্নিত করবে (যেমন Manager বা Developer)।
  • @DiscriminatorValue("Manager") এবং @DiscriminatorValue("Developer"): এগুলি চাইল্ড ক্লাসের জন্য নির্দিষ্ট ডিসক্রিমিনেটর ভ্যালু হিসেবে কাজ করবে।

Step 2: Database Table Structure

এই কোডের মাধ্যমে Hibernate একটি টেবিল তৈরি করবে, যার নাম হবে Employee (বা আপনার ক্লাসের নাম অনুযায়ী)। এই টেবিলে সমস্ত Employee, Manager, এবং Developer রেকর্ড থাকবে। প্রতিটি রেকর্ডের জন্য employee_type কলামটি ব্যবহৃত হবে, যা এই রেকর্ডটির জন্য ডিসক্রিমিনেটর ভ্যালু (যেমন Manager বা Developer) ধারণ করবে।

Employee Table Structure:

idnamedepartmentemployee_typeteamSizeprogrammingLanguage
1JohnHRManager10NULL
2AliceITDeveloperNULLJava
3BobMarketingManager5NULL
4CharlieITDeveloperNULLPython

Step 3: Example of CRUD Operations

import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;

public class EmployeeExample {
    public static void main(String[] args) {
        SessionFactory factory = new Configuration()
                                    .configure("hibernate.cfg.xml")
                                    .addAnnotatedClass(Employee.class)
                                    .addAnnotatedClass(Manager.class)
                                    .addAnnotatedClass(Developer.class)
                                    .buildSessionFactory();

        Session session = factory.getCurrentSession();

        try {
            // Create new Manager and Developer objects
            Manager manager = new Manager();
            manager.setName("John");
            manager.setDepartment("HR");
            manager.setTeamSize(10);

            Developer developer = new Developer();
            developer.setName("Alice");
            developer.setDepartment("IT");
            developer.setProgrammingLanguage("Java");

            // Start transaction
            session.beginTransaction();

            // Save both objects
            session.save(manager);
            session.save(developer);

            // Commit transaction
            session.getTransaction().commit();

            System.out.println("Saved manager and developer successfully!");

        } finally {
            factory.close();
        }
    }
}

Single Table Strategy-এর Advantages

  1. Performance: একটিমাত্র টেবিলে সমস্ত ডেটা থাকার কারণে ডেটাবেস অপারেশনগুলি (যেমন SELECT, UPDATE, DELETE) দ্রুত হতে পারে, কারণ JOIN অপারেশন করার প্রয়োজন নেই।
  2. Simplicity: এক টেবিলে সমস্ত তথ্য রাখার কারণে ডেটাবেসের স্ট্রাকচার সহজ হয়। ইনহেরিটেন্সের জন্য আলাদা আলাদা টেবিলের প্রয়োজন হয় না।
  3. Less Complexity: একক টেবিলে সব ডেটা সংরক্ষণ করার ফলে, টেবিলের মধ্যে সম্পর্ক ব্যবস্থাপনা সহজ হয়ে যায়।

Single Table Strategy-এর Disadvantages

  1. Data Redundancy: যেহেতু সব ডেটা একই টেবিলের মধ্যে থাকে, চাইল্ড ক্লাসে অতিরিক্ত প্রপার্টি থাকলে ডেটা পুনরাবৃত্তি হতে পারে।
  2. Table Size: এক টেবিলে অনেক ডেটা সংরক্ষণ করতে হলে টেবিলটি খুব বড় হয়ে যেতে পারে, যা পারফরম্যান্স ইস্যু তৈরি করতে পারে।
  3. Column Explosion: যদি ইনহেরিটেন্স স্ট্রাকচার খুব বড় হয়, তবে অনেক নতুন কলাম যোগ করতে হতে পারে, যা টেবিলের ডেটা ম্যানেজমেন্ট কঠিন করে তোলে।

Hibernate-এ Single Table Strategy হল একটি ইনহেরিটেন্স ম্যাপিং কৌশল যা Object-Relational Mapping (ORM) সম্পর্কিত ডেটা সহজে সংরক্ষণ এবং পরিচালনা করার জন্য ব্যবহৃত হয়। এটি performance এবং simplicity প্রদান করে, তবে data redundancy এবং scalability issues হতে পারে, বিশেষত বড় ইনহেরিটেন্স স্ট্রাকচার থাকলে।

এই কৌশলটি ছোট এবং মাঝারি ইনহেরিটেন্স কাঠামো যেখানে ডেটার পুনরাবৃত্তি কম এবং খুব বেশি কলাম বাড়ানোর প্রয়োজন নেই, সেখানে খুব উপযোগী।

Content added By
Promotion

Are you sure to start over?

Loading...