TypeORM এবং Database Constraints
Database Constraints হল এমন শর্তাবলী যা ডেটাবেস টেবিলের ডেটা সঠিকতা এবং সামঞ্জস্য নিশ্চিত করতে ব্যবহৃত হয়। এটি ডেটাবেসে অকার্যকর বা অপ্রত্যাশিত ডেটা প্রবেশ করা থেকে রোধ করতে সহায়তা করে। TypeORM ব্যবহার করে আপনি ডেটাবেসে বিভিন্ন ধরনের কনস্ট্রেইন্ট যেমন Unique এবং Foreign Key কনস্ট্রেইন্ট ইজি ভাবে সেট করতে পারেন।
এই গাইডে, আমরা Unique এবং Foreign Key কনস্ট্রেইন্টগুলো TypeORM এ কীভাবে সেট করা যায় তা দেখব।
১. Unique Constraint
Unique Constraint হল একটি কনস্ট্রেইন্ট যা নিশ্চিত করে যে টেবিলের কোনো দুটি রেকর্ডে নির্দিষ্ট কলামের মান কখনও একই হবে না। এটি প্রাথমিকভাবে এমন ক্ষেত্রগুলির জন্য ব্যবহৃত হয় যেখানে প্রতিটি রেকর্ডের জন্য অনন্য (unique) মান থাকতে হবে, যেমন ইমেইল, ইউজার আইডি ইত্যাদি।
TypeORM-এ Unique Constraint তৈরি করতে @Column({ unique: true }) ব্যবহার করা হয়। এটি একটি কলামের উপরে নির্দিষ্ট করা হয় এবং টেবিলের সেগুলোর মান অনন্য হতে বাধ্য করে।
উদাহরণ: Unique Constraint ব্যবহার
ধরা যাক, আমরা একটি User টেবিল তৈরি করতে যাচ্ছি, যেখানে email ফিল্ডটি ইউনিক থাকবে:
import { Entity, PrimaryGeneratedColumn, Column } from "typeorm";
@Entity()
export class User {
@PrimaryGeneratedColumn()
id: number;
@Column({ unique: true })
email: string;
@Column()
name: string;
}
এখানে, @Column({ unique: true }) দিয়ে email ফিল্ডে Unique Constraint যোগ করা হয়েছে, যার ফলে এই ফিল্ডে একাধিক রেকর্ডে একই ইমেইল থাকতে পারবে না।
মাইগ্রেশন তৈরি করা:
যেহেতু আপনি টেবিলের কাঠামো পরিবর্তন করেছেন, তাই একটি নতুন মাইগ্রেশন তৈরি করতে হবে:
typeorm migration:generate -n AddUniqueConstraintToEmail
এরপর মাইগ্রেশন রান করুন:
typeorm migration:run
এভাবে Unique Constraint আপনার ডেটাবেসে যোগ হবে।
২. Foreign Key Constraint
Foreign Key Constraint একটি টেবিলের কলামকে অন্য টেবিলের প্রাইমারি কিকে রেফারেন্স করে। এটি ডেটাবেসে সম্পর্কিত টেবিলগুলির মধ্যে ডেটার ইন্টিগ্রিটি নিশ্চিত করে। Foreign Key কনস্ট্রেইন্ট ব্যবহার করলে আপনি নিশ্চিত করতে পারেন যে এক টেবিলের কোনো রেকর্ড অপর টেবিলের সম্পর্কিত রেকর্ডে থাকা একটি বৈধ মানের সাথে সংযুক্ত রয়েছে।
TypeORM-এ Foreign Key কনস্ট্রেইন্ট তৈরি করতে @ManyToOne এবং @JoinColumn ডেকোরেটর ব্যবহার করা হয়।
উদাহরণ: Foreign Key Constraint ব্যবহার
ধরা যাক, আমরা একটি Post টেবিল তৈরি করছি, যেখানে প্রতিটি Post এর একটি User এর সাথে সম্পর্ক থাকবে (One-to-Many এবং Many-to-One সম্পর্ক)।
import { Entity, PrimaryGeneratedColumn, Column, ManyToOne, JoinColumn } from "typeorm";
import { User } from "./User";
@Entity()
export class Post {
@PrimaryGeneratedColumn()
id: number;
@Column()
title: string;
@ManyToOne(() => User, user => user.posts)
@JoinColumn({ name: "userId" })
user: User;
}
এখানে, Post টেবিলের userId কলামটি User টেবিলের id কলামের সাথে সম্পর্কিত। @JoinColumn ডেকোরেটরটি সম্পর্কিত কলামটি যোগ করতে ব্যবহৃত হয় এবং Foreign Key কনস্ট্রেইন্ট তৈরি হয়।
User Entity:
import { Entity, PrimaryGeneratedColumn, Column, OneToMany } from "typeorm";
import { Post } from "./Post";
@Entity()
export class User {
@PrimaryGeneratedColumn()
id: number;
@Column()
name: string;
@OneToMany(() => Post, post => post.user)
posts: Post[];
}
এখানে, OneToMany ডেকোরেটর ব্যবহার করে একটি User এর একাধিক Post থাকতে পারে, এবং প্রতিটি Post একটি User এর সাথে সম্পর্কিত।
মাইগ্রেশন তৈরি করা:
এখানে Foreign Key কনস্ট্রেইন্ট সেট করা হয়েছে, তাই মাইগ্রেশন তৈরি করতে হবে:
typeorm migration:generate -n AddForeignKeyConstraintToPost
এরপর মাইগ্রেশন রান করুন:
typeorm migration:run
এভাবে Foreign Key Constraint আপনার ডেটাবেসে যোগ হবে, যা Post টেবিলের userId কলামটিকে User টেবিলের id কলামের সাথে সম্পর্কিত করবে।
৩. Composite Unique Constraint
একাধিক কলামের সংমিশ্রণ (Combination) নিয়ে Unique Constraint তৈরি করতে হলে, @Unique ডেকোরেটর ব্যবহার করা হয়। এটি নিশ্চিত করে যে ঐ কলামগুলির সমন্বয়ে কোনো দুইটি রেকর্ড এক হতে পারবে না।
উদাহরণ: Composite Unique Constraint
ধরা যাক, আমাদের একটি User টেবিল আছে যেখানে firstName এবং lastName এর একসাথে ইউনিক হওয়া দরকার:
import { Entity, PrimaryGeneratedColumn, Column, Unique } from "typeorm";
@Unique(["firstName", "lastName"])
@Entity()
export class User {
@PrimaryGeneratedColumn()
id: number;
@Column()
firstName: string;
@Column()
lastName: string;
}
এখানে, @Unique(["firstName", "lastName"]) দ্বারা আমরা নিশ্চিত করছি যে firstName এবং lastName এর একসাথে কোন দুটি রেকর্ড একই হতে পারবে না।
সারাংশ
TypeORM-এ Unique এবং Foreign Key কনস্ট্রেইন্ট ব্যবহার করে আপনি ডেটাবেসের ইন্টিগ্রিটি এবং ডেটা সম্পর্ক সুনিশ্চিত করতে পারেন। Unique Constraint একটি ফিল্ডের মধ্যে অনন্য মান রাখতে সাহায্য করে, এবং Foreign Key Constraint দুই টেবিলের মধ্যে সম্পর্ক নিশ্চিত করে। এগুলি ব্যবহার করে আপনি ডেটাবেসের ডিজাইন আরও শক্তিশালী এবং সঠিক করতে পারবেন।
Read more