Migrations এবং Schema Management

টাইপওআরএম (TypeORM) - Web Development

360

Migrations কি?

Migrations হল একটি প্রক্রিয়া যার মাধ্যমে ডেটাবেসের স্কিমা (structure) পরিবর্তন করা হয়, যেমন নতুন টেবিল তৈরি করা, পুরোনো টেবিল পরিবর্তন করা, নতুন কলাম যোগ করা বা ফিল্ড মুছে ফেলা। Migrations মূলত ডেটাবেসের কাঠামো নিয়ন্ত্রণে সাহায্য করে এবং এর মাধ্যমে ডেভেলপাররা ডেটাবেসের পরিবর্তনগুলি ট্র্যাক করতে পারেন।

TypeORM এ, Migrations ডেটাবেসের স্কিমা পরিবর্তনগুলি সিস্টেম্যাটিকভাবে পরিচালনা করার জন্য ব্যবহৃত হয়, যাতে অ্যাপ্লিকেশন এবং ডেটাবেসের মধ্যে সিঙ্ক্রোনাইজেশন বজায় থাকে। এটি বিশেষত বড় প্রোজেক্টে সাহায্য করে, যেখানে বিভিন্ন ডেভেলপার একসাথে কাজ করছেন এবং ডেটাবেসের পরিবর্তনগুলো সুসংগঠিত রাখতে হবে।


TypeORM এ Migrations কিভাবে কাজ করে?

TypeORM এ মাইগ্রেশন ব্যবহারের জন্য আপনাকে ডেটাবেসের schema changes এবং তাদের সংশোধন ট্র্যাক করতে হবে। মাইগ্রেশন ফাইলগুলিতে ডেটাবেসে কার্যকরী পরিবর্তনগুলি বর্ণনা করা হয় এবং পরে সেগুলি run করা হয়। TypeORM মাইগ্রেশনগুলি cli (Command Line Interface) মাধ্যমে তৈরি এবং পরিচালনা করা হয়।


Migrations তৈরি এবং চালানোর ধাপগুলো

১. Migrations ফোল্ডার তৈরি করা

প্রথমে, TypeORM ডেটাবেস মাইগ্রেশন ফাইলগুলো সঞ্চয় করার জন্য একটি ফোল্ডার তৈরি করতে হবে। সাধারণত এটি migrations নামে থাকে।

mkdir src/migrations

২. Migrations কনফিগারেশন

TypeORM এর ormconfig.json বা data-source.ts ফাইলে মাইগ্রেশন সেটিংস কনফিগার করতে হবে।

ormconfig.json ফাইলের উদাহরণ:

{
  "type": "mysql",
  "host": "localhost",
  "port": 3306,
  "username": "root",
  "password": "password",
  "database": "mydatabase",
  "synchronize": false,
  "logging": true,
  "entities": ["src/entity/**/*.ts"],
  "migrations": ["src/migrations/**/*.ts"],
  "cli": {
    "migrationsDir": "src/migrations"
  }
}

৩. Migrations তৈরি করা

ডেটাবেস স্কিমা পরিবর্তন করার পর মাইগ্রেশন ফাইল তৈরি করতে TypeORM CLI ব্যবহার করা হয়।

npx typeorm migration:generate -n MigrationName

এটি একটি নতুন মাইগ্রেশন ফাইল তৈরি করবে যেখানে আপনার স্কিমা পরিবর্তনের কোড থাকবে। উদাহরণস্বরূপ, AddUserTable নামে একটি মাইগ্রেশন তৈরি করা হবে।

নতুন টেবিল তৈরি করার মাইগ্রেশন উদাহরণ:

import { MigrationInterface, QueryRunner, Table } from "typeorm";

export class AddUserTable1625684796000 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",
          },
          {
            name: "email",
            type: "varchar",
            isUnique: true,
          },
        ],
      })
    );
  }

  public async down(queryRunner: QueryRunner): Promise<void> {
    await queryRunner.dropTable("users");
  }
}

এখানে, up() মেথডে users টেবিল তৈরি করা হয়েছে, এবং down() মেথডে সেটি মুছে ফেলা হবে।

৪. Migrations চালানো

এখন, ডেটাবেসে মাইগ্রেশনটি প্রয়োগ করতে হবে। TypeORM এর migration:run কমান্ডটি ব্যবহার করে মাইগ্রেশন চালানো হয়।

npx typeorm migration:run

এটি ডেটাবেসে স্কিমা পরিবর্তনগুলি প্রয়োগ করবে এবং আপনার মাইগ্রেশন ফাইলগুলির মধ্যে বর্ণিত পরিবর্তন বাস্তবায়ন করবে।

৫. Migrations রিভার্স করা (Rollback)

যদি আপনি পূর্ববর্তী মাইগ্রেশনটি বাতিল করতে চান, তবে migration:revert কমান্ডটি ব্যবহার করতে পারেন।

npx typeorm migration:revert

এটি শেষ চালানো মাইগ্রেশনটি পূর্বাবস্থায় ফিরিয়ে নিয়ে আসবে।


Schema Synchronization vs Migrations

Schema Synchronization এবং Migrations এর মধ্যে পার্থক্য রয়েছে।

  • Schema Synchronization: TypeORM স্বয়ংক্রিয়ভাবে স্কিমা এবং কোডের মধ্যে সিঙ্ক্রোনাইজেশন করার জন্য synchronize: true অপশন ব্যবহার করতে পারে। এটি সহজ এবং দ্রুত, তবে বড় প্রকল্পে এর ব্যবহার ঝুঁকিপূর্ণ হতে পারে কারণ এটি ডেটাবেসের স্কিমা পরিবর্তনগুলি অ্যাপ্লিকেশনের পরিবর্তন অনুযায়ী আপডেট করে, যা ভুলে যাওয়ার বা বিরোধিতার কারণ হতে পারে।
  • Migrations: স্কিমা পরিবর্তনগুলি ট্র্যাক করা এবং নির্দিষ্টভাবে নিয়ন্ত্রিতভাবে প্রয়োগ করার জন্য Migrations ব্যবহার করা হয়। এটি ডেটাবেসের স্কিমার উপর আরও বেশি নিয়ন্ত্রণ এবং ট্র্যাকিং সরবরাহ করে।

