Composite Key এর ধারণা
Composite Key হলো একটি প্রাইমারি কী (Primary Key), যা একাধিক কলামের (fields/attributes) সমন্বয়ে গঠিত। সাধারণত যখন কোনো একক কলাম ডেটাবেস টেবিলে একটি ইউনিক রেকর্ড সনাক্ত করার জন্য যথেষ্ট নয়, তখন Composite Key ব্যবহার করা হয়। এটি একটি ইউনিক পরিচয় নিশ্চিত করতে একাধিক কলামের মান একত্রে ব্যবহার করে।
Composite Key এর প্রয়োজনীয়তা
Composite Key নিম্নলিখিত ক্ষেত্রে ব্যবহার করা হয়:
- ডেটার অখণ্ডতা নিশ্চিত করা: যখন একাধিক কলাম মিলে ইউনিক আইডেন্টিটি তৈরি করে, তখন Composite Key ডেটার সঠিকতা নিশ্চিত করে।
- জটিল সম্পর্ক: অনেক-থেকে-অনেক (Many-to-Many) সম্পর্কের ক্ষেত্রে, একটি মধ্যবর্তী টেবিল (Join Table) তৈরি করতে Composite Key ব্যবহার করা হয়।
- ব্যবসায়িক প্রক্রিয়া: কোনো ডোমেইনে, যেমন লেনদেন বা অর্ডার ম্যানেজমেন্টে, যেখানে একাধিক বৈশিষ্ট্য একত্রে রেকর্ড চিহ্নিত করে।
স্প্রিং ORM এ Composite Key ব্যবহারের উপায়
১. Embeddable Class ব্যবহার করে Composite Key
JPA এবং Hibernate-এ Composite Key তৈরির জন্য @Embeddable এবং @EmbeddedId এনোটেশন ব্যবহার করা হয়।
উদাহরণ:
Embeddable Key ক্লাস তৈরি
@Embeddable
public class OrderId implements Serializable {
private Long orderId;
private Long productId;
// Default Constructor
public OrderId() {}
// Getters and Setters
public Long getOrderId() {
return orderId;
}
public void setOrderId(Long orderId) {
this.orderId = orderId;
}
public Long getProductId() {
return productId;
}
public void setProductId(Long productId) {
this.productId = productId;
}
// hashCode and equals methods
@Override
public int hashCode() {
return Objects.hash(orderId, productId);
}
@Override
public boolean equals(Object obj) {
if (this == obj) return true;
if (obj == null || getClass() != obj.getClass()) return false;
OrderId that = (OrderId) obj;
return Objects.equals(orderId, that.orderId) &&
Objects.equals(productId, that.productId);
}
}
Entity ক্লাসে @EmbeddedId ব্যবহার
@Entity
public class Order {
@EmbeddedId
private OrderId id;
private int quantity;
// Getters and Setters
public OrderId getId() {
return id;
}
public void setId(OrderId id) {
this.id = id;
}
public int getQuantity() {
return quantity;
}
public void setQuantity(int quantity) {
this.quantity = quantity;
}
}
২. IdClass ব্যবহার করে Composite Key
Composite Key সংজ্ঞায়িত করতে @IdClass ব্যবহার করা হয়। এই পদ্ধতিতে, একটি সেপারেট ক্লাস Primary Key হিসাবে সংজ্ঞায়িত হয়।
IdClass সংজ্ঞায়িত করা
public class OrderId implements Serializable {
private Long orderId;
private Long productId;
// Default Constructor
public OrderId() {}
// Getters and Setters, hashCode and equals methods
}
Entity ক্লাসে @IdClass ব্যবহার
@Entity
@IdClass(OrderId.class)
public class Order {
@Id
private Long orderId;
@Id
private Long productId;
private int quantity;
// Getters and Setters
}
Composite Key ব্যবহারের সুবিধা
- ডেটার অখণ্ডতা নিশ্চিত: একাধিক কলাম ব্যবহার করে ইউনিক রেকর্ড সনাক্ত করা যায়।
- রিলেশনশিপ মডেলিং সহজ: Many-to-Many সম্পর্কের জন্য মধ্যবর্তী টেবিল তৈরি করা সহজ।
- ডোমেইন মডেলিং: বিভিন্ন ডোমেইনের জটিল সম্পর্ক সহজে মডেল করা যায়।
Composite Key ব্যবহারের সীমাবদ্ধতা
- জটিলতা বৃদ্ধি: একাধিক ফিল্ড ব্যবহারের কারণে কোড এবং ডেটাবেস ডিজাইন জটিল হয়ে যেতে পারে।
- পারফরম্যান্স সমস্যা: Composite Key এর কারণে বড় টেবিলের ক্ষেত্রে পারফরম্যান্সে প্রভাব পড়তে পারে।
স্প্রিং ওআরএম এবং Composite Key এর সংযুক্তি
স্প্রিং ORM JPA এর @EmbeddedId এবং @IdClass এর মাধ্যমে Composite Key পরিচালনার সহজ এবং কার্যকর উপায় প্রদান করে। এটি ডেভেলপারদের ডেটাবেসের জটিল সম্পর্ক সহজে মডেল করতে সাহায্য করে এবং স্প্রিং এর ডেটা অ্যাক্সেস লেয়ারকে আরও শক্তিশালী করে তোলে।