Datenbankmigrationen in TypeScript: Vollständiger Überblick über Tools und praktischer Leitfaden
\n\nDatenbankmigrationen sind eine Methode zur Versionierung und schrittweisen Anwendung von Schemaänderungen der Datenbank (Erstellen, Ändern oder Löschen von Tabellen, Indizes und Constraints). Im TypeScript-Ökosystem gibt es mehrere leistungsstarke Tools zur Verwaltung von Migrationen. In diesem Artikel werden wir die drei beliebtesten Lösungen im Detail analysieren: TypeORM, Prisma und Drizzle ORM.
\n\nWozu sind Migrationen nötig?
\nOhne Migrationen nehmen Entwickler Änderungen oft manuell über die SQL-Konsole oder das Admin-Panel vor, was zu Folgendem führt:
\n- \n
- Verlust der Synchronisation zwischen Entwicklungs- und Produktionsumgebung; \n
- Fehlern aufgrund menschlicher Faktoren; \n
- Schwierigkeiten beim Rückgängigmachen von Änderungen. \n
Migrationen lösen diese Probleme, indem sie das automatische Anwenden und Zurücksetzen von Änderungen ermöglichen und die Historie aller Schemaänderungen im Code speichern.
\n\n1. TypeORM – Klassischer Ansatz mit ActiveRecord und Data Mapper
\nTypeORM ist einer der ausgereiftesten ORMs für TypeScript und JavaScript. Es unterstützt sowohl das ActiveRecord- als auch das Data-Mapper-Muster und verfügt über ein integriertes Migrationssystem.
\n\nInstallation und Einrichtung
\nnpm install typeorm reflect-metadata @types/node\nnpm install pg # für PostgreSQL\n\nErstellen Sie eine Konfigurationsdatei ormconfig.json oder verwenden Sie data-source.ts:
import { DataSource } from "typeorm";\n\nexport const AppDataSource = new DataSource({\n type: "postgres",\n host: "localhost",\n port: 5432,\n username: "user",\n password: "password",\n database: "mydb",\n entities: ["src/entity/*.ts"],\n migrations: ["src/migration/*.ts"],\n synchronize: false, // Autosynchronisierung deaktivieren\n});\n\nErstellung und Ausführung einer Migration
\nGenerieren Sie zunächst eine Migration basierend auf Änderungen an den Entitäten:
\nnpx typeorm migration:generate src/migration/AddUserTable -d src/data-source.ts\n\nBeispiel einer generierten Migration:
\nimport { MigrationInterface, QueryRunner, Table } from "typeorm";\n\nexport class AddUserTable1234567890 implements MigrationInterface {\n public async up(queryRunner: QueryRunner): Promise<void> {\n await queryRunner.createTable(\n new Table({\n name: "user",\n columns: [\n { name: "id", type: "int", isPrimary: true, isGenerated: true, generationStrategy: "increment" },\n { name: "name", type: "varchar", length: "255" },\n { name: "email", type: "varchar", isUnique: true },\n ],\n })\n );\n }\n\n public async down(queryRunner: QueryRunner): Promise<void> {\n await queryRunner.dropTable("user");\n }\n}\n\nWenden Sie die Migration an:
\nnpx typeorm migration:run -d src/data-source.ts\n\nVor- und Nachteile von TypeORM
\n- \n
- Vorteile: großes Ökosystem, viele Datenbanken (PostgreSQL, MySQL, SQLite, MSSQL), Generierung von Migrationen aus Entitäten. \n
- Nachteile: komplexe Konfiguration, langsame Arbeitsgeschwindigkeit bei vielen Entitäten, veraltete Codebasis. \n
2. Prisma – Modernes ORM mit automatischen Migrationen
\nPrisma ist der neue Standard in TypeScript ORM. Es verwendet ein deklaratives Schema (schema.prisma) und generiert automatisch Migrationen.
Installation und Initialisierung
\nnpm install prisma @prisma/client\nnpx prisma init\n\nDefinieren Sie das Modell in prisma/schema.prisma:
generator client {\n provider = "prisma-client-js"\n}\n\ndatasource db {\n provider = "postgresql"\n url = env("DATABASE_URL")\n}\n\nmodel User {\n id Auch in der Bibliothek
Überwachung von C# (.NET)-Anwendungen mit OpenTelemetry und Prometheus
OAuth-Client für Go (Golang): Verbindung zu OAuth 2.0-Anbietern
Konfiguration von PHP-Anwendungen: Bibliotheken und Ansätze
Aufgabenwarteschlangen für PHP: RabbitMQ, Gearman und Redis
Generierung von PDF-Berichten in PHP: Überblick über Bibliotheken und Beispiele