মাইগ্রেশন ব্যবহার করার উপকারিতা:

  • ডেটাবেস স্কিমার ট্র্যাকিং: আপনার ডেটাবেসের সমস্ত পরিবর্তন মাইগ্রেশন ফাইলে ট্র্যাক করা হয়, যা ভবিষ্যতে সহজে ফিরিয়ে আনা যেতে পারে।
  • সিঙ্ক্রোনাইজেশন সমস্যা প্রতিরোধ: আপনি ডেটাবেসে পরিবর্তন করার আগে সেগুলো পরীক্ষা করতে পারবেন।
  • বিভিন্ন ডেভেলপারদের মধ্যে সিঙ্ক্রোনাইজেশন: একাধিক ডেভেলপার কাজ করার সময় ডেটাবেসের স্কিমা পরিবর্তনগুলি সমন্বয় করা সহজ হয়।

সারাংশ

TypeORMMigrations এবং Schema Management ডেটাবেস স্কিমার ট্র্যাকিং এবং পরিবর্তনগুলির কার্যকরী ব্যবস্থাপনার জন্য অপরিহার্য। Migrations আপনাকে ডেটাবেসের স্কিমা পরিবর্তনগুলি সিস্টেম্যাটিকভাবে ট্র্যাক করতে এবং প্রয়োগ করতে সহায়তা করে, যা ডেভেলপারদের কাজের গতি এবং কার্যকারিতা বৃদ্ধি করে। মাইগ্রেশন ফাইল তৈরি এবং সেগুলির প্রয়োগের মাধ্যমে ডেটাবেসের কাঠামো পরিবর্তনগুলি সুসংগঠিত রাখা যায়, এবং Schema Synchronization এর তুলনায় এটি আরও নির্ভরযোগ্য ও স্কেলেবল।

Content added By

Migrations কি?

Migrations হলো ডেটাবেসের স্ট্রাকচার বা স্কিমার পরিবর্তন ট্র্যাক করার একটি প্রক্রিয়া। এটি ডেটাবেসে সঞ্চিত ডেটার উপর প্রভাব ফেলবে এমন কোনো পরিবর্তন (যেমন সারণী তৈরি, কলাম পরিবর্তন, ইত্যাদি) করার জন্য ব্যবহৃত হয়। TypeORM-এর মাধ্যমে Migrations ডেটাবেসে কোনো পরিবর্তন কার্যকর করার আগে ডেভেলপাররা মাইগ্রেশন স্ক্রিপ্ট তৈরি করে এবং তারপর সেই স্ক্রিপ্টটি প্রয়োগ করেন। এটি ডেটাবেসের স্কিমা ম্যানেজমেন্ট এবং সংস্করণ নিয়ন্ত্রণের জন্য একটি অত্যন্ত গুরুত্বপূর্ণ টুল।

Migrations কেন প্রয়োজন?

ডেটাবেস ম্যানেজমেন্টে Migrations এর গুরুত্ব অনেক। সাধারণত ডেভেলপাররা অ্যাপ্লিকেশন ডেভেলপ করার সময় বিভিন্ন সময়ে ডেটাবেসের স্ট্রাকচার পরিবর্তন করতে হয়, যেমন নতুন টেবিল তৈরি করা, টেবিলের কলামগুলো আপডেট করা, বা ডেটাবেসে অন্যান্য পরিবর্তন আনা। Migrations এই সমস্ত পরিবর্তনগুলো ট্র্যাক এবং পরিচালনা করতে সাহায্য করে। Migrations ব্যবহারের কিছু গুরুত্বপূর্ণ কারণ হলো:

  1. ডেটাবেস স্কিমা ম্যানেজমেন্ট: ডেটাবেসে কোনো পরিবর্তন করার পর, মাইগ্রেশন স্ক্রিপ্টের মাধ্যমে আপনি সেই পরিবর্তনটি ট্র্যাক করতে পারেন এবং প্রয়োজনে পূর্ববর্তী অবস্থায় ফিরে যেতে পারেন।
  2. টিম কোঅর্ডিনেশন: যখন একাধিক ডেভেলপার একই প্রোজেক্টে কাজ করছেন, Migrations ডেটাবেসের পরিবর্তনগুলো নির্দিষ্ট আকারে সংরক্ষণ করে, যাতে সবাই একই ডেটাবেস স্ট্রাকচারে কাজ করতে পারে। এটি টিমের মধ্যে সমন্বয় বজায় রাখে।
  3. ডেটাবেস আপডেটের স্বয়ংক্রিয়তা: একাধিক পরিবেশে (যেমন ডেভেলপমেন্ট, টেস্টিং, প্রোডাকশন) ডেটাবেসের আপডেটগুলো সমানভাবে প্রয়োগ করা যায়।
  4. ডেটাবেস সংস্করণ নিয়ন্ত্রণ: Migrations এর মাধ্যমে আপনি ডেটাবেসের বিভিন্ন সংস্করণ ধরে রাখতে পারেন এবং কোনো স্কিমা পরিবর্তন বা আপডেটের সাথে সম্পর্কিত ইতিহাস পেতে পারেন।
  5. ডেটা নিরাপত্তা: মাইগ্রেশন ব্যবহারের মাধ্যমে ডেটাবেসের কাঠামো পরিবর্তনের সময় কোনো ভুল হতে পারে, যা অস্বস্তিকর বা বিপজ্জনক হতে পারে। মাইগ্রেশন স্ক্রিপ্টের মাধ্যমে এটি আরও পরিকল্পিত এবং নিরাপদভাবে পরিচালনা করা যায়।

