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-devBeispiel für die Generierung einer Migration:
npx typeorm migration:create src/migration/AddUserTableBeispiel 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:runVorteile: 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 initBeispielschema (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 initPrisma erstellt automatisch eine SQL-Datei und wendet sie auf die Datenbank an. Der Status kann auch eingesehen werden:
npx prisma migrate statusVorteile: 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
Auch in der Bibliothek
reflect-metadata für TypeScript: Komplettguide mit Beispielen
SMS-Versand mit TypeScript: API-Bibliotheken und Integration
Go (Golang) Standardbibliothek: Vollständiger Überblick
CLI-Frameworks für TypeScript: vollständige Übersicht und Anwendungsbeispiele