Use Cases

DB-Migrationen mit Claude Code automatisieren

Erfahren Sie, wie Sie DB-Migrationen mit Claude Code automatisieren. Mit praktischen Codebeispielen und Schritt-für-Schritt-Anleitung.

DB-Migrationsprobleme mit Claude Code lösen

Das manuelle Schreiben von Migrationsdateien bei jedem Schemachange ist aufwendig und fehleranfällig. Mit Claude Code können Sie von der Schema-Designänderung über die Migrationsgenerierung bis zur Seed-Daten-Aktualisierung alles in einem Zug erledigen.

Migration mit Prisma

Vom Schema-Design bis zur Migrationsausführung

> Füge dem Prisma-Schema die folgenden Tabellen hinzu und generiere und wende die Migration an.
>
> Tabelle: Order
> - id: UUID, Primärschlüssel
> - userId: Fremdschlüssel zu User
> - items: OrderItem[] (1:n)
> - totalAmount: Decimal
> - status: enum (pending, confirmed, shipped, delivered, cancelled)
> - createdAt, updatedAt

Beispiel eines von Claude Code generierten Schemas.

enum OrderStatus {
  pending
  confirmed
  shipped
  delivered
  cancelled
}

model Order {
  id          String      @id @default(uuid())
  userId      String
  user        User        @relation(fields: [userId], references: [id])
  items       OrderItem[]
  totalAmount Decimal     @db.Decimal(10, 2)
  status      OrderStatus @default(pending)
  createdAt   DateTime    @default(now())
  updatedAt   DateTime    @updatedAt

  @@index([userId])
  @@index([status])
}

model OrderItem {
  id        String @id @default(uuid())
  orderId   String
  order     Order  @relation(fields: [orderId], references: [id], onDelete: Cascade)
  productId String
  quantity  Int
  price     Decimal @db.Decimal(10, 2)
}

Anschließend führt Claude Code automatisch den Migrationsbefehl aus.

npx prisma migrate dev --name add_order_tables

Migration mit Drizzle

Auch bei Verwendung von Drizzle ORM können Sie ähnliche Anweisungen geben.

> Füge dem Drizzle ORM-Schema eine Order-Tabelle hinzu.
> Generiere auch die Migrationsdatei.
import { pgTable, uuid, decimal, timestamp, pgEnum } from "drizzle-orm/pg-core";
import { relations } from "drizzle-orm";
import { users } from "./users";

export const orderStatusEnum = pgEnum("order_status", [
  "pending", "confirmed", "shipped", "delivered", "cancelled",
]);

export const orders = pgTable("orders", {
  id: uuid("id").defaultRandom().primaryKey(),
  userId: uuid("user_id").notNull().references(() => users.id),
  totalAmount: decimal("total_amount", { precision: 10, scale: 2 }).notNull(),
  status: orderStatusEnum("status").default("pending").notNull(),
  createdAt: timestamp("created_at").defaultNow().notNull(),
  updatedAt: timestamp("updated_at").defaultNow().notNull(),
});

export const ordersRelations = relations(orders, ({ one, many }) => ({
  user: one(users, { fields: [orders.userId], references: [users.id] }),
  items: many(orderItems),
}));

Bestehende Schemas ändern

Auch Änderungen an bestehenden Tabellen wie Spaltenhinzufügungen oder Umbenennungen werden sicher verarbeitet.

> Nimm folgende Änderungen an der users-Tabelle vor.
> - phoneNumber-Spalte hinzufügen (nullable)
> - name in firstName und lastName aufteilen
> - Einschließlich Migrationslogik für bestehende Daten

Claude Code generiert eine Migration mit Datenmigrationsskript.

-- Migration: split_user_name
ALTER TABLE "users" ADD COLUMN "first_name" VARCHAR(100);
ALTER TABLE "users" ADD COLUMN "last_name" VARCHAR(100);
ALTER TABLE "users" ADD COLUMN "phone_number" VARCHAR(20);

-- Migration bestehender Daten
UPDATE "users"
SET
  "first_name" = split_part("name", ' ', 1),
  "last_name" = CASE
    WHEN array_length(string_to_array("name", ' '), 1) > 1
    THEN split_part("name", ' ', 2)
    ELSE ''
  END;

ALTER TABLE "users" ALTER COLUMN "first_name" SET NOT NULL;
ALTER TABLE "users" ALTER COLUMN "last_name" SET NOT NULL;
ALTER TABLE "users" DROP COLUMN "name";

Seed-Daten generieren

Entwicklungs-Testdaten können gleich miterstellt werden.

> Erstelle 20 Seed-Datensätze für die Order-Tabelle.
> Die Status sollen gleichmäßig verteilt sein.
> Mit realistischen Dummy-Daten.

Migrationssicherheit prüfen

> Überprüfe den aktuellen Migrationsverlauf und
> prüfe vor der Produktionsanwendung auf Probleme.
> Weise insbesondere auf Änderungen mit Datenverlustrisiko hin.

Zu DB-Integrationsmustern in der API-Entwicklung siehe API-Entwicklung beschleunigen. Das Festhalten von Datenbankregeln in CLAUDE.md verbessert die Sicherheit. Tipps dazu finden Sie im vollständigen Leitfaden zum Schreiben von CLAUDE.md.

Zusammenfassung

Mit Claude Code können Sie vom DB-Schema-Design über Änderungen, Migrationsgenerierung bis zur Seed-Daten-Erstellung alles konsistent automatisieren. Besonders bei komplexen Migrationen mit Datenmigrationslogik zeigt es seine Stärke.

Details zur Verwendung von Prisma finden Sie in der offiziellen Prisma-Dokumentation, zu Claude Code in der offiziellen Anthropic-Dokumentation.

#Claude Code #Datenbank #Migration #Prisma #Drizzle