TypeORM এ Migrations কীভাবে কাজ করে?

TypeORM মাইগ্রেশন সিস্টেমের মাধ্যমে ডেটাবেসের স্কিমা পরিবর্তনগুলি ট্র্যাক এবং পরিচালনা করা যায়। TypeORM এ মাইগ্রেশন তৈরি, প্রয়োগ এবং রিভার্স করা খুবই সহজ। TypeORM CLI কমান্ডের মাধ্যমে আপনি মাইগ্রেশন পরিচালনা করতে পারেন।

TypeORM এ Migrations তৈরি করা

১. Migrations সক্ষম করা

প্রথমে, আপনি ormconfig.json বা data-source.ts ফাইলে মাইগ্রেশন এবং অন্যান্য ডেটাবেস কনফিগারেশন সেটআপ করতে হবে:

{
  "type": "postgres", 
  "host": "localhost",
  "port": 5432,
  "username": "test",
  "password": "test",
  "database": "test_db",
  "entities": ["src/entity/*.ts"],
  "migrations": ["src/migration/*.ts"],
  "cli": {
    "migrationsDir": "src/migration"
  }
}

এখানে migrations এবং cli.migrationsDir সেট করা হয়েছে যাতে মাইগ্রেশন ফাইলগুলি সঠিকভাবে সংরক্ষণ করা যায়।

২. Migrations তৈরি করা

TypeORM CLI ব্যবহার করে মাইগ্রেশন তৈরি করা যায়। ডেটাবেসে যে পরিবর্তনগুলি আপনি করতে চান, তার ভিত্তিতে একটি নতুন মাইগ্রেশন স্ক্রিপ্ট তৈরি করা হয়।

typeorm migration:generate -n CreateUsersTable

এই কমান্ডটি CreateUsersTable নামে একটি নতুন মাইগ্রেশন স্ক্রিপ্ট তৈরি করবে। স্ক্রিপ্টে ডেটাবেস স্কিমা পরিবর্তন (যেমন টেবিল তৈরি বা কলাম যোগ করা) সংজ্ঞায়িত থাকবে।

৩. Migrations প্রয়োগ করা

একবার মাইগ্রেশন তৈরি হলে, আপনি এটি ডেটাবেসে প্রয়োগ করতে পারবেন:

typeorm migration:run

এই কমান্ডটি তৈরি করা মাইগ্রেশন স্ক্রিপ্ট ডেটাবেসে কার্যকর করবে এবং আপনার ডেটাবেস স্কিমাকে আপডেট করবে।

৪. Migrations রিভার্স করা

যদি আপনাকে কোনো মাইগ্রেশন পূর্ববর্তী অবস্থায় ফিরিয়ে নিয়ে যেতে হয়, তাহলে আপনি এটি migration:revert কমান্ডের মাধ্যমে করতে পারেন:

typeorm migration:revert

এই কমান্ডটি শেষ মাইগ্রেশন স্ক্রিপ্টটি রিভার্স করবে এবং ডেটাবেসে পূর্ববর্তী অবস্থায় ফিরিয়ে নিয়ে যাবে।


Migrations এবং Schema Management এ কিছু গুরুত্বপূর্ণ টিপস

  1. একটি পরিবর্তন, এক মাইগ্রেশন স্ক্রিপ্ট: ডেটাবেসের কাঠামো পরিবর্তন করলে, প্রতি পরিবর্তনের জন্য একটি আলাদা মাইগ্রেশন স্ক্রিপ্ট তৈরি করা উচিত। একাধিক পরিবর্তনকে এক মাইগ্রেশন স্ক্রিপ্টে মিশানো উচিত নয়।
  2. ডেভেলপমেন্ট, টেস্টিং এবং প্রোডাকশনে একসাথে কাজ: টেস্টিং পরিবেশে মাইগ্রেশন পরীক্ষার মাধ্যমে এটি নিশ্চিত করুন যে আপনার স্কিমা পরিবর্তনটি সঠিকভাবে কাজ করছে এবং প্রোডাকশনে কোনো সমস্যা তৈরি করছে না।
  3. মাইগ্রেশন স্ক্রিপ্টে সুনির্দিষ্ট মন্তব্য যুক্ত করা: যখন আপনি স্কিমা পরিবর্তন করবেন, প্রতিটি মাইগ্রেশন স্ক্রিপ্টে বুঝতে সহজ করে তোলার জন্য মন্তব্য যুক্ত করুন। এটি পরে স্কিমা পরিবর্তনের ইতিহাস ট্র্যাক করতে সাহায্য করবে।
  4. ডেটাবেসের বেকআপ রাখা: প্রোডাকশনে মাইগ্রেশন প্রয়োগ করার আগে ডেটাবেসের একটি পূর্ণাঙ্গ ব্যাকআপ নেয়া উচিত, যাতে কোনো ভুল হলে সহজে পুনরুদ্ধার করা যায়।

সারাংশ

Migrations একটি গুরুত্বপূর্ণ টুল যা ডেটাবেস স্কিমা পরিবর্তনগুলো ট্র্যাক এবং ম্যানেজ করতে সহায়তা করে। TypeORM এ মাইগ্রেশন ব্যবহারের মাধ্যমে আপনি ডেটাবেসের সঠিক সংস্করণ বজায় রাখতে পারেন এবং ডেভেলপাররা সহজে ডেটাবেস আপডেট করতে পারে। এটি টিমের মধ্যে সমন্বয় বজায় রাখে এবং ডেটাবেস পরিবর্তন প্রক্রিয়াকে আরও পরিকল্পিত এবং নিরাপদ করে তোলে। TypeORM CLI এর মাধ্যমে মাইগ্রেশন তৈরি, প্রয়োগ এবং রিভার্স করা সহজ এবং কার্যকর।

