P PasteCode
Error

Cómo corregir relaciones inválidas de Prisma generadas por IA

Los agentes de IA generan relaciones de esquema Prisma con relaciones inversas faltantes, acciones referenciales incorrectas o tipos de campo no coincidentes que fallan en prisma validate y prisma migrate.

CursorClaude CodeCodexWindsurf PostgreSQLTypeScript
.md .json Actualizado 8 jun 2026

El agente escribe un esquema Prisma con relaciones que parecen correctas pero fallan en prisma validate debido a referencias inversas faltantes, tipos no coincidentes o configuraciones ambiguas de múltiples relaciones.

El síntoma

Se declara una relación en un modelo sin su contraparte requerida en el otro, o el tipo del campo de clave foránea no coincide con el campo referenciado.

// schema.prisma — WRONG
model User {
id String @id @default(cuid())
posts Post[]
}
model Post {
id String @id @default(cuid())
authorId Int // Int, but User.id is String — type mismatch
// Missing: author User @relation(fields: [authorId], references: [id])
}

Ejecutar prisma validate produce:

Error: The relation field `posts` on model `User` is missing an opposite
relation field on the model `Post`.

Por qué ocurre

El agente a menudo escribe un lado de una relación y se olvida de agregar el otro, especialmente en casos de muchos a muchos o autorreferenciales. También copia tipos de campo de memoria sin verificar que authorId debe coincidir exactamente con el tipo id de referencia.

Cómo detectarlo

  • prisma validate o prisma migrate dev falla con un error de relación.
  • Un modelo tiene un campo de arreglo (uno a muchos) pero el modelo referenciado no tiene clave foránea escalar o atributo @relation.
  • Muchos a muchos usa tablas de unión explícitas con tipos no coincidentes.
  • Modelos autorreferenciales (ej. árboles de categorías) tienen solo un lado del par @relation(name: "...").

Cómo corregirlo

Cada relación debe tener ambos lados declarados. Los tipos escalares de clave foránea deben coincidir exactamente con el tipo del campo referenciado.

// schema.prisma — CORRECT
model User {
id String @id @default(cuid())
posts Post[] // one-to-many: back-reference
}
model Post {
id String @id @default(cuid())
authorId String // String, matches User.id
author User @relation(fields: [authorId], references: [id], onDelete: Cascade)
}

Para un árbol autorreferencial:

model Category {
id String @id @default(cuid())
parentId String?
parent Category? @relation("CategoryTree", fields: [parentId], references: [id])
children Category[] @relation("CategoryTree")
}
[ ] Run "prisma validate" before "prisma migrate dev" — fix all errors first
[ ] Every @relation on model A has a matching field on model B
[ ] Foreign key scalar type matches the referenced @id type (String/Int/cuid)
[ ] Self-referential relations use a named @relation("name") on both sides
[ ] Explicit many-to-many join tables declare both foreign keys with onDelete
[ ] onDelete referential action is explicit (Cascade, Restrict, SetNull) — not left to default

Prompt de corrección

Fix Prompt
This Prisma schema fails prisma validate. Fix every relation error: add the
missing back-reference fields, ensure all foreign key scalar types exactly match
the referenced @id type, give every self-referential relation a unique name on
both sides, and set explicit onDelete actions (Cascade for required relations,
SetNull for optional). Run prisma validate after each change until it passes.

Prueba

Terminal window
# Validate schema before attempting migration
npx prisma validate && echo "Schema OK" || echo "FAIL: schema invalid"
# Also check for type mismatches (Int fk -> String id is a common error)
grep -A3 "@relation" prisma/schema.prisma
Etiquetas: prismaPostgreSQLSQL