টাইপওআরএম (TypeORM) কি?
TypeORM একটি আধুনিক এবং জনপ্রিয় ORM (Object-Relational Mapping) লাইব্রেরি যা TypeScript এবং JavaScript-এর জন্য ব্যবহৃত হয়। এটি ডাটাবেসের সাথে সম্পর্কিত অল্প-কোডে কাজ করার জন্য তৈরি করা হয়েছে এবং SQL ডাটাবেসের সাথে যোগাযোগের জন্য একটি অবজেক্ট ভিত্তিক উপায় প্রদান করে।
TypeORM ডেটাবেসের সাথে কাজ করার সময়, ডেটাবেস টেবিলগুলির জন্য ক্লাস তৈরি করে এবং এগুলোকে "entities" হিসেবে পরিচালনা করে। এই entities-এ থাকা ডেটা অ্যাপ্লিকেশন লজিকের সাথে মেলে এবং TypeORM ক্লাসগুলির মাধ্যমে SQL কমান্ড তৈরি করা সহজ হয়।
Entities এবং ডেটাবেস মডেলিং
Entities হল TypeORM-এর মধ্যে ক্লাস যা ডেটাবেসের টেবিলের প্রতিনিধিত্ব করে। এগুলিতে আপনার ডেটার গঠন (structure) এবং সম্পর্ক নির্ধারণ করা হয়। ডেটাবেস মডেলিং হল সেই প্রক্রিয়া যার মাধ্যমে আপনি আপনার ডেটার গঠন এবং সম্পর্ক তৈরি করেন, যেমন টেবিলের কলাম এবং তাদের টাইপ, এবং অন্যান্য বৈশিষ্ট্যগুলি নির্ধারণ করা হয়।
Entity তৈরি করা
TypeORM-এ একটি entity তৈরি করার জন্য, প্রথমে একটি ক্লাস তৈরি করতে হয় এবং তারপর এই ক্লাসে @Entity() ডেকোরেটর ব্যবহার করে সেটি ডেটাবেস টেবিলের সাথে যুক্ত করতে হয়।
এছাড়া, @Column() ডেকোরেটর ব্যবহার করে ক্লাসের প্রপার্টি গুলিকে টেবিলের কলাম হিসেবে নির্ধারণ করতে হয়।
Entity এর উদাহরণ:
ধরা যাক, আমাদের একটি "User" টেবিল তৈরি করতে হবে।
import { Entity, PrimaryGeneratedColumn, Column } from 'typeorm';
@Entity() // @Entity() দিয়ে এটি একটি entity হিসেবে চিহ্নিত করা হচ্ছে
export class User {
@PrimaryGeneratedColumn() // Primary key
id: number;
@Column() // সাধারণ কলাম
name: string;
@Column()
age: number;
@Column()
email: string;
}
এখানে, User ক্লাসটি একটি entity হিসেবে ডেটাবেসের টেবিলকে প্রতিনিধিত্ব করছে, এবং তার মধ্যে id, name, age, email প্রপার্টিগুলি টেবিলের কলাম হবে।
@PrimaryGeneratedColumn(): এটি একটি অটোমেটিক্যালি ইন্টিগ্রেটেড কলাম যা সাধারণত প্রাইমারি কী হিসেবে ব্যবহৃত হয় এবং এর মান স্বয়ংক্রিয়ভাবে ইনক্রিমেন্ট হয়।@Column(): এটি টেবিলের একটি সাধারণ কলাম হিসেবে ব্যবহৃত হয়, যা সাধারণত বিভিন্ন ধরনের ডেটা যেমন string, integer ইত্যাদি ধারণ করে।
একাধিক Entities এবং সম্পর্ক তৈরি করা
TypeORM এ আপনি relations তৈরি করতে পারেন, যেমন একাধিক টেবিলের মধ্যে OneToMany, ManyToOne, ManyToMany সম্পর্ক স্থাপন করা।
One-to-Many সম্পর্কের উদাহরণ
ধরা যাক, আমাদের কাছে একটি "Post" entity রয়েছে, এবং আমরা চাই যে একজন ব্যবহারকারী অনেক পোস্ট তৈরি করতে পারে। এর জন্য আমরা OneToMany সম্পর্ক ব্যবহার করতে পারি।
import { Entity, PrimaryGeneratedColumn, Column, OneToMany } from 'typeorm';
import { Post } from './Post'; // Post entity import করা
@Entity()
export class User {
@PrimaryGeneratedColumn()
id: number;
@Column()
name: string;
@OneToMany(() => Post, (post) => post.user)
posts: Post[];
}
এখানে, User entity-এর মধ্যে OneToMany সম্পর্ক ব্যবহার করা হয়েছে, যেখানে User অনেক Post এর মালিক হতে পারে। @OneToMany ডেকোরেটরটি যুক্ত করা হয়েছে যা Post entity-এর সাথে সম্পর্ক স্থাপন করে।
Post Entity:
import { Entity, PrimaryGeneratedColumn, Column, ManyToOne } from 'typeorm';
import { User } from './User'; // User entity import করা
@Entity()
export class Post {
@PrimaryGeneratedColumn()
id: number;
@Column()
title: string;
@Column()
content: string;
@ManyToOne(() => User, (user) => user.posts)
user: User; // Many posts can belong to one user
}
এখানে, Post entity-এ ManyToOne সম্পর্ক তৈরি করা হয়েছে, যা Post entity-এর সাথে User entity-এর সম্পর্ক স্থাপন করে, অর্থাৎ একজন ব্যবহারকারী একাধিক পোস্ট তৈরি করতে পারে।
আরও সম্পর্ক (Many-to-Many)
TypeORM-এ Many-to-Many সম্পর্কও তৈরি করা সম্ভব। এই সম্পর্কের মধ্যে, একটি টেবিলের একাধিক রেকর্ড অন্য একটি টেবিলের একাধিক রেকর্ডের সাথে সম্পর্কিত থাকে।
Many-to-Many সম্পর্কের উদাহরণ:
import { Entity, PrimaryGeneratedColumn, Column, ManyToMany, JoinTable } from 'typeorm';
import { Category } from './Category';
@Entity()
export class Post {
@PrimaryGeneratedColumn()
id: number;
@Column()
title: string;
@Column()
content: string;
@ManyToMany(() => Category)
@JoinTable() // একটি জয়েন্ট টেবিল তৈরি করা হবে
categories: Category[];
}
এখানে, ManyToMany ডেকোরেটর ব্যবহার করা হয়েছে, যা Post এবং Category টেবিলের মধ্যে একাধিক সম্পর্ক তৈরি করবে। @JoinTable() ডেকোরেটরটি টেবিলের মধ্যে সংযোগ তৈরি করার জন্য ব্যবহৃত হয়।
ডেটাবেস মাইগ্রেশন
TypeORM ডেটাবেস মাইগ্রেশন সিস্টেম প্রদান করে, যা ডেটাবেস স্কিমার পরিবর্তনগুলি ট্র্যাক এবং প্রয়োগ করতে সহায়তা করে।
মাইগ্রেশন তৈরির উদাহরণ:
typeorm migration:create -n CreateUserTable
এটি একটি নতুন মাইগ্রেশন ফাইল তৈরি করবে। এরপর, মাইগ্রেশন ফাইলটি সম্পাদনা করতে হবে এবং নতুন টেবিল বা সম্পর্ক তৈরি করতে হবে।
মাইগ্রেশন চালানোর উদাহরণ:
typeorm migration:run
এটি ডেটাবেসে নতুন মাইগ্রেশন প্রয়োগ করবে।
সারাংশ
TypeORM-এ entities এবং ডেটাবেস মডেলিং প্রক্রিয়াগুলি কোডের মধ্যে ডেটাবেস টেবিল এবং সম্পর্ক তৈরির মাধ্যমে ডেটাবেসের কাজকে আরও সহজ এবং সুশৃঙ্খল করে তোলে। @Entity(), @Column(), @PrimaryGeneratedColumn(), এবং OneToMany, ManyToOne, ManyToMany সম্পর্কের মাধ্যমে আপনি খুব সহজেই আপনার ডেটাবেসের কাঠামো তৈরি করতে পারেন এবং ডেটাবেস ম্যানিপুলেশন কাজ সহজে করতে পারেন।
TypeORM-এর মাধ্যমে আপনি ডেটাবেস মডেলিং সহজভাবে করতে পারবেন এবং এই মডেলিংয়ের সাহায্যে আপনার ওয়েব অ্যাপ্লিকেশন তৈরি করতে পারবেন, যেখানে ডেটাবেস এবং অ্যাপ্লিকেশন লজিকের মধ্যে সুসংগত সম্পর্ক থাকবে।
Entity কী?
Entity হল TypeORM-এর একটি প্রধান ধারণা, যা ডেটাবেস টেবিলের প্রতিনিধিত্ব করে। Entity একটি TypeScript ক্লাস, যার মধ্যে ডেটাবেস টেবিলের কলাম এবং তাদের সম্পর্ক (যেমন, একাধিক সম্পর্ক বা একটি সম্পর্ক) সন্নিবেশিত থাকে। প্রতিটি Entity একটি টেবিলকে মানে, যার প্রতিটি প্রপার্টি (যেমন, @Column() ডেকোরেটর দিয়ে চিহ্নিত) একটি কলামের প্রতিনিধিত্ব করে।
TypeORM ব্যবহারের সময়, Entity ক্লাসটি ডেটাবেসের টেবিলের সাথে সম্পর্ক স্থাপন করে এবং সেখানে CRUD (Create, Read, Update, Delete) অপারেশনগুলো পরিচালনা করতে সহায়তা করে। Entity ক্লাসগুলির সাহায্যে ডেটাবেসের ডেটা খুব সহজভাবে ম্যানিপুলেট করা যায়, SQL কোড লিখার প্রয়োজন ছাড়াই।
Entity এর ভূমিকা
Entity TypeORM প্রজেক্টের কেন্দ্রীয় অংশ, যা ডেটাবেস টেবিল এবং তাদের কাঠামো সংজ্ঞায়িত করে। এখানে, আমরা Entity এর ভূমিকা এবং এর কার্যক্রম বিস্তারিতভাবে আলোচনা করব:
১. ডেটাবেস টেবিলের প্রতিনিধিত্ব
TypeORM-এ প্রতিটি Entity একটি ডেটাবেস টেবিলের প্রতিনিধিত্ব করে। Entity-র মধ্যে থাকা প্রতিটি প্রপার্টি (যেমন @Column()) একটি টেবিলের কলাম হয়ে ওঠে, যা ডেটাবেসে সংরক্ষিত থাকে।
উদাহরণ:
import { Entity, PrimaryGeneratedColumn, Column } from 'typeorm';
@Entity() // এটি Entity কে টেবিল হিসেবে চিহ্নিত করে
export class User {
@PrimaryGeneratedColumn() // এটি Primary Key হিসাবে চিহ্নিত হয়
id: number;
@Column() // এটি টেবিলের একটি কলাম
name: string;
@Column()
email: string;
}
এখানে, User Entity একটি ডেটাবেস টেবিলকে প্রতিনিধিত্ব করে যার তিনটি কলাম: id, name, এবং email।
২. ডেটাবেস স্কিমা সংজ্ঞায়িত করা
Entity ক্লাসের মাধ্যমে আপনি ডেটাবেসের টেবিলের স্কিমা (কলাম এবং তাদের ডেটা টাইপ) নির্ধারণ করতে পারেন। TypeORM ডাটাবেস টেবিলের structure এবং data types এই Entities থেকে নেয়।
উদাহরণ:
@Entity()
export class Product {
@PrimaryGeneratedColumn()
id: number;
@Column({ type: 'varchar', length: 100 })
name: string;
@Column('decimal')
price: number;
}
এখানে, Product Entity ডেটাবেসের product টেবিলের জন্য id, name এবং price কলামগুলি সংজ্ঞায়িত করছে। TypeORM এ কলামের জন্য ডেটা টাইপ (যেমন varchar, decimal, ইত্যাদি) সরাসরি Entity ক্লাসে নির্দিষ্ট করা যায়।
৩. সম্পর্ক সংজ্ঞায়িত করা (Relations)
Entity সম্পর্ক তৈরি করার মাধ্যমে, আপনি ডেটাবেসের মধ্যে OneToOne, OneToMany, ManyToOne, এবং ManyToMany সম্পর্ক স্থাপন করতে পারেন। TypeORM-এর @OneToMany, @ManyToOne, @ManyToMany, এবং @OneToOne ডেকোরেটর ব্যবহার করে এই সম্পর্কগুলো সংজ্ঞায়িত করা যায়।
উদাহরণ: OneToMany এবং ManyToOne সম্পর্ক:
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) // OneToMany সম্পর্ক
posts: Post[];
}
@Entity()
export class Post {
@PrimaryGeneratedColumn()
id: number;
@Column()
title: string;
@ManyToOne(() => User, user => user.posts) // ManyToOne সম্পর্ক
user: User;
}
এখানে, User Entity একটি OneToMany সম্পর্ক তৈরি করছে Post Entity এর সাথে, যা দেখাচ্ছে একটি User এর অনেক Post থাকতে পারে। এবং Post Entity ManyToOne সম্পর্কের মাধ্যমে এই সম্পর্কটি প্রতিষ্ঠা করছে।
৪. ডেটাবেস অপারেশন সহজ করা (CRUD Operations)
Entity এর মাধ্যমে TypeORM সরাসরি ডেটাবেস অপারেশন পরিচালনা করতে সাহায্য করে। আপনি SQL কোড লেখার প্রয়োজন ছাড়াই Entity ক্লাসগুলির মাধ্যমে ডেটা তৈরি, পড়া, আপডেট বা মুছে ফেলতে পারেন। TypeORM ডেটাবেসে CRUD অপারেশনগুলি সহজে পরিচালনা করার জন্য Entity ক্লাস ব্যবহার করে।
উদাহরণ: ডেটা ইনসার্ট (Create)
import { AppDataSource } from './data-source';
import { User } from './entity/User';
async function createUser() {
const userRepository = AppDataSource.getRepository(User);
const user = new User();
user.name = 'John Doe';
user.email = 'john.doe@example.com';
await userRepository.save(user);
console.log('User has been saved');
}
এখানে, userRepository.save(user) ব্যবহার করে নতুন User ডেটা ডাটাবেসে সংরক্ষণ করা হচ্ছে।
Entity এর অন্যান্য বৈশিষ্ট্য
@PrimaryGeneratedColumn():
এটি একটি স্বয়ংক্রিয়ভাবে উৎপন্ন হওয়া কলাম যা সাধারণত Primary Key হিসাবে ব্যবহৃত হয়। সাধারণত এটিAUTO_INCREMENTএর মতো কাজ করে।@Column():
এটি টেবিলের একটি কলাম নির্দেশ করে, যেখানে আপনি ডেটা টাইপ, ডিফল্ট মান এবং কন্ডিশন উল্লেখ করতে পারেন।@ManyToOne(),@OneToMany(),@ManyToMany():
এগুলি বিভিন্ন ধরনের সম্পর্ক নির্দেশ করতে ব্যবহৃত হয়, যেমন একাধিক পোস্টের সাথে একটি ব্যবহারকারীর সম্পর্ক বা একটি ক্যাটাগরির সাথে অনেক প্রোডাক্টের সম্পর্ক।
সারাংশ
Entity হল TypeORM-এর একটি মূল উপাদান, যা ডেটাবেস টেবিলের প্রতিনিধিত্ব করে এবং এতে টেবিলের কলাম এবং সম্পর্কগুলো ডিফাইন করা হয়। TypeORM-এর Entity ক্লাস ব্যবহারের মাধ্যমে ডেটাবেসের স্কিমা নির্ধারণ করা যায় এবং সহজে CRUD (Create, Read, Update, Delete) অপারেশন করা যায়। Entity এর মাধ্যমে ডেটাবেস সম্পর্কগুলোও ডিফাইন করা সম্ভব, যেমন OneToOne, ManyToOne, ManyToMany, ইত্যাদি। এটি TypeORM এর মাধ্যমে ডেটাবেস ম্যানিপুলেশন খুবই সহজ এবং প্রক্রিয়া করা যায়।
TypeORM Entity কী?
Entity হল TypeORM-এ একটি ক্লাস যা ডেটাবেস টেবিলের প্রতিনিধিত্ব করে। প্রতিটি Entity একটি ডেটাবেস টেবিলের সাথে ম্যাপ করা হয়, এবং এর প্রপার্টিগুলো টেবিলের কলাম হিসেবে ব্যবহৃত হয়। Entity তৈরি করা TypeORM-এর প্রধান কাজ, যা ডেটাবেসের মধ্যে রেকর্ড ইনসার্ট, আপডেট এবং ডিলিট করার জন্য ব্যবহৃত হয়।
Entity তৈরি করার জন্য TypeORM এ কিছু ডেকোরেটর ব্যবহার করতে হয়, যেমন @Entity(), @PrimaryGeneratedColumn(), @Column(), @ManyToOne() ইত্যাদি।
Entity তৈরি করা:
TypeORM-এ একটি Entity তৈরি করার জন্য প্রথমে একটি class তৈরি করতে হয় এবং তারপর সেই ক্লাসের মধ্যে ডেটাবেসের কলামগুলো ডিজাইন করা হয়। Entity ক্লাসে @Entity() ডেকোরেটর ব্যবহার করতে হয়, এবং এর প্রতিটি প্রপার্টি @Column() ডেকোরেটর দিয়ে সজ্জিত হয়।
Entity তৈরি করার উদাহরণ:
ধরা যাক আমরা একটি User নামক Entity তৈরি করতে চাই যা ডেটাবেসে ব্যবহারকারী সংক্রান্ত তথ্য রাখবে।
import { Entity, PrimaryGeneratedColumn, Column } from 'typeorm';
@Entity() // এটি Entity টেবিলের সাথে সম্পর্কিত
export class User {
@PrimaryGeneratedColumn() // এটি টেবিলের প্রাইমারি কিওয়ার্ড হিসেবে কাজ করবে
id: number;
@Column() // এটি টেবিলের একটি সাধারণ কলাম
firstName: string;
@Column()
lastName: string;
@Column()
age: number;
}
এখানে:
@Entity(): এই ডেকোরেটরটি ক্লাসকে একটি Entity হিসেবে চিহ্নিত করে এবং TypeORM ডেটাবেস টেবিল হিসেবে এর সাথে কাজ করবে।@PrimaryGeneratedColumn(): এটি একটি প্রাইমারি কলাম তৈরি করে যা অটোমেটিকভাবে ইউনিক ভ্যালু তৈরি করবে (এটি সাধারণত অটোমেটিক ইনক্রিমেন্টিং প্রাইমারি কিওয়ার্ড হয়)।@Column(): এটি Entity-এর অন্যান্য প্রপার্টি (যেগুলি ডেটাবেসের কলাম হবে) চিহ্নিত করতে ব্যবহৃত হয়।
Entity ডেকোরেটর ব্যবহার:
TypeORM বেশ কিছু শক্তিশালী ডেকোরেটর সরবরাহ করে যা Entity তৈরি করার সময় ব্যবহার করা যায়। প্রতিটি ডেকোরেটর একটি নির্দিষ্ট কাজ করে এবং আপনাকে Entity এর সাথে সম্পর্কিত ডেটাবেসের অবস্থা এবং কাঠামো কাস্টমাইজ করতে সহায়তা করে।
প্রধান ডেকোরেটরগুলো:
@Entity():- কাজ: এটি একটি ক্লাসকে Entity হিসেবে চিহ্নিত করে।
ব্যবহার:
@Entity() export class Product { // Entity প্রপার্টি }
@PrimaryGeneratedColumn():- কাজ: এটি প্রাইমারি কলাম হিসাবে কাজ করে এবং এটি সাধারণত অটোমেটিক ইনক্রিমেন্টের মাধ্যমে একটি ইউনিক ভ্যালু তৈরি করে।
ব্যবহার:
@PrimaryGeneratedColumn() id: number;
@Column():- কাজ: এটি ডেটাবেস টেবিলের কলাম হিসেবে একটি প্রপার্টিকে চিহ্নিত করে।
ব্যবহার:
@Column() firstName: string;
@ManyToOne():- কাজ: এটি দুইটি Entity-এর মধ্যে এক-থেকে-অনেক (one-to-many) সম্পর্ক তৈরি করে। উদাহরণস্বরূপ, একটি Post Entity এবং একটি User Entity এর মধ্যে সম্পর্ক।
ব্যবহার:
@ManyToOne(() => User, user => user.posts) user: User;
@OneToMany():- কাজ: এটি একটি Entity থেকে একাধিক সম্পর্কিত Entity সম্পর্ক তৈরি করে। উদাহরণস্বরূপ, একটি User Entity এর একাধিক Post সম্পর্ক।
ব্যবহার:
@OneToMany(() => Post, post => post.user) posts: Post[];
@JoinColumn():- কাজ: এটি একটি সম্পর্কিত Entity এর মধ্যে কীভাবে join করা হবে তা নির্ধারণ করে। এটি সাধারণত OneToOne বা ManyToOne সম্পর্কের ক্ষেত্রে ব্যবহৃত হয়।
ব্যবহার:
@ManyToOne(() => User) @JoinColumn({ name: 'user_id' }) user: User;
Entity ক্লাসের ব্যবহার:
এখন যে Entity তৈরি করা হয়েছে, তা TypeORM এর Repository বা QueryBuilder ব্যবহার করে ডেটাবেসে কাজ করতে পারে।
Repository ব্যবহার:
import { getRepository } from 'typeorm';
import { User } from './User';
const userRepository = getRepository(User);
// নতুন ব্যবহারকারী তৈরি
const newUser = new User();
newUser.firstName = 'John';
newUser.lastName = 'Doe';
newUser.age = 30;
// ব্যবহারকারী ডেটাবেসে সেভ করা
await userRepository.save(newUser);
QueryBuilder ব্যবহার:
import { getRepository } from 'typeorm';
import { User } from './User';
const userRepository = getRepository(User);
// QueryBuilder ব্যবহার করে ব্যবহারকারী খোঁজা
const users = await userRepository
.createQueryBuilder('user')
.where('user.age > :age', { age: 18 })
.getMany();
console.log(users);
মাইগ্রেশন ব্যবস্থাপনা
TypeORM আপনাকে ডেটাবেস মাইগ্রেশন ব্যবস্থাপনা করার সুবিধা দেয়, যা Entity পরিবর্তন হলে স্বয়ংক্রিয়ভাবে ডেটাবেস স্কিমা আপডেট করে।
# মাইগ্রেশন তৈরি করা
npm run typeorm migration:generate -n CreateUserTable
# মাইগ্রেশন চালানো
npm run typeorm migration:run
সারাংশ
TypeORM Entity তৈরি করা TypeORM এর একটি গুরুত্বপূর্ণ অংশ, যেখানে আমরা ডেটাবেস টেবিলের জন্য class তৈরি করি এবং তার প্রপার্টিগুলো ডেটাবেস কলাম হিসেবে কাজ করে। ডেকোরেটর ব্যবহার করে Entity তৈরি করা হয়, যেখানে @Entity(), @PrimaryGeneratedColumn(), @Column(), @ManyToOne(), @OneToMany() ইত্যাদি ডেকোরেটর দ্বারা ডেটাবেস মডেল এবং সম্পর্কগুলো সংজ্ঞায়িত করা হয়। Entity তৈরি এবং ডেকোরেটর ব্যবহার করে TypeORM দিয়ে ডেটাবেসের কাজগুলি সহজে করা যায়।
TypeORM: ডেটাটাইপস (Data Types) এবং কলাম অপশনস (Column Options)
TypeORM একটি শক্তিশালী ORM (Object-Relational Mapping) লাইব্রেরি যা TypeScript এবং JavaScript ব্যবহার করে ডেটাবেসের সাথে ইন্টারঅ্যাক্ট করতে সাহায্য করে। এটি ডেটাবেস মডেল তৈরি করার সময় বিভিন্ন ডেটাটাইপ এবং কলাম অপশন সরবরাহ করে, যা ডেটাবেসে তথ্য সঠিকভাবে সঞ্চয় এবং ম্যানিপুলেট করার জন্য ব্যবহৃত হয়।
ডেটাবেস টেবিলের প্রতিটি কলামকে সঠিকভাবে সংজ্ঞায়িত করার জন্য আপনাকে Column Options ব্যবহার করতে হবে, যা সঠিক ডেটাটাইপ এবং অন্যান্য প্যারামিটার নির্ধারণে সহায়তা করবে। এখানে ডেটাটাইপস এবং কলাম অপশনস নিয়ে বিস্তারিত আলোচনা করা হবে।
১. ডেটাটাইপস (Data Types)
TypeORM বিভিন্ন ডেটাবেসে ব্যবহৃত বিভিন্ন ধরনের ডেটাটাইপ সমর্থন করে। নিচে কিছু প্রধান ডেটাটাইপ দেওয়া হলো:
১.১ String Types
varchar: স্ট্রিং ডেটা ধারণ করতে ব্যবহৃত হয়।@Column({ type: 'varchar', length: 255 }) name: string;text: দীর্ঘ স্ট্রিং ধারণ করার জন্য ব্যবহৃত হয়।@Column('text') description: string;
১.২ Number Types
int: পূর্ণসংখ্যা ধারণ করতে ব্যবহৃত হয়।@Column('int') age: number;float: দশমিক সংখ্যা ধারণ করতে ব্যবহৃত হয়।@Column('float') price: number;decimal: সঠিক দশমিক সংখ্যা ধারণ করতে ব্যবহৃত হয় (বিস্তারিত ফাইনান্সিয়াল হিসাবের জন্য)।@Column('decimal', { precision: 5, scale: 2 }) amount: number;
১.৩ Boolean Types
boolean: সত্য বা মিথ্যা (true/false) মান ধারণ করতে ব্যবহৃত হয়।@Column('boolean') isActive: boolean;
১.৪ Date/Time Types
date: শুধুমাত্র তারিখ ধারণ করে (দিন, মাস, বছর)।@Column('date') birthDate: Date;timestamp: তারিখ এবং সময় ধারণ করে।@Column('timestamp') createdAt: Date;time: শুধুমাত্র সময় ধারণ করে।@Column('time') eventTime: string;
১.৫ UUID
uuid: ইউনিভার্সালি ইউনিক আইডেন্টিফায়ার (UUID) ধারণ করতে ব্যবহৃত হয়।@PrimaryGeneratedColumn('uuid') id: string;
১.৬ Other Types
json: JSON ডেটা ধারণ করতে ব্যবহৃত হয়।@Column('json') preferences: object;jsonb: JSONB ডেটাবেস ফরম্যাটে ডেটা ধারণ করতে ব্যবহৃত হয় (PostgreSQL এ ব্যবহৃত হয়)।@Column('jsonb') settings: object;
২. Column Options
Column Options ব্যবহার করে আপনি প্রতিটি কলামের বৈশিষ্ট্য এবং কনফিগারেশন নির্ধারণ করতে পারেন। TypeORM আপনাকে অনেক ধরনের অপশন দেয়, যেমন nullable, default, unique, length ইত্যাদি।
২.১ nullable
এই অপশনটি নির্ধারণ করে যে কলামটির মান অবশ্যই থাকতে হবে কিনা।
@Column({ nullable: true }) address: string;এখানে,
addressকলামটি nullable (অর্থাৎ এটি শূন্যও থাকতে পারে)।
২.২ default
এই অপশনটি একটি কলামের জন্য ডিফল্ট মান নির্ধারণ করে।
@Column({ default: 0 }) views: number;এখানে,
viewsকলামটির ডিফল্ট মান 0 হবে।
২.৩ unique
এই অপশনটি কলামটিকে ইউনিক (অনন্য) করে তোলে, যাতে একই মান দুটি রেকর্ডে থাকতে না পারে।
@Column({ unique: true }) email: string;এখানে,
emailকলামটি ইউনিক হবে এবং একই ইমেইল দুটি রেকর্ডে থাকতে পারবে না।
২.৪ length
এই অপশনটি একটি স্ট্রিং কলামের সর্বোচ্চ দৈর্ঘ্য নির্ধারণ করে।
@Column({ type: 'varchar', length: 100 }) username: string;এখানে,
usernameকলামের সর্বোচ্চ দৈর্ঘ্য 100 চরিত্র।
২.৫ primary
এই অপশনটি কলামটিকে প্রাথমিক (primary) কিপ হিসাবে চিহ্নিত করে। এটি টেবিলের প্রতিটি রেকর্ডের জন্য একটি অনন্য শনাক্তকরণ (ID) প্রদান করে।
@PrimaryGeneratedColumn() id: number;
২.৬ index
এই অপশনটি কলামটির জন্য একটি ইনডেক্স তৈরি করে, যাতে দ্রুত অনুসন্ধান করা যায়।
@Column({ index: true }) username: string;এখানে,
usernameকলামে ইনডেক্স তৈরি হবে, যা অনুসন্ধান গতিকে বৃদ্ধি করবে।
২.৭ enum
এই অপশনটি কলামের জন্য একটি নির্দিষ্ট তালিকা প্রদান করে, যাতে শুধুমাত্র কিছু নির্দিষ্ট মান গ্রহণ করা যায়।
@Column({ type: 'enum', enum: ['active', 'inactive'] }) status: string;এখানে,
statusকলামটি শুধুমাত্র "active" বা "inactive" মান গ্রহণ করবে।
৩. Composite Keys (Multiple Columns as Primary Key)
TypeORM এ Composite Key সেট করার জন্য আপনি multiple columns কে প্রাথমিক কী হিসেবে চিহ্নিত করতে পারেন। এটি বেশিরভাগ সময় ব্যবহার করা হয় যখন একটি কলাম এককভাবে আইডেন্টিফিকেশন দেয় না এবং দুই বা ততোধিক কলামের সমন্বয়ে একটি ইউনিক আইডেন্টিফিকেশন তৈরি করা হয়।
@Entity()
@PrimaryKeyColumn('composite')
export class User {
@PrimaryGeneratedColumn()
id: number;
@Column()
username: string;
@Column()
email: string;
@PrimaryColumn()
username_email: string;
}
এখানে, username এবং email কলামগুলোকে প্রাথমিক কী হিসেবে ব্যবহার করা হচ্ছে, যা উভয়ের সংমিশ্রণ দিয়ে একটি ইউনিক কী তৈরি করা হচ্ছে।
সারাংশ
TypeORM এর ডেটাটাইপস এবং কলাম অপশনস ডেটাবেস মডেলিং এবং ডেটাবেস অপারেশনকে সহজ এবং কার্যকরী করে। বিভিন্ন ডেটাটাইপ যেমন varchar, int, boolean, timestamp, json, uuid ইত্যাদি TypeORM এ সমর্থিত রয়েছে এবং কলাম অপশনগুলো যেমন nullable, default, unique, length, primary ইত্যাদি আপনাকে ডেটাবেসের কাঠামো নির্ধারণে সহায়তা করে। TypeORM এর মাধ্যমে ডেভেলপাররা ডেটাবেসে তথ্য সঞ্চয় এবং ম্যানিপুলেট করা সহজভাবে করতে পারে।
Primary Key কি?
Primary Key হলো একটি সারণীর (table) মধ্যে একটি নির্দিষ্ট কলাম বা কলামের কম্বিনেশন, যার মাধ্যমে প্রতিটি রেকর্ডকে একে অপর থেকে আলাদা করা হয়। এটি ডেটাবেসে প্রতিটি রেকর্ডের জন্য একটি ইউনিক (unique) পরিচয় তৈরি করে এবং ডুপ্লিকেট রেকর্ড এড়ানোর জন্য ব্যবহৃত হয়।
উদাহরণস্বরূপ, একটি ব্যক্তি সারণীতে id কলামটি একমাত্র Primary Key হতে পারে, যা প্রত্যেকটি ব্যক্তির জন্য একটি ইউনিক মান ধারণ করবে।
Auto-Increment কি?
Auto-Increment একটি বৈশিষ্ট্য যা Primary Key এর মানের জন্য ব্যবহৃত হয়, যাতে ডেটাবেসে নতুন রেকর্ড সংযোজনের সময় তা স্বয়ংক্রিয়ভাবে আগের মানের পরবর্তী মান দিয়ে পূর্ণ হয়। সাধারণত এটি সংখ্যাগত মান হয়, যেমন 1, 2, 3, 4 ইত্যাদি। এটি সাধারণত Primary Key বা Unique Key এর জন্য ব্যবহৃত হয়, যাতে প্রতিটি রেকর্ডে একটি ইউনিক আইডি তৈরি হয়।
TypeORM এ Primary Key এবং Auto-Increment সেট করা
TypeORM একটি Object-Relational Mapper (ORM) যা TypeScript এবং JavaScript ব্যবহার করে ডেটাবেসের সাথে কাজ করে। TypeORM এ Primary Key এবং Auto-Increment সেট করতে, আপনাকে Entity ক্লাসে @PrimaryGeneratedColumn() এবং @PrimaryColumn() ডেকোরেটর ব্যবহার করতে হবে।
১. Primary Key সেট করা
প্রথমত, @PrimaryGeneratedColumn() ডেকোরেটর ব্যবহার করে আপনি একটি Primary Key সেট করতে পারেন। এটি স্বয়ংক্রিয়ভাবে একটি ইউনিক ID তৈরি করবে। সাধারণত এটি Auto-Increment ফিচারের সাথে ব্যবহার হয়।
সিনট্যাক্স:
import { Entity, PrimaryGeneratedColumn, Column } from 'typeorm';
@Entity()
export class User {
@PrimaryGeneratedColumn()
id: number;
@Column()
name: string;
}
এখানে id কলামটি Primary Key হিসেবে ব্যবহৃত হবে এবং এটি Auto-Increment হবে। TypeORM স্বয়ংক্রিয়ভাবে প্রতিটি নতুন রেকর্ডের জন্য একটি ইউনিক id তৈরি করবে।
২. Auto-Increment সেট করা
@PrimaryGeneratedColumn() ডেকোরেটর Auto-Increment ফিচারকে সমর্থন করে এবং Primary Key কলামের জন্য স্বয়ংক্রিয়ভাবে সংখ্যা ইনক্রিমেন্ট করে। এটি সাধারণত MySQL, PostgreSQL, এবং অন্যান্য রিলেশনাল ডেটাবেসের জন্য সঠিকভাবে কাজ করে।
উদাহরণ:
import { Entity, PrimaryGeneratedColumn, Column } from 'typeorm';
@Entity()
export class Product {
@PrimaryGeneratedColumn()
id: number; // Auto-Increment Primary Key
@Column()
name: string;
@Column()
price: number;
}
এখানে, id কলামটি প্রতিবার নতুন রেকর্ড যুক্ত করার সময় স্বয়ংক্রিয়ভাবে বাড়বে, যেমন 1, 2, 3, ইত্যাদি।
@PrimaryGeneratedColumn() এর অতিরিক্ত অপশন
@PrimaryGeneratedColumn() ডেকোরেটরের মাধ্যমে আপনি Auto-Increment এর ক্ষেত্রে কিছু অতিরিক্ত অপশনও সেট করতে পারেন, যেমন:
strategy: এটি Auto-Increment-এর কৌশল নির্ধারণ করে।increment: সাধারণ Auto-Increment কৌশল।uuid: UUID ব্যবহার করে ইউনিক আইডি তৈরি করা।
উদাহরণ: Auto-Increment এবং UUID এর ব্যবহার:
import { Entity, PrimaryGeneratedColumn, Column } from 'typeorm';
@Entity()
export class Customer {
@PrimaryGeneratedColumn('uuid')
id: string; // UUID Primary Key
@Column()
name: string;
@Column()
email: string;
}
এখানে, id কলামটি UUID টাইপের হবে এবং প্রতি রেকর্ডের জন্য ইউনিক আইডি তৈরি করবে, যা সাধারণ সংখ্যার পরিবর্তে UUID ফরম্যাটে থাকবে।
@PrimaryColumn() এর ব্যবহার
যদি আপনি নিজে থেকে Primary Key সেট করতে চান এবং এটি Auto-Increment করতে না চান, তবে আপনি @PrimaryColumn() ডেকোরেটর ব্যবহার করতে পারেন। এই ক্ষেত্রে, আপনি প্রতিটি রেকর্ডের জন্য কাস্টম আইডি প্রদান করবেন।
উদাহরণ:
import { Entity, PrimaryColumn, Column } from 'typeorm';
@Entity()
export class Order {
@PrimaryColumn()
orderId: string; // Custom Primary Key, No Auto-Increment
@Column()
customerName: string;
@Column()
totalAmount: number;
}
এখানে, orderId হল কাস্টম Primary Key এবং এটি Auto-Increment হবে না। আপনাকে এটি নিজে থেকে প্রদান করতে হবে।
সারাংশ
TypeORM এ Primary Key এবং Auto-Increment সেট করা খুবই সহজ। @PrimaryGeneratedColumn() ডেকোরেটরের মাধ্যমে আপনি Primary Key এবং Auto-Increment ফিচারটি সেট করতে পারেন। TypeORM এ Primary Key সাধারণত id কলামে রাখা হয় এবং এটি প্রতিটি রেকর্ডের জন্য একটি ইউনিক মান তৈরি করে। @PrimaryGeneratedColumn() এর মাধ্যমে Auto-Increment, UUID এবং অন্যান্য স্ট্র্যাটেজি ব্যবহারের সুযোগও রয়েছে, যা ডেটাবেস ডিজাইন এবং ম্যানেজমেন্টে আরও নমনীয়তা দেয়।
Read more