Content added By

Migrations কী?

Migrations হল একটি প্রক্রিয়া যা ডেটাবেস স্কিমা পরিবর্তন বা আপডেট করার জন্য ব্যবহৃত হয়। যখন ডেটাবেসের কাঠামো পরিবর্তন করতে হয় (যেমন নতুন টেবিল তৈরি করা, কোলাম যোগ করা বা মুছে ফেলা, বা অন্যান্য কাঠামোগত পরিবর্তন), তখন Migrations ব্যবহার করা হয়। এটি ডেটাবেসের সংস্করণ কন্ট্রোলের মত কাজ করে, যাতে আপনি ডেটাবেসে করা পরিবর্তনগুলি ট্র্যাক করতে পারেন এবং এটি বিভিন্ন পরিবেশে (উদাহরণস্বরূপ ডেভেলপমেন্ট, স্টেজিং এবং প্রোডাকশন) সিঙ্ক্রোনাইজ করা সহজ হয়।

TypeORM মাইগ্রেশন ব্যবহার করে ডেটাবেসের স্কিমা পরিবর্তন এবং আপডেট করার জন্য একটি শক্তিশালী উপায় প্রদান করে, যা ডেটাবেসের কাঠামোকে ট্র্যাক করা এবং কার্যকরভাবে পরিচালনা করা সহজ করে।


কেন Migrations প্রয়োজন?

Migrations ডেটাবেস স্কিমা পরিবর্তনের ইতিহাস ট্র্যাক করতে এবং স্কিমা আপডেটের প্রক্রিয়াকে সিস্টেমেটিকভাবে পরিচালনা করতে সহায়তা করে। এখানে কেন মাইগ্রেশন প্রয়োজন তার কিছু গুরুত্বপূর্ণ কারণ দেওয়া হলো:

  1. স্কিমা পরিবর্তনের ইতিহাস ট্র্যাক করা: যখন একটি বড় প্রজেক্টে একাধিক ডেভেলপার কাজ করেন, তখন স্কিমা পরিবর্তনগুলি ট্র্যাক করা এবং সঠিকভাবে প্রয়োগ করা প্রয়োজন। Migrations এর মাধ্যমে আপনি ডেটাবেসের কাঠামো পরিবর্তনগুলি সিস্টেমেটিকভাবে ট্র্যাক করতে পারেন।
  2. সহজ আপডেট এবং রোলব্যাক: Migrations এর মাধ্যমে ডেটাবেসের আপডেটগুলো পরিচালনা করা সহজ হয়ে ওঠে। যদি কোন আপডেট সমস্যা তৈরি করে, আপনি সহজেই পূর্ববর্তী সংস্করণে ফিরে যেতে পারবেন।
  3. প্রোডাকশন এবং ডেভেলপমেন্ট পরিবেশে সিঙ্ক্রোনাইজেশন: Migrations ডেটাবেসের পরিবর্তনগুলোকে একাধিক পরিবেশে সিঙ্ক্রোনাইজ করতে সাহায্য করে, যাতে ডেভেলপমেন্ট, স্টেজিং, এবং প্রোডাকশন পরিবেশে স্কিমা সঠিক থাকে।

TypeORM এ Migrations তৈরি এবং রান করা

TypeORM মাইগ্রেশন তৈরি এবং রান করার জন্য কিছু সহজ কমান্ড সরবরাহ করে। এগুলি ব্যবহারের মাধ্যমে আপনি ডেটাবেস স্কিমা পরিবর্তন করতে পারেন এবং সেগুলির ইতিহাস ট্র্যাক করতে পারেন।

১. Migrations কনফিগারেশন

মাইগ্রেশন সঠিকভাবে কাজ করার জন্য, প্রথমে আপনার ormconfig.json বা ormconfig.ts ফাইলটি কনফিগার করতে হবে। এখানে একটি সাধারণ কনফিগারেশন দেখানো হলো:

{
  "type": "mysql",
  "host": "localhost",
  "port": 3306,
  "username": "root",
  "password": "password",
  "database": "test_db",
  "synchronize": false,
  "logging": true,
  "migrations": [
    "src/migration/**/*.ts"
  ],
  "cli": {
    "migrationsDir": "src/migration"
  }
}

এখানে migrations এবং cli.migrationsDir নির্দেশ করে যে মাইগ্রেশন ফাইল কোথায় রাখা হবে এবং TypeORM সেই ফাইলগুলো কোথায় সন্ধান করবে।

২. Migrations তৈরি করা

TypeORM CLI ব্যবহার করে আপনি নতুন মাইগ্রেশন তৈরি করতে পারেন। মাইগ্রেশন তৈরির জন্য migration:generate অথবা migration:create কমান্ড ব্যবহার করতে হয়।

  • migration:create: এটি একটি খালি মাইগ্রেশন ফাইল তৈরি করে। আপনি নিজে থেকে মাইগ্রেশন কোড লিখবেন।
  • migration:generate: এটি ডেটাবেসের স্কিমা পরিবর্তন ট্র্যাক করে এবং সেই অনুযায়ী একটি মাইগ্রেশন ফাইল তৈরি করে।

migration:create কমান্ডের উদাহরণ:

typeorm migration:create -n CreateUsersTable

এই কমান্ডটি একটি নতুন মাইগ্রেশন ফাইল তৈরি করবে যার নাম হবে CreateUsersTable। ফাইলটি সাধারণত src/migration ফোল্ডারে তৈরি হবে।

migration:generate কমান্ডের উদাহরণ:

typeorm migration:generate -n AddNewColumnToUsers

এই কমান্ডটি আপনার বর্তমান ডেটাবেস স্কিমা এবং TypeORM এ তৈরি হওয়া Entity এর মধ্যে পার্থক্য চেক করবে এবং একটি নতুন মাইগ্রেশন ফাইল তৈরি করবে।

