ترحيلات قواعد البيانات في TypeScript: كيفية إدارة المخطط دون ألم
تتطلب التطوير باستخدام TypeScript ليس فقط كتابة كود صارم الأنواع، بل أيضًا إدارة موثوقة لهيكل قاعدة البيانات. الترحيلات هي طريقة لإصدار تغييرات مخطط قاعدة البيانات، مما يسمح للفريق بمزامنة حالة قاعدة البيانات مع كود التطبيق. في هذه المقالة، سنستعرض المكتبات الرئيسية للترحيلات في مشاريع TypeScript، وميزاتها، ونقدم أمثلة عملية.
ما هي الترحيلات ولماذا هي مطلوبة؟
الترحيل هو ملف يحتوي على تعليمات تصف تغييرات مخطط قاعدة البيانات (إنشاء أو تعديل أو حذف الجداول والفهارس والعلاقات). مزايا استخدام الترحيلات:
- إصدار التغييرات — يتم تسجيل كل تغيير في ملف منفصل مع طابع زمني أو رقم.
- قابلية التكرار — يمكن نشر قاعدة البيانات من الصفر على أي إصدار.
- العمل الجماعي — يطبق جميع المطورين نفس التغييرات.
- التراجع — إمكانية إلغاء التغييرات غير الناجحة.
الأدوات الشائعة للترحيلات في TypeScript
1. TypeORM
TypeORM هو ORM يعمل مع TypeScript وJavaScript. نظام الترحيلات المدمج يعتمد على سطر الأوامر.
التثبيت:
npm install typeorm reflect-metadatanpm install @types/node --save-devمثال على إنشاء ترحيل:
npx typeorm migration:create src/migration/AddUserTableمثال على كود الترحيل:
import { MigrationInterface, QueryRunner, Table } from "typeorm";
export class AddUserTable1234567890123 implements MigrationInterface { public async up(queryRunner: QueryRunner): Promise<void> { await queryRunner.createTable(new Table({ name: "users", columns: [ { name: "id", type: "int", isPrimary: true, isGenerated: true, generationStrategy: "increment" }, { name: "name", type: "varchar", length: "255" }, { name: "email", type: "varchar", length: "255", isUnique: true } ] })); }
public async down(queryRunner: QueryRunner): Promise<void> { await queryRunner.dropTable("users"); }}تشغيل الترحيلات:
npx typeorm migration:runالمزايا: تكامل وثيق مع TypeORM، إنشاء تلقائي بناءً على الكيانات.
العيوب: قد يكون بطيئًا في المشاريع المعقدة، يتطلب إعداد التهيئة.
2. Prisma
Prisma هو ORM حديث مع نظام ترحيلات قوي. يستخدم لغة تعريفية (Prisma Schema Language).
التثبيت:
npm install prisma @prisma/clientnpx prisma initمثال على المخطط (schema.prisma):
model User { id Int @id @default(autoincrement()) name String email String @unique posts Post[]}
model Post { id Int @id @default(autoincrement()) title String content String? authorId Int author User @relation(fields: [authorId], references: [id])}إنشاء وتطبيق الترحيل:
npx prisma migrate dev --name initيقوم Prisma تلقائيًا بإنشاء ملف SQL وتطبيقه على قاعدة البيانات. يمكن أيضًا عرض الحالة:
npx prisma migrate statusالمزايا: نهج تعريفي، إنشاء تلقائي، توثيق ممتاز.
العيوب: مرتبط بـ Prisma، يصعب تجاوزه في السيناريوهات الخاصة.
3. Knex.js
Knex.js هو منشئ استعلامات خفيف الوزن لـ Node.js، يتضمن نظام ترحيلات. يعمل مع TypeScript من خلال إضافات