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.
Related Posts
Cómo potenciar tus proyectos personales con Claude Code [Con ejemplos]
Aprende a acelerar drásticamente tus proyectos personales de desarrollo usando Claude Code. Incluye ejemplos reales y un flujo de trabajo práctico desde la idea hasta el despliegue.
Cómo automatizar la refactorización con Claude Code
Aprende a automatizar eficientemente la refactorización de código usando Claude Code. Incluye prompts prácticos y patrones concretos de refactorización para proyectos reales.
Guia completa de configuracion CORS con Claude Code
Aprende sobre la configuracion completa de CORS usando Claude Code. Incluye consejos practicos y ejemplos de codigo.