৩. Migrations রান করা

একবার মাইগ্রেশন ফাইল তৈরি হলে, আপনি TypeORM CLI ব্যবহার করে মাইগ্রেশনটি ডেটাবেসে প্রয়োগ করতে পারেন। এটি ডেটাবেসের স্কিমা আপডেট করবে এবং প্রয়োজনীয় টেবিল বা কোলাম তৈরি করবে।

migration:run কমান্ডের উদাহরণ:

typeorm migration:run

এই কমান্ডটি সব মাইগ্রেশন ফাইল রান করবে যা এখনও ডেটাবেসে প্রয়োগ করা হয়নি।

৪. Migrations রোলব্যাক করা

যদি আপনি কোন মাইগ্রেশন বাতিল করতে চান বা পূর্ববর্তী সংস্করণে ফিরে যেতে চান, তাহলে আপনি migration:revert কমান্ড ব্যবহার করতে পারেন। এটি শেষ হওয়া মাইগ্রেশনটি রোলব্যাক করে দেবে।

migration:revert কমান্ডের উদাহরণ:

typeorm migration:revert

এই কমান্ডটি আপনার ডেটাবেস থেকে সর্বশেষ মাইগ্রেশনটি রোলব্যাক করবে।


উদাহরণ

ধরা যাক, আমাদের একটি Users টেবিল তৈরি করতে হবে, এবং আমাদের প্রথম মাইগ্রেশন ফাইল তৈরি করতে হবে:

  1. মাইগ্রেশন ফাইল তৈরি করা:
typeorm migration:create -n CreateUsersTable
  1. মাইগ্রেশন কোড লেখা:

src/migration/1633652245401-CreateUsersTable.ts ফাইলে কোড লিখুন:

import {MigrationInterface, QueryRunner, Table} from "typeorm";

export class CreateUsersTable1633652245401 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',
                },
                {
                    name: 'email',
                    type: 'varchar',
                    isUnique: true,
                },
            ],
        }));
    }

    public async down(queryRunner: QueryRunner): Promise<void> {
        await queryRunner.dropTable('users');
    }

}

এখানে, up মেথডটি users টেবিল তৈরি করবে, এবং down মেথডটি users টেবিল মুছে ফেলবে।

  1. মাইগ্রেশন রান করা:
typeorm migration:run

এটি ডেটাবেসে users টেবিল তৈরি করবে।


সারাংশ

Migrations TypeORM এ একটি অত্যন্ত গুরুত্বপূর্ণ ফিচার যা ডেটাবেসের কাঠামো পরিবর্তন করার জন্য ব্যবহৃত হয়। এটি স্কিমার পরিবর্তনগুলি ট্র্যাক করার জন্য ব্যবহৃত হয় এবং ডেটাবেসে সেগুলি সিঙ্ক্রোনাইজ করার কাজ করে। Migrations তৈরি এবং রান করার জন্য TypeORM CLI কমান্ডগুলো ব্যবহৃত হয়। migration:create দিয়ে নতুন মাইগ্রেশন ফাইল তৈরি করা যায়, এবং migration:run দিয়ে তা ডেটাবেসে প্রয়োগ করা যায়। Migrations আপনার ডেটাবেসের স্কিমা পরিবর্তন ব্যবস্থাপনা সহজ এবং সুসংগঠিত রাখে, বিশেষ করে টিম ডেভেলপমেন্টে।

Content added By

Schema Synchronization কি?

Schema Synchronization হল একটি প্রক্রিয়া যেখানে ডেটাবেস স্কিমা (যেমন টেবিল, কলাম, সম্পর্ক ইত্যাদি) TypeORM এর Entity ক্লাসগুলির সাথে সিঙ্ক্রোনাইজ (সমন্বয়) করা হয়। TypeORM ডেটাবেসের স্কিমা এবং কোডের মধ্যে পার্থক্য খুঁজে বের করে এবং এগুলির মধ্যে সমন্বয় সাধন করে। এটি উন্নত ডেভেলপমেন্ট পরিবেশে কোড এবং ডেটাবেসের সামঞ্জস্য বজায় রাখতে সহায়তা করে, এবং ডেটাবেসের ডিজাইন দ্রুত পরিবর্তন করতে সুবিধা প্রদান করে।

TypeORM আপনাকে ডেটাবেস স্কিমা স্বয়ংক্রিয়ভাবে তৈরি, সংশোধন এবং সিঙ্ক্রোনাইজ করার সুযোগ দেয়। তবে, এই প্রক্রিয়ার কিছু সুবিধা এবং সীমাবদ্ধতা রয়েছে, যা আপনি যখন এটি ব্যবহার করবেন তখন জানতে হবে।


