ترحيلات قواعد البيانات في 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:undo2. 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:run3. TypeORM — ترحيلات لمشاريع TypeScript
TypeORM هو ORM حديث يدعم كلاً من JavaScript وTypeScript. نظام الترحيلات الخاص به متكامل بشكل وثيق مع ديكورات الكيانات. التثبيت:
npm install typeorm reflect-metadata --savenpm in