ایجاد تغییرات دیتابیس در expressjs زمان production

13 خرداد 1398, خواندن در 3 دقیقه

در این مقاله می خواهیم درمورد ایجاد تغییرات در شمای دیتابیس هنگام production صحبت کنیم و این مورد رو برای فریمورک Express.js و دیتابیس های رابطه ای مثل MySql بررسی خواهیم کرد.

وقتی شما یک اپلیکیشن جدید میسازید, شما میتونید تغییراتی رو روی شمای دیتابیس انجام بدید و کاملا آزادی عمل دارید. معمولا, شما با دیتابیس محلی کار میکنید که کنترل کامل روی اون دارید. اگر ستونی رو فراموش کردید کافیه براحتی با SQL Editor یا CLI اون رو اضافه کنید. یا حتی اگر تغییر datatype داشته باشید براحتی انجام میدید.

تغییرات روی شمای دیتابیس زمانی دشوار میشه که اپلیکیشن شما توسط مردم در دنیای واقعی درحال استفاده باشه. این مخصوصا وقتی سخت میشه که تغییرات اساسی داشته باشید.

چه کاری نمی خواهید انجام بدید

اگر دارید از ORM در سمت سرور استفاده میکنید شما ممکنه قابلیت alter کردن جداول دیتابیس رو داشته باشید. اساسا این یعنی هر تغییر مدلی بصورت خودکار دیتابیس رو تغییر میده پس مدل شما و دیتابیس همیشه در حال تعامل هستند.

این در تئوری خوبه ولی در عمل به مشکل میخوره. باعث تغییرات ناخواسته میشه. تغییرات دیتابیس روی هر کاربر سایت شما اعمال میشه پس هر تغییر میتونه یه دردسر باشه.

چه کاری باید انجام بدید

استفاده از کتابخانه های migration مثل db-migrate برای اپلیکیشن های express یک راه مناسبه. یا اگر از Sail استفاده میکنید از sails-db-migrate بهره ببرید. 

یک کتابخانه migration به شما اجازه میده migration ها رو درحالی که اپلیکیشن رو میسازید, طراحی کنید. بهتره این رو با مثال های عملی توضیح داد.

فرض کنیم جدول Users رو داریم که شامل فیلدهای زیره :

  • username
  • email
  • createdAt

حالا اپلیکیشن شما نیاز به فیلد address داره. بیایید با استفاده از migration اینو اضافه کنیم.

اول فایل database.json بسازید و کمی پیکربندی دیتابیس اضافه کنید. برای اطلاعات بیشتر کلیک کنید.

{ 
  "dev": { 
    "driver": "mysql", 
    "user": "root", 
    "password": "root",
    "host": "localhost", 
    "database": "mydb"
  }
}

حالا یک migration میسازیم :

db-migrate create add-address-column-to-users

این یک مسیر جدید با نام migrations داخل پروژه اضافه میکنه و یک فایل با فرمت زیر داخل اون فولدر ایجاد میکنه :

-add-address-column-to-users.js 

فایل رو باز کنید و تغییرات زیر رو بدید :

var dbm = global.dbm || require('db-migrate');
var type = dbm.dataType;

exports.up = function(db, callback) {
 db.addColumn('Users', 'address', {type: 'string'}, callback);
};

exports.down = function(db, callback) {
 db.removeColumn('Users', 'address', {type: 'string'}, callback);
};

ما از متدهای ()addColumn و ()removeColumn برای ساخت migration استفاده کردیم.

فایل رو ذخیره کرده و دستور زیر رو اجرا کنید :

db-migrate up

این دستور تمام migration های موجود رو اجرا میکنه و عمل sync اون با دیتابیس رو انجام میده. علاوه بر این دیتابیس جدولی با اسم migrations خواهد داشت که طرح کلی از migration هایی که وجود داشتن رو دربر گرفته.

یکی دیگر از مزیت های migration اینه که شما میتونید اطلاعات کامل از تغییرات دیتابیس رو داشته باشید. اگر شما نیاز به برگرداندن یک migration داشتید از دستور زیر استفاده کنید :

db-migrate down --count=1

این آخرین migration که تعریف کردیم رو برمی گردونه.

منبع

چه امتیازی به این مقاله می دید؟
خیلی بد
بد
متوسط
خوب
عالی

دیدگاه‌ها و پرسش‌ها

برای ارسال دیدگاه لازم است، ابتدا وارد سایت شوید.

در حال دریافت نظرات از سرور، لطفا منتظر بمانید

در حال دریافت نظرات از سرور، لطفا منتظر بمانید