Schema Synchronization এর সুবিধা

  1. দ্রুত ডেভেলপমেন্ট:
    • Schema synchronization আপনাকে ডেটাবেস স্কিমা তৈরি এবং সংশোধন করতে সহায়তা করে, যাতে কোড এবং ডেটাবেসের মধ্যে সামঞ্জস্য বজায় রাখা যায়। এটি ডেটাবেস মডেল এবং টেবিলগুলোকে স্বয়ংক্রিয়ভাবে আপডেট করতে সহায়তা করে, ফলে ডেভেলপমেন্টের গতি বৃদ্ধি পায়।
  2. ডেটাবেস স্ট্রাকচার পরিবর্তন সহজ:
    • আপনি যখন Entity ক্লাসে পরিবর্তন করেন (যেমন নতুন কলাম বা সম্পর্ক যোগ করা), TypeORM সেগুলি ডেটাবেসে স্বয়ংক্রিয়ভাবে প্রয়োগ করে, যা মান্যতা নিশ্চিত করতে সহায়তা করে।
  3. কোড এবং ডেটাবেসের মধ্যে একত্রীকরণ:
    • স্কিমা সিঙ্ক্রোনাইজেশন নিশ্চিত করে যে কোড এবং ডেটাবেসের মধ্যে কোনও পার্থক্য নেই। আপনি যখন Entity ক্লাসে একটি নতুন কলাম বা টেবিল সংযুক্ত করেন, TypeORM সেগুলিকে ডেটাবেসে প্রতিফলিত করে।
  4. নতুন ডেভেলপারদের জন্য সহায়ক:
    • আপনি যখন নতুন প্রকল্পে কাজ করছেন, Schema synchronization এর মাধ্যমে দ্রুত ডেটাবেসের কাঠামো তৈরি করা সম্ভব, এবং নতুন ডেভেলপাররা কোডের সাথে ডেটাবেসের সংযোগ সহজেই বুঝতে পারে।
  5. স্বয়ংক্রিয় ডেটাবেস আপডেট:
    • synchronize অপশনটি ডাটাবেসের স্কিমা স্বয়ংক্রিয়ভাবে আপডেট করে, এবং আপনাকে manually ডেটাবেস ম্যানেজমেন্ট করতে হয় না, ফলে এর ব্যবহার সহজ এবং সুবিধাজনক হয়।

Schema Synchronization এর সীমাবদ্ধতা

  1. প্রোডাকশন পরিবেশে ব্যবহার ঝুঁকিপূর্ণ:
    • Production environment-এ Schema synchronization চালানো নিরাপদ নয়, কারণ এটি ডেটাবেসের স্কিমাতে স্বয়ংক্রিয়ভাবে পরিবর্তন ঘটাতে পারে, যা ডেটার ক্ষতি বা বিপর্যয়ের কারণ হতে পারে। প্রোডাকশনে আপনাকে ম্যানুয়াল মাইগ্রেশন ব্যবস্থার মাধ্যমে ডেটাবেস আপডেট করা উচিত।
  2. ডেটার অখণ্ডতা হুমকির সম্মুখীন:
    • TypeORM এর synchronize ফাংশন ডেটাবেসের পুরানো টেবিল বা কলাম মুছে ফেলতে পারে, যা গুরুত্বপূর্ণ ডেটার ক্ষতি হতে পারে। এটি ডেটাবেসের অখণ্ডতা হুমকির মুখে ফেলতে পারে, কারণ কোডের পরিবর্তনের ফলে সিস্টেমের ডেটা ভুলভাবে পরিবর্তিত হতে পারে।
  3. এন্টারপ্রাইজ লেভেল অ্যাপ্লিকেশনে সমস্যা:
    • বড় ও জটিল প্রকল্পে যেখানে ডেটাবেস মডেল এবং স্কিমা বেশ জটিল, সেখানে Schema synchronization ব্যবহারের ফলে অনেক সময় পারফরম্যান্স সমস্যা দেখা দিতে পারে। একসাথে অনেকগুলো সম্পর্ক বা কলাম পরিবর্তন করার ফলে সিস্টেমের দক্ষতা কমে যেতে পারে।
  4. ডেটাবেস স্কিমা পরিবর্তন ট্র্যাক না করা:
    • Schema synchronization স্বয়ংক্রিয়ভাবে ডেটাবেসে পরিবর্তন এনে দেয়, কিন্তু এটি ডেটাবেস স্কিমার পরিবর্তন ট্র্যাক করে না। অর্থাৎ, যদি কোনও ভুল পরিবর্তন হয়ে থাকে, তা আগে থেকে নির্ধারণ করা কঠিন। মাইগ্রেশন টুলসের মাধ্যমে পরিবর্তনগুলি ট্র্যাক করা নিরাপদ।
  5. ডেটাবেস মাইগ্রেশন ও ভার্সনিং সমস্যা:
    • Schema synchronization একটি সহজ উপায় হতে পারে, কিন্তু ডেটাবেস মাইগ্রেশন এবং ভার্সনিংয়ের জন্য TypeORM এর migrations পদ্ধতি ব্যবহার করা উচিত। মাইগ্রেশন প্রক্রিয়ায় ডেটাবেস স্কিমার পরিবর্তন সুনির্দিষ্টভাবে ট্র্যাক করা এবং সময়মত প্রয়োগ করা সম্ভব হয়, যা স্বয়ংক্রিয় স্কিমা সিঙ্ক্রোনাইজেশনের থেকে অধিক নিয়ন্ত্রিত এবং নিরাপদ।

TypeORM Schema Synchronization ব্যবহার কিভাবে করবেন?

TypeORM-এ Schema synchronization সক্ষম করতে আপনাকে synchronize: true কনফিগারেশনটি ব্যবহার করতে হবে। এটি ডেটাবেসের স্কিমা এবং Entity ক্লাসের মধ্যে সমন্বয় সাধন করে।

import { createConnection } from "typeorm";

createConnection({
  type: "mysql",
  host: "localhost",
  port: 3306,
  username: "root",
  password: "your-password",
  database: "test",
  entities: [
    // আপনার Entity ক্লাস গুলি এখানে অন্তর্ভুক্ত করুন
  ],
  synchronize: true,  // এটি ডেটাবেস স্কিমা সিঙ্ক্রোনাইজেশন সক্ষম করবে
  logging: true,
}).then(connection => {
  // আপনার ডেটাবেস লজিক এখানে
}).catch(error => console.log(error));

এখানে, synchronize: true ডেটাবেসের সাথে কোডের Entity ক্লাসের স্কিমা সিঙ্ক্রোনাইজ করবে।


সারাংশ

