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

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

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

ابدأ الدورة

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

\n\n

نادرًا ما يخلو تطوير تطبيقات الويب الحديثة على Node.js من العمل مع قواعد البيانات. مع نمو المشروع، يتغير هيكل الجداول والفهارس والعلاقات حتمًا. التنفيذ اليدوي لبرامج SQL النصية على الخادم هو طريق نحو الفوضى والأخطاء. حل هذه المشكلة هو ترحيلات قواعد البيانات (database migrations). وهي آلية لإدارة إصدارات تغييرات المخطط، مما يسمح لفريق المطورين بتحديث هيكل قاعدة البيانات بشكل متزامن وآمن.

\n\n

في نظام JavaScript البيئي، توجد عدة أدوات ناضجة للعمل مع الترحيلات. دعنا نستعرض ثلاثة منهجيات رئيسية من خلال أمثلة على المكتبات الشائعة.

\n\n

1. Knex.js — منشئ استعلامات عالمي

\n\n

Knex.js ليس مجرد منشئ SQL، بل هو أداة كاملة للترحيلات والتعبئة (إدخال بيانات اختبارية). يدعم PostgreSQL، MySQL، SQLite وأنظمة إدارة قواعد بيانات أخرى. الميزة الرئيسية هي أنك تكتب الترحيلات بلغة JavaScript، ويقوم Knex بترجمتها إلى لهجة قاعدة البيانات المحددة.

\n\n

التثبيت والإعداد

\n
npm install knex\nnpm install pg  # لـ PostgreSQL
\n\n

نقوم بإنشاء ملف الإعداد knexfile.js:

\n
module.exports = {\n  development: {\n    client: 'pg',\n    connection: {\n      host: 'localhost',\n      user: 'user',\n      password: 'pass',\n      database: 'mydb'\n    },\n    migrations: {\n      directory: './migrations'\n    }\n  }\n};
\n\n

إنشاء وتنفيذ الترحيل

\n

لنقم بإنشاء ترحيل لجدول المستخدمين:

\n
npx knex migrate:make create_users_table
\n\n

سيظهر في مجلد migrations ملف يحمل طابعًا زمنيًا. نقوم بتحريره:

\n
exports.up = function(knex) {\n  return knex.schema.createTable('users', (table) => {\n    table.increments('id').primary();\n    table.string('username', 100).notNullable().unique();\n    table.string('email').notNullable();\n    table.timestamps(true, true); // created_at و updated_at\n  });\n};\n\nexports.down = function(knex) {\n  return knex.schema.dropTableIfExists('users');\n};
\n\n

نقوم بتطبيق الترحيل:

\n
npx knex migrate:latest
\n\n

التراجع عن آخر ترحيل:

\n
npx knex migrate:rollback
\n\n

يسمح Knex أيضًا بتنفيذ SQL خالص داخل الترحيلات إذا كانت هناك حاجة لمنطق محدد.

\n\n

2. Sequelize — ORM مع نظام ترحيل قوي

\n\n

Sequelize هو ORM شائع لـ Node.js، يدعم PostgreSQL، MySQL، MariaDB، SQLite و MSSQL. توفر واجهة الأوامر الخاصة به أوامر مريحة لإنشاء وإدارة الترحيلات، المدمجة بشكل وثيق مع النماذج.

\n\n

بدء العمل

\n
npm install sequelize sequelize-cli pg\nnpx sequelize-cli init
\n\n

نقوم بإنشاء نموذج وترحيل بأمر واحد:

\n
npx sequelize-cli model:generate --name User --attributes username:string,email:string
\n\n

سيؤدي ذلك إلى إنشاء ملفين: النموذج models/user.js والترحيل في migrations/. مثال على الترحيل:

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

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

\n
npx sequelize-cli db:m                    

توصيات