Datenbankmigrationen in TypeScript: Vollständiger Leitfaden zu Tools und Ansätzen

Online Python-Trainer für Anfänger

Lernen Sie Python einfach ohne theoretische Überlastung. Lösen Sie praktische Aufgaben mit automatischer Überprüfung und schreiben Sie Code direkt im Browser.

Kurs starten

Datenbankmigrationen in TypeScript: So verwalten Sie das Schema schmerzfrei

Die Entwicklung mit TypeScript erfordert nicht nur eine strenge Typisierung des Codes, sondern auch eine zuverlässige Verwaltung der Datenbankstruktur. Migrationen sind eine Möglichkeit, Schemaänderungen der Datenbank zu versionieren, die es dem Team ermöglicht, den Datenbankzustand mit dem Anwendungscode zu synchronisieren. In diesem Artikel betrachten wir die wichtigsten Bibliotheken für Migrationen in TypeScript-Projekten, ihre Besonderheiten und geben praktische Beispiele.



Was sind Migrationen und warum werden sie benötigt?

Eine Migration ist eine Datei mit Anweisungen, die Änderungen am Datenbankschema beschreiben (Erstellen, Ändern oder Löschen von Tabellen, Indizes, Beziehungen). Vorteile der Verwendung von Migrationen:

  • Versionierung — jede Änderung wird in einer separaten Datei mit einem Zeitstempel oder einer Nummer festgehalten.
  • Reproduzierbarkeit — die Datenbank kann von Grund auf in jeder Version bereitgestellt werden.
  • Teamarbeit — alle Entwickler wenden dieselben Änderungen an.
  • Rollback — Möglichkeit, fehlgeschlagene Änderungen rückgängig zu machen.


Beliebte Tools für Migrationen in TypeScript



1. TypeORM

TypeORM ist ein ORM, das mit TypeScript und JavaScript arbeitet. Das integrierte Migrationssystem basiert auf der Befehlszeile.

Installation:

npm install typeorm reflect-metadatanpm install @types/node --save-dev

Beispiel für die Generierung einer Migration:

npx typeorm migration:create src/migration/AddUserTable

Beispiel für Migrationscode:

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"); }}

Ausführen von Migrationen:

npx typeorm migration:run

Vorteile: enge Integration mit TypeORM, automatische Generierung basierend auf Entitäten.

Nachteile: kann bei komplexen Projekten langsam sein, Konfiguration erforderlich.



2. Prisma

Prisma ist ein modernes ORM mit einem leistungsstarken Migrationssystem. Es verwendet eine deklarative DSL (Prisma Schema Language).

Installation:

npm install prisma @prisma/clientnpx prisma init

Beispielschema (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])}

Erstellen und Anwenden einer Migration:

npx prisma migrate dev --name init

Prisma erstellt automatisch eine SQL-Datei und wendet sie auf die Datenbank an. Der Status kann auch eingesehen werden:

npx prisma migrate status

Vorteile: deklarativer Ansatz, automatische Generierung, hervorragende Dokumentation.

Nachteile: an Prisma gebunden, schwierig bei speziellen Szenarien zu umgehen.



3. Knex.js

Knex.js ist ein leichtgewichtiger Query Builder für Node.js, der ein Migrationssystem enthält. Es funktioniert mit TypeScript über eine Ergänzung

Empfehlungen