TypeORM এর Schema Synchronization একটি শক্তিশালী ফিচার যা ডেভেলপারদের ডেটাবেস স্কিমা এবং কোডের মধ্যে সামঞ্জস্য বজায় রাখতে সহায়তা করে। এর মাধ্যমে দ্রুত ডেভেলপমেন্ট প্রক্রিয়া হয় এবং নতুন ডেভেলপারদের জন্য কাজ সহজ হয়। তবে এটি প্রোডাকশন পরিবেশে ব্যবহারের জন্য উপযুক্ত নয়, কারণ এটি ডেটাবেসের অখণ্ডতা ও পারফরম্যান্স হুমকির মুখে ফেলতে পারে। বড় ও জটিল প্রোজেক্টে Schema Synchronization ব্যবহারের পরিবর্তে মাইগ্রেশন ব্যবস্থার মাধ্যমে ডেটাবেস আপডেট করা আরও নিরাপদ।

Content added By

Migrations এর ভূমিকা

Migrations হল ডেটাবেস স্কিমার পরিবর্তনগুলি ট্র্যাক এবং পরিচালনা করার একটি পদ্ধতি। যখন আপনি আপনার ডেটাবেসে কাঠামোগত পরিবর্তন করেন (যেমন নতুন টেবিল তৈরি করা, কলাম যুক্ত করা, ডেটা টাইপ পরিবর্তন করা ইত্যাদি), তখন migrations এর মাধ্যমে এই পরিবর্তনগুলি ডেটাবেসে প্রয়োগ করা হয়। Migrations লাইব্রেরি ডেভেলপারদের ডেটাবেসের সংস্করণ কন্ট্রোল করতে এবং স্কিমার পরিবর্তনগুলিকে ট্র্যাক করতে সাহায্য করে।

TypeORM একটি শক্তিশালী ORM যা migrations এর জন্য একটি ইন-বিল্ট সাপোর্ট প্রদান করে। এটি আপনার ডেটাবেসে কাঠামোগত পরিবর্তনগুলি ট্র্যাক করার জন্য একটি মাইগ্রেশন সিস্টেম সরবরাহ করে এবং আপনি মাইগ্রেশন কমান্ডের মাধ্যমে এই পরিবর্তনগুলো সহজেই প্রয়োগ এবং ফিরিয়ে আনতে পারেন।

Migrations এর সুবিধা

  1. ডেটাবেস স্কিমা ট্র্যাক করা: মাইগ্রেশনগুলি ডেটাবেস স্কিমার পরিবর্তনগুলিকে ট্র্যাক করে রাখে, যাতে আপনি সঠিক সংস্করণে কাজ করতে পারেন।
  2. টিম কোল্যাবোরেশন: একাধিক ডেভেলপার যদি একই প্রোজেক্টে কাজ করেন, তাহলে মাইগ্রেশনগুলি ডেটাবেস পরিবর্তনগুলি সিঙ্ক্রোনাইজ করতে সাহায্য করে।
  3. ডেটাবেস সংস্করণ কন্ট্রোল: মাইগ্রেশনগুলি ডেটাবেসের সংস্করণ কন্ট্রোল করতে সাহায্য করে, যাতে আপনি পূর্ববর্তী সংস্করণে ফিরে যেতে পারেন বা পরিবর্তন করতে পারেন।

TypeORM-এ Migrations পরিচালনা

TypeORM-এ মাইগ্রেশন তৈরি এবং পরিচালনা করা সহজ। এখানে আমরা মাইগ্রেশন ব্যবহারের জন্য কিছু Best Practices আলোচনা করব।


১. ডেটাবেস স্কিমা পরিবর্তনের জন্য মাইগ্রেশন তৈরি করুন

প্রথমেই আপনার ডেটাবেসের স্কিমা পরিবর্তন করতে হবে এবং তারপর মাইগ্রেশন তৈরি করতে হবে। TypeORM আপনাকে স্বয়ংক্রিয়ভাবে মাইগ্রেশন ফাইল তৈরি করতে সাহায্য করে।

মাইগ্রেশন তৈরি করার পদ্ধতি:

typeorm migration:generate -n MigrationName

এই কমান্ডটি TypeORM কে আপনার Entity ক্লাসগুলির মধ্যে পরিবর্তনগুলি স্ক্যান করতে বলে এবং ডেটাবেসে পরিবর্তন করার জন্য মাইগ্রেশন ফাইল তৈরি করে। এটি একসাথে SQL কুয়েরি তৈরি করবে যেগুলি ডেটাবেসে প্রয়োগ করা হবে।


২. মাইগ্রেশন ফাইলের মধ্যে SQL কুয়েরি স্পষ্ট করুন

TypeORM স্বয়ংক্রিয়ভাবে মাইগ্রেশন ফাইল তৈরি করতে সক্ষম, তবে কখনও কখনও আপনাকে নিজে SQL কুয়েরি মডিফাই করতে হতে পারে। উদাহরণস্বরূপ, যদি কোনও বিশেষ ডেটাবেস ফিচার (যেমন ফাংশন বা ট্রিগার) বা কাস্টম লজিক প্রয়োগ করতে হয়, তাহলে আপনি নিজেই মাইগ্রেশন ফাইলে কোড লিখে এই পরিবর্তনগুলি ট্র্যাক করতে পারেন।

মাইগ্রেশন ফাইল উদাহরণ:

import { MigrationInterface, QueryRunner } from "typeorm";

export class AddUserTable1623917595000 implements MigrationInterface {
  public async up(queryRunner: QueryRunner): Promise<void> {
    await queryRunner.query(`CREATE TABLE user (id INT PRIMARY KEY, name VARCHAR(255))`);
  }

  public async down(queryRunner: QueryRunner): Promise<void> {
    await queryRunner.query(`DROP TABLE user`);
  }
}

এখানে, up() মেথড নতুন টেবিল তৈরি করছে এবং down() মেথড সেই টেবিলটি ডিলিট করছে। মাইগ্রেশন ফাইলে এমন পরিবর্তনগুলি ডাটাবেসে এক্সিকিউট হবে যখন আপনি মাইগ্রেশন চালাবেন।


