ترحيلات قواعد البيانات في Node.js: Sequelize وKnex وTypeORM

مدرب بايثون أونلاين للمبتدئين

تعلم Python بسهولة دون إرهاق نظري. حل مهام عملية مع التحقق التلقائي واكتب الكود مباشرة في المتصفح.

ابدأ الدورة

ترحيلات قواعد البيانات في JavaScript (Node.js): نظرة شاملة على الأدوات



ترحيلات قواعد البيانات هي طريقة للتحكم في تغييرات مخطط قاعدة البيانات وإدارة إصداراتها. في عالم Node.js، توجد عدة مكتبات قوية تتيح أتمتة هذه العملية. في هذه المقالة، سنستعرض ثلاث أدوات شائعة: Sequelize وKnex.js وTypeORM.



ما هي الترحيلات ولماذا نحتاجها؟

تحل الترحيلات مشكلة مزامنة هيكل قاعدة البيانات بين المطورين والبيئات المختلفة (dev، staging، production). بدلاً من تنفيذ نصوص SQL يدويًا، تصف التغييرات في كود JavaScript/TypeScript. المزايا:

  • تطبيق التغييرات تلقائيًا
  • إمكانية التراجع (rollback) إلى الإصدار السابق
  • تخزين سجل التغييرات في المستودع
  • دعم أنظمة إدارة قواعد بيانات مختلفة (PostgreSQL، MySQL، SQLite وغيرها)


1. Sequelize — ORM مع نظام ترحيلات مدمج

Sequelize هو أحد أشهر ORM لـ Node.js. يوفر أداة CLI لإدارة الترحيلات. التثبيت:

npm install --save sequelizenpm install --save-dev sequelize-clinpx sequelize-cli init

بعد التهيئة، يتم إنشاء المجلدات migrations وmodels وseeders وملف الإعدادات config/config.json.



إنشاء ترحيل

npx sequelize-cli migration:generate --name create-users-table

مثال على محتوى الترحيل:

'use strict';module.exports = {  up: async (queryInterface, Sequelize) => {    await queryInterface.createTable('Users', {      id: {        type: Sequelize.INTEGER,        primaryKey: true,        autoIncrement: true      },      username: {        type: Sequelize.STRING,        allowNull: false,        unique: true      },      email: {        type: Sequelize.STRING,        allowNull: false      },      createdAt: {        type: Sequelize.DATE,        allowNull: false      },      updatedAt: {        type: Sequelize.DATE,        allowNull: false      }    });  },  down: async (queryInterface, Sequelize) => {    await queryInterface.dropTable('Users');  }};


التطبيق والتراجع

npx sequelize-cli db:migratenpx sequelize-cli db:migrate:undo


2. Knex.js — منشئ استعلامات SQL مع ترحيلات

Knex.js ليس ORM، بل منشئ استعلامات قوي. يعتبر نظام الترحيلات الخاص به من أكثر الأنظمة مرونة. التثبيت:

npm install knex --savenpm install pg --save  # أو mysql، sqlite3npx knex init


إنشاء وكتابة ترحيل

npx knex migrate:make create_posts_table

مثال على الكود:

exports.up = function(knex) {  return knex.schema.createTable('posts', (table) => {    table.increments('id').primary();    table.string('title', 255).notNullable();    table.text('content');    table.integer('user_id').unsigned().references('id').inTable('users');    table.timestamps(true, true);  });};

exports.down = function(knex) { return knex.schema.dropTableIfExists('posts');};


أوامر العمل

npx knex migrate:latestnpx knex migrate:rollbacknpx knex migrate:status  # عرض الحالة

يدعم Knex أيضًا "البذور" (seeds) للتعبئة الأولية بالبيانات:

npx knex seed:make 01_demo_usersnpx knex seed:run


3. TypeORM — ترحيلات لمشاريع TypeScript

TypeORM هو ORM حديث يدعم كلاً من JavaScript وTypeScript. نظام الترحيلات الخاص به متكامل بشكل وثيق مع ديكورات الكيانات. التثبيت:

npm install typeorm reflect-metadata --savenpm in                    

توصيات