TypeORM এবং Relations ডেকোরেটর
TypeORM হল একটি Object-Relational Mapping (ORM) লাইব্রেরি যা TypeScript এবং JavaScript ডেভেলপমেন্টের জন্য ডিজাইন করা হয়েছে। TypeORM ডেটাবেসের সাথে যোগাযোগ সহজ করে তোলে এবং ডেটা মডেল এবং ডেটাবেস টেবিলের মধ্যে সম্পর্ক (Relations) নির্ধারণ করতে সাহায্য করে।
Relations ডেকোরেটর TypeORM-এ দুইটি বা তার অধিক টেবিলের মধ্যে সম্পর্ক তৈরি করতে ব্যবহৃত হয়। এই ডেকোরেটরগুলি ব্যবহার করে আপনি One-to-One, One-to-Many, Many-to-One, এবং Many-to-Many সম্পর্ক তৈরি করতে পারেন।
Relations ডেকোরেটর প্রকার
TypeORM-এ সাধারণত চার ধরনের সম্পর্ক তৈরি করা হয়:
- One-to-One Relation: এক টেবিলের একটি রেকর্ড অন্য টেবিলের একটিতে সম্পর্কিত।
- One-to-Many Relation: এক টেবিলের একটি রেকর্ড অন্য টেবিলের একাধিক রেকর্ডের সাথে সম্পর্কিত।
- Many-to-One Relation: একাধিক রেকর্ড এক টেবিলের একটি রেকর্ডের সাথে সম্পর্কিত।
- Many-to-Many Relation: একাধিক রেকর্ড একাধিক রেকর্ডের সাথে সম্পর্কিত।
এখানে প্রতিটি সম্পর্ক তৈরি করার জন্য @OneToOne, @OneToMany, @ManyToOne, এবং @ManyToMany ডেকোরেটর ব্যবহার করা হয়।
১. One-to-One Relation
একটি One-to-One সম্পর্ক তৈরি করতে @OneToOne ডেকোরেটর ব্যবহার করা হয়। এখানে, একটি রেকর্ড অন্য টেবিলের একটিতে সম্পর্কিত থাকবে।
উদাহরণ:
ধরা যাক, আপনি একটি User টেবিল এবং একটি Profile টেবিল তৈরি করছেন, যেখানে প্রতিটি User এর একটিই Profile রয়েছে।
import { Entity, PrimaryGeneratedColumn, Column, OneToOne, JoinColumn } from "typeorm";
import { Profile } from "./Profile";
@Entity()
export class User {
@PrimaryGeneratedColumn()
id: number;
@Column()
name: string;
@OneToOne(() => Profile)
@JoinColumn() // This will join the columns of the two tables
profile: Profile;
}
@Entity()
export class Profile {
@PrimaryGeneratedColumn()
id: number;
@Column()
bio: string;
}
এখানে, User টেবিলের profile কলামটি Profile টেবিলের সাথে যুক্ত। @OneToOne ডেকোরেটরটি দুই টেবিলের মধ্যে সম্পর্ক তৈরি করছে এবং @JoinColumn ডেকোরেটরটি তাদের মধ্যে ফিজিক্যালি সম্পর্ক স্থাপন করে।
২. One-to-Many Relation
একটি One-to-Many সম্পর্ক তৈরি করতে @OneToMany এবং @ManyToOne ডেকোরেটর ব্যবহার করা হয়। এক টেবিলের একটি রেকর্ড অন্য টেবিলের একাধিক রেকর্ডের সাথে সম্পর্কিত।
উদাহরণ:
ধরা যাক, Category এবং Product টেবিলের মধ্যে One-to-Many সম্পর্ক তৈরি করতে চাই। এখানে, একটি Category এর একাধিক Product থাকবে।
import { Entity, PrimaryGeneratedColumn, Column, OneToMany } from "typeorm";
import { Product } from "./Product";
@Entity()
export class Category {
@PrimaryGeneratedColumn()
id: number;
@Column()
name: string;
@OneToMany(() => Product, product => product.category)
products: Product[];
}
@Entity()
export class Product {
@PrimaryGeneratedColumn()
id: number;
@Column()
name: string;
@ManyToOne(() => Category, category => category.products)
category: Category;
}
এখানে, Category টেবিলের একটিতে একাধিক Product সম্পর্কিত থাকবে। @OneToMany ডেকোরেটরটি Category টেবিলের উপর ব্যবহার করা হয়েছে এবং @ManyToOne ডেকোরেটরটি Product টেবিলের উপর।
৩. Many-to-One Relation
একটি Many-to-One সম্পর্ক তৈরি করতে @ManyToOne এবং @OneToMany ডেকোরেটর ব্যবহার করা হয়। একাধিক রেকর্ড এক টেবিলের একটি রেকর্ডের সাথে সম্পর্কিত থাকে।
উদাহরণ:
এটি আগের উদাহরণের মতোই, তবে এখানেও Product টেবিলের মধ্যে Many-to-One সম্পর্ক এবং Category টেবিলের মধ্যে One-to-Many সম্পর্ক তৈরি করা হচ্ছে।
import { Entity, PrimaryGeneratedColumn, Column, ManyToOne } from "typeorm";
import { Category } from "./Category";
@Entity()
export class Product {
@PrimaryGeneratedColumn()
id: number;
@Column()
name: string;
@ManyToOne(() => Category, category => category.products)
category: Category;
}
এখানে, Product টেবিলের category একাধিক রেকর্ডের মাধ্যমে Category টেবিলের একটি রেকর্ডের সাথে সম্পর্কিত।
৪. Many-to-Many Relation
একটি Many-to-Many সম্পর্ক তৈরি করতে @ManyToMany এবং @JoinTable ডেকোরেটর ব্যবহার করা হয়। একাধিক রেকর্ড একাধিক রেকর্ডের সাথে সম্পর্কিত থাকে।
উদাহরণ:
ধরা যাক, একটি Student টেবিল এবং একটি Course টেবিল আছে, যেখানে একটি Student একাধিক Course নিবন্ধন করতে পারে এবং একটি Course এ একাধিক Student থাকতে পারে।
import { Entity, PrimaryGeneratedColumn, Column, ManyToMany, JoinTable } from "typeorm";
import { Course } from "./Course";
@Entity()
export class Student {
@PrimaryGeneratedColumn()
id: number;
@Column()
name: string;
@ManyToMany(() => Course)
@JoinTable()
courses: Course[];
}
@Entity()
export class Course {
@PrimaryGeneratedColumn()
id: number;
@Column()
name: string;
@ManyToMany(() => Student)
students: Student[];
}
এখানে, Student এবং Course এর মধ্যে Many-to-Many সম্পর্ক তৈরি করা হয়েছে। @JoinTable ডেকোরেটরটি সম্পর্কের মধ্যবর্তী টেবিল তৈরির জন্য ব্যবহৃত হয়, যা দুইটি টেবিলের সম্পর্ক নির্দেশ করে।
সারাংশ
TypeORM-এ Relations ডেকোরেটর ব্যবহারের মাধ্যমে আপনি একাধিক টেবিলের মধ্যে সম্পর্ক তৈরি করতে পারেন। এটি One-to-One, One-to-Many, Many-to-One, এবং Many-to-Many সম্পর্ক তৈরি করতে সহায়ক। TypeORM এর মাধ্যমে এই সম্পর্কগুলির মধ্যে ডেটা খুব সহজে ম্যাপ এবং পরিচালনা করা যায়, যা ডেটাবেস ডিজাইন এবং কোডিং প্রক্রিয়াকে আরো কার্যকরী করে তোলে।
Read more