🔌 اتصال به پایگاه داده در NestJS؛ از TypeORM تا Prisma

در دنیای توسعه بک‌اند، اتصال به پایگاه داده یکی از مهم‌ترین بخش‌های هر پروژه است. NestJS با پشتیبانی از ابزارهای قدرتمند مانند TypeORM و Prisma، امکان مدیریت داده‌ها را به شکلی ساختاریافته، امن و قابل توسعه فراهم می‌کند. در این مقاله، به بررسی روش‌های اتصال به پایگاه داده، مدیریت مدل‌ها و ارتباطات، و استفاده از الگوهای مهاجرت و Repository در NestJS می‌پردازیم.

🔌 اتصال به پایگاه داده در NestJS؛ از TypeORM تا Prisma
🔌 اتصال به پایگاه داده در NestJS؛ از TypeORM تا Prisma

🧱 استفاده از TypeORM و Prisma

NestJS به صورت رسمی از TypeORM پشتیبانی می‌کند و همچنین با Prisma نیز کاملاً سازگار است. هر دو ابزار برای مدیریت پایگاه داده‌های رابطه‌ای مانند PostgreSQL، MySQL، و SQLite استفاده می‌شوند، اما رویکرد متفاوتی دارند.


TypeORM: یک ORM کلاسیک با انعطاف بالا

TypeORM یک ORM کامل برای TypeScript است که به توسعه‌دهندگان اجازه می‌دهد مدل‌های داده را با استفاده از کلاس‌ها و Decoratorها تعریف کنند. این ابزار به خوبی با معماری NestJS هماهنگ است و از تزریق وابستگی، Repository Pattern، و مهاجرت‌ها پشتیبانی می‌کند.

  • مثال تعریف یک موجودیت (Entity):

`typescript

@Entity()

export class User {

@PrimaryGeneratedColumn()

id: number;

@Column()

name: string;

}

`


Prisma: نسل جدید ORM با سرعت و دقت بالا

Prisma یک ORM مدرن است که از فایل‌های schema برای تعریف مدل‌ها استفاده می‌کند. این ابزار با تمرکز بر عملکرد بالا، تایپ‌گذاری دقیق، و تجربه توسعه‌دهنده، محبوبیت زیادی پیدا کرده است. Prisma به‌خصوص برای پروژه‌هایی که نیاز به تعامل پیچیده با پایگاه داده دارند، بسیار مناسب است.

  • مثال تعریف مدل در Prisma:

`prisma

model User {

id Int @id @default(autoincrement())

name String

}

`

هر دو ابزار مزایا و معایب خاص خود را دارند، اما NestJS این امکان را فراهم کرده که بسته به نیاز پروژه، از هرکدام استفاده کنید.


🔗 مدیریت ارتباطات و مدل‌های داده

در پروژه‌های واقعی، موجودیت‌ها معمولاً با یکدیگر ارتباط دارند. NestJS با استفاده از TypeORM یا Prisma، امکان تعریف انواع ارتباطات مانند One-to-One، One-to-Many، و Many-to-Many را فراهم می‌کند.

  • در TypeORM:

`typescript

@Entity()

export class Post {

@PrimaryGeneratedColumn()

id: number;

@ManyToOne(() => User, user => user.posts)

author: User;

}

`

  • در Prisma:

`prisma

model Post {

id Int @id @default(autoincrement())

title String

author User @relation(fields: [authorId], references: [id])

authorId Int

}

`

مدیریت ارتباطات به توسعه‌دهنده این امکان را می‌دهد که داده‌ها را به صورت ساختاریافته و منطقی ذخیره و بازیابی کند. همچنین، NestJS با استفاده از سرویس‌ها و Repositoryها، این ارتباطات را به صورت تمیز و قابل تست مدیریت می‌کند.


🛠️ مهاجرت‌ها و Repository Pattern

مهاجرت‌ها: تغییرات کنترل‌شده در ساختار پایگاه داده

مهاجرت‌ها (Migrations) ابزاری هستند برای اعمال تغییرات در ساختار پایگاه داده به صورت مرحله‌ای و قابل پیگیری. NestJS با TypeORM و Prisma امکان اجرای مهاجرت‌ها را فراهم می‌کند.

  • در TypeORM:

`bash

npx typeorm migration:create -n AddUserTable

npx typeorm migration:run

`

  • در Prisma:

`bash

npx prisma migrate dev --name init

`

مهاجرت‌ها به توسعه‌دهنده کمک می‌کنند تا تغییرات پایگاه داده را به صورت کنترل‌شده و قابل بازگشت اعمال کند، بدون اینکه داده‌های موجود از بین بروند.


Repository Pattern: جداسازی منطق داده از منطق تجاری

Repository Pattern یکی از الگوهای طراحی محبوب در NestJS است که به توسعه‌دهنده اجازه می‌دهد منطق دسترسی به داده‌ها را از منطق تجاری جدا کند. این الگو باعث افزایش تست‌پذیری، خوانایی، و انعطاف‌پذیری کد می‌شود.

در TypeORM، می‌توان از Repositoryها به صورت زیر استفاده کرد:

`typescript

@Injectable()

export class UserService {

constructor(

@InjectRepository(User)

private userRepository: Repository<User>,

) {}

async findAll(): Promise<User[]> {

return this.userRepository.find();

}

}

`

در Prisma، معمولاً از Client مستقیم استفاده می‌شود، اما می‌توان الگوی Repository را به صورت دستی پیاده‌سازی کرد.


✨ نتیجه‌گیری

اتصال به پایگاه داده در NestJS نه‌تنها ساده و سریع است، بلکه با ابزارهایی مانند TypeORM و Prisma، به توسعه‌دهنده امکان مدیریت حرفه‌ای داده‌ها را می‌دهد. با استفاده از مدل‌های دقیق، ارتباطات منطقی، مهاجرت‌های کنترل‌شده، و الگوی Repository، می‌توان پروژه‌هایی ساخت که هم قابل توسعه باشند و هم

قابل نگهداری.

اگر به دنبال ساخت بک‌اندی قدرتمند و مدرن هستی، NestJS با این ابزارها می‌تونه ستون فقرات پروژه‌ات باشه.