TypeScript में डेटाबेस माइग्रेशन: बिना दर्द के स्कीमा कैसे प्रबंधित करें
TypeScript में डेवलपमेंट के लिए न केवल कोड की सख्त टाइपिंग की आवश्यकता होती है, बल्कि डेटाबेस संरचना के विश्वसनीय प्रबंधन की भी आवश्यकता होती है। माइग्रेशन डेटाबेस स्कीमा में बदलावों को वर्ज़न करने का एक तरीका है, जो टीम को एप्लिकेशन कोड के साथ डेटाबेस की स्थिति को सिंक्रोनाइज़ करने की अनुमति देता है। इस लेख में, हम TypeScript प्रोजेक्ट्स में माइग्रेशन के लिए मुख्य लाइब्रेरीज़, उनकी विशेषताओं का विश्लेषण करेंगे और व्यावहारिक उदाहरण प्रस्तुत करेंगे।
माइग्रेशन क्या हैं और उनकी आवश्यकता क्यों है?
माइग्रेशन एक फ़ाइल है जिसमें डेटाबेस स्कीमा में बदलावों (टेबल, इंडेक्स, संबंधों का निर्माण, संशोधन या हटाना) का वर्णन करने वाले निर्देश होते हैं। माइग्रेशन के उपयोग के लाभ:
- वर्ज़निंग — प्रत्येक बदलाव को टाइमस्टैम्प या नंबर के साथ एक अलग फ़ाइल में दर्ज किया जाता है।
- पुनरुत्पादन क्षमता — किसी भी वर्ज़न पर डेटाबेस को शुरू से तैनात किया जा सकता है।
- टीम वर्क — सभी डेवलपर समान बदलाव लागू करते हैं।
- रोलबैक — असफल बदलावों को पूर्ववत करने की क्षमता।
TypeScript में माइग्रेशन के लिए लोकप्रिय टूल्स
1. TypeORM
TypeORM — एक ORM जो TypeScript और JavaScript के साथ काम करता है। इसमें निर्मित माइग्रेशन सिस्टम कमांड लाइन पर आधारित है।
स्थापना:
npm install typeorm reflect-metadatanpm install @types/node --save-devमाइग्रेशन जनरेट करने का उदाहरण:
npx typeorm migration:create src/migration/AddUserTableमाइग्रेशन कोड का उदाहरण:
import { MigrationInterface, QueryRunner, Table } from "typeorm";
export class AddUserTable1234567890123 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", length: "255" }, { name: "email", type: "varchar", length: "255", isUnique: true } ] })); }
public async down(queryRunner: QueryRunner): Promise<void> { await queryRunner.dropTable("users"); }}माइग्रेशन चलाना:
npx typeorm migration:runलाभ: TypeORM के साथ गहन एकीकरण, संस्थाओं के आधार पर स्वचालित जनरेशन।
नुकसान: जटिल प्रोजेक्ट्स में धीमा हो सकता है, कॉन्फ़िगरेशन सेटअप की आवश्यकता है।
2. Prisma
Prisma — एक आधुनिक ORM जिसमें शक्तिशाली माइग्रेशन सिस्टम है। यह डिक्लेरेटिव DSL (Prisma Schema Language) का उपयोग करता है।
स्थापना:
npm install prisma @prisma/clientnpx prisma initस्कीमा का उदाहरण (schema.prisma):
model User { id Int @id @default(autoincrement()) name String email String @unique posts Post[]}
model Post { id Int @id @default(autoincrement()) title String content String? authorId Int author User @relation(fields: [authorId], references: [id])}माइग्रेशन बनाना और लागू करना:
npx prisma migrate dev --name initPrisma स्वचालित रूप से एक SQL फ़ाइल बनाता है और इसे डेटाबेस पर लागू करता है। आप स्थिति भी देख सकते हैं:
npx prisma migrate statusलाभ: डिक्लेरेटिव दृष्टिकोण, स्वचालित जनरेशन, उत्कृष्ट दस्तावेज़ीकरण।
नुकसान: Prisma से बंधा हुआ, विशेष परिदृश्यों में इसे बायपास करना मुश्किल।
3. Knex.js
Knex.js — Node.js के लिए एक हल्का क्वेरी बिल्डर जिसमें माइग्रेशन सिस्टम शामिल है। यह ऐड-ऑन के माध्यम से TypeScript के साथ काम करता है।