৩. ডেটাবেস পরিবর্তন ছোট এবং পর্যায়ক্রমিক রাখুন

ডেটাবেস স্কিমার বড় পরিবর্তন করার পরিবর্তে ছোট ছোট মাইগ্রেশন তৈরি করুন। এটি একাধিক ডেভেলপার এবং টিমের মধ্যে স্কিমা পরিবর্তন করার সময় সমস্যা এড়াতে সহায়তা করে। একযোগে বড় বড় পরিবর্তন একাধিক মাইগ্রেশনে ভাগ করা উচিত যাতে ভুল হওয়ার সম্ভাবনা কম হয় এবং ডেটাবেসে কম ঝুঁকি থাকে।

উদাহরণ:

typeorm migration:generate -n AddUserTable
typeorm migration:generate -n AddUserEmailColumn

এভাবে একাধিক ছোট মাইগ্রেশন তৈরি করতে পারেন, যা পরবর্তীতে ধারাবাহিকভাবে প্রয়োগ করা হবে।


৪. মাইগ্রেশন ব্যাকআপ এবং রিভার্স

এটি একটি ভালো অভ্যাস যে আপনি আপনার ডেটাবেসের গুরুত্বপূর্ণ মাইগ্রেশন করার আগে ব্যাকআপ নেবেন। TypeORM এ down() মেথডের মাধ্যমে আপনি মাইগ্রেশন পরিবর্তনগুলি পূর্বাবস্থায় ফিরিয়ে আনতে পারবেন।

আপনার যদি কোনও সমস্যা হয় বা ডেটাবেসের মাইগ্রেশন পরিবর্তন ফেরত নিতে চান, তবে down() মেথড ব্যবহার করুন:

typeorm migration:revert

এই কমান্ডটি শেষ মাইগ্রেশনটিকে উল্টোভাবে প্রয়োগ করবে।


৫. মাইগ্রেশন ম্যানেজমেন্টে লকিং ব্যবহার করুন

ডেটাবেস মাইগ্রেশনগুলির মধ্যে যদি একাধিক ডেভেলপার কাজ করে, তবে locking mechanism ব্যবহার করা উচিত যাতে একই সময়ে একাধিক মাইগ্রেশন প্রক্রিয়া চলে না। TypeORM এই লকিং মেকানিজমের মাধ্যমে নিশ্চিত করে যে একসাথে একাধিক মাইগ্রেশন না চলুক।

যদি একাধিক ডেভেলপার বা সিস্টেম একই ডেটাবেসে কাজ করে, তবে মাইগ্রেশনগুলো সঠিকভাবে এবং পর্যায়ক্রমে প্রয়োগ হবে।


৬. মাইগ্রেশন টেস্টিং করুন

প্রোডাকশন ডেটাবেসে মাইগ্রেশন প্রয়োগ করার আগে, এটি লোকাল ডেটাবেসে বা ডেভেলপমেন্ট এনভায়রনমেন্টে পরীক্ষা করা উচিত। এটি আপনাকে নিশ্চিত করতে সাহায্য করবে যে আপনার মাইগ্রেশন কোনো সমস্যা সৃষ্টি করছে না এবং ডেটাবেস সঠিকভাবে আপডেট হচ্ছে।

টেস্টিং করার পদ্ধতি:

  1. লোকাল ডেটাবেসে মাইগ্রেশন চালান:

    typeorm migration:run
    
  2. টেস্ট করুন ডেটাবেসে নতুন কাঠামো কার্যকর হয়েছে কিনা।

৭. মাইগ্রেশন ফাইলের ভার্সন কন্ট্রোল (VCS)

ডেটাবেসের সমস্ত মাইগ্রেশন ফাইলগুলোকে ভার্সন কন্ট্রোল সিস্টেম (যেমন Git) এর মাধ্যমে ট্র্যাক করুন। এটি মাইগ্রেশন ইতিহাস রক্ষা করতে এবং সঠিক সময়ে সঠিক মাইগ্রেশন প্রয়োগ করতে সহায়তা করবে।

ফাইল পরিচালনা:

  1. মাইগ্রেশন ফাইল গুলি একে অপরের সাথে সিঙ্ক্রোনাইজ রাখুন এবং Git এ কমিট করুন।
  2. পরিবর্তনগুলি সংরক্ষণ করতে এবং অপ্রয়োজনীয় ফাইলগুলি এড়িয়ে চলুন।

সারাংশ

Migrations ডেটাবেস পরিবর্তন এবং পরিচালনার জন্য অত্যন্ত গুরুত্বপূর্ণ একটি টুল। TypeORM-এ মাইগ্রেশন ব্যবহারের মাধ্যমে ডেটাবেসের স্কিমার পরিবর্তন ট্র্যাক এবং প্রয়োগ করা সহজ হয়। কিছু Best Practices অন্তর্ভুক্ত রয়েছে:

  1. ডেটাবেস স্কিমা পরিবর্তন ছোট এবং পর্যায়ক্রমিক রাখুন।
  2. মাইগ্রেশন ফাইলের মধ্যে SQL কুয়েরি স্পষ্টভাবে লিখুন।
  3. ডেটাবেস পরিবর্তনগুলির জন্য মাইগ্রেশন ব্যাকআপ এবং রিভার্স অপারেশন ব্যবহার করুন।
  4. একাধিক ডেভেলপারদের জন্য লকিং ব্যবহার করুন এবং মাইগ্রেশন টেস্টিং করুন।
  5. মাইগ্রেশন ফাইলগুলি ভার্সন কন্ট্রোল সিস্টেমে রাখুন।

এই সবগুলো মাইগ্রেশন পরিচালনায় সহায়তা করবে এবং ডেটাবেস স্কিমার উন্নতভাবে পরিচালনা করতে সহায়ক হবে।

Content added By
Promotion

Are you sure to start over?

Loading...