Use Cases

Como automatizar migraciones de base de datos con Claude Code

Aprende a automatizar migraciones de base de datos usando Claude Code. Incluye ejemplos de codigo practicos y guia paso a paso.

Resolviendo los problemas de migraciones de BD con Claude Code

Escribir manualmente archivos de migracion con cada cambio de esquema es una tarea laboriosa y propensa a errores. Con Claude Code, puedes manejar de una vez desde el diseno del cambio de esquema hasta la generacion de migraciones y la actualizacion de datos semilla.

Migraciones con Prisma

Desde el diseno del esquema hasta la ejecucion de migraciones

> Agrega las siguientes tablas al esquema de Prisma, genera y aplica la migracion.
>
> Tabla: Order
> - id: UUID, clave primaria
> - userId: clave foranea a User
> - items: OrderItem[] (uno a muchos)
> - totalAmount: Decimal
> - status: enum (pending, confirmed, shipped, delivered, cancelled)
> - createdAt, updatedAt

Ejemplo de esquema generado por Claude Code.

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

Despues, Claude Code ejecuta automaticamente el comando de migracion.

npx prisma migrate dev --name add_order_tables

Migraciones con Drizzle

Tambien puedes dar instrucciones similares cuando usas Drizzle ORM.

> Agrega la tabla Order al esquema de Drizzle ORM.
> Genera tambien el archivo de migracion.
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),
}));

Modificacion de esquemas existentes

Tambien puede manejar de forma segura cambios en tablas existentes como agregar o renombrar columnas.

> Aplica los siguientes cambios a la tabla users.
> - Agregar columna phoneNumber (nullable)
> - Dividir name en firstName y lastName
> - Incluir la logica de migracion de datos existentes

Claude Code genera la migracion con el script de migracion de datos incluido.

-- Migracion: 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);

-- Migracion de datos existentes
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";

Generacion de datos semilla

Tambien puedes crear datos de prueba para desarrollo.

> Crea 20 registros de datos semilla para la tabla Order.
> Que los estados esten distribuidos uniformemente.
> Con datos ficticios realistas.

Verificacion de seguridad de las migraciones

> Verifica el historial actual de migraciones,
> y comprueba que no haya problemas antes de aplicar en produccion.
> Senala especialmente los cambios con riesgo de perdida de datos.

Para los patrones de integracion de BD en el desarrollo de APIs, consulta como acelerar el desarrollo de APIs. Ademas, escribir reglas relacionadas con la base de datos en CLAUDE.md mejora la seguridad. Para consejos sobre como escribirlo, consulta la guia completa de escritura de CLAUDE.md.

Resumen

Con Claude Code, puedes automatizar de forma consistente desde el diseno del esquema de BD hasta los cambios, la generacion de migraciones y la creacion de datos semilla. Es especialmente poderoso en migraciones complejas que incluyen logica de migracion de datos.

Para el uso detallado de Prisma, consulta la documentacion oficial de Prisma, y para las funcionalidades de Claude Code, consulta la documentacion oficial de Anthropic.

#Claude Code #database #migration #Prisma #Drizzle