{
  "id": "ai-generates-invalid-prisma-relations",
  "type": "failures",
  "category": "failures",
  "locale": "de",
  "url": "/de/failures/ai-generates-invalid-prisma-relations",
  "title": "So beheben Sie, dass KI ungültige Prisma-Beziehungen generiert",
  "description": "KI-Agenten generieren Prisma-Schema-Beziehungen mit fehlenden Gegenbeziehungen, falschen referenziellen Aktionen oder nicht übereinstimmenden Feldtypen, die bei prisma validate und prisma migrate fehlschlagen.",
  "tools": [
    "Cursor",
    "Claude Code",
    "Codex",
    "Windsurf"
  ],
  "stack": [
    "PostgreSQL",
    "TypeScript"
  ],
  "tags": [
    "prisma",
    "postgres",
    "sql"
  ],
  "difficulty": null,
  "updated": "2026-06-08",
  "markdown": "Der Agent schreibt ein Prisma-Schema mit Beziehungen, die korrekt aussehen, aber bei\n`prisma validate` aufgrund fehlender Rückverweise, Typinkonsistenzen oder\nmehrdeutigen Multi-Beziehungs-Setups fehlschlagen.\n\n## Das Symptom\n\nEine Beziehung wird in einem Modell deklariert, ohne dass das erforderliche Gegenstück im\nanderen vorhanden ist, oder der Typ des Fremdschlüsselfelds stimmt nicht mit dem referenzierten Feld überein.\n\n```prisma\n// schema.prisma — WRONG\nmodel User {\n  id    String @id @default(cuid())\n  posts Post[]\n}\n\nmodel Post {\n  id       String @id @default(cuid())\n  authorId Int    // Int, but User.id is String — type mismatch\n  // Missing: author User @relation(fields: [authorId], references: [id])\n}\n```\n\nDie Ausführung von `prisma validate` ergibt:\n\n```\nError: The relation field `posts` on model `User` is missing an opposite\nrelation field on the model `Post`.\n```\n\n## Warum es passiert\n\nDer Agent schreibt oft eine Seite einer Beziehung und vergisst, die andere hinzuzufügen,\ninsbesondere bei Many-to-Many- oder selbstreferenziellen Fällen. Außerdem kopiert er Feldtypen\naus dem Gedächtnis, ohne zu überprüfen, ob `authorId` exakt dem referenzierten `id`-Typ\nentsprechen muss.\n\n## Wie man es erkennt\n\n- `prisma validate` oder `prisma migrate dev` schlägt mit einem Beziehungsfehler fehl.\n- Ein Modell hat ein Array-Feld (One-to-Many), aber das referenzierte Modell hat keinen\n  skalaren Fremdschlüssel oder kein `@relation`-Attribut.\n- Many-to-Many verwendet explizite Join-Tabellen mit nicht übereinstimmenden Typen.\n- Selbstreferenzielle Modelle (z. B. Kategoriebäume) haben nur eine Seite des\n  `@relation(name: \"...\")`-Paars.\n\n## Wie man es behebt\n\nJede Beziehung muss auf beiden Seiten deklariert sein. Die skalaren Fremdschlüsseltypen müssen\ngenau mit dem referenzierten Feldtyp übereinstimmen.\n\n```prisma\n// schema.prisma — CORRECT\nmodel User {\n  id    String @id @default(cuid())\n  posts Post[] // one-to-many: back-reference\n}\n\nmodel Post {\n  id       String @id @default(cuid())\n  authorId String                       // String, matches User.id\n  author   User   @relation(fields: [authorId], references: [id], onDelete: Cascade)\n}\n```\n\nFür einen selbstreferenziellen Baum:\n\n```prisma\nmodel Category {\n  id       String     @id @default(cuid())\n  parentId String?\n  parent   Category?  @relation(\"CategoryTree\", fields: [parentId], references: [id])\n  children Category[] @relation(\"CategoryTree\")\n}\n```\n\n```txt\n[ ] Run \"prisma validate\" before \"prisma migrate dev\" — fix all errors first\n[ ] Every @relation on model A has a matching field on model B\n[ ] Foreign key scalar type matches the referenced @id type (String/Int/cuid)\n[ ] Self-referential relations use a named @relation(\"name\") on both sides\n[ ] Explicit many-to-many join tables declare both foreign keys with onDelete\n[ ] onDelete referential action is explicit (Cascade, Restrict, SetNull) — not left to default\n```\n\n## Korrektur-Prompt\n\n```txt title=\"Fix Prompt\"\nThis Prisma schema fails prisma validate. Fix every relation error: add the\nmissing back-reference fields, ensure all foreign key scalar types exactly match\nthe referenced @id type, give every self-referential relation a unique name on\nboth sides, and set explicit onDelete actions (Cascade for required relations,\nSetNull for optional). Run prisma validate after each change until it passes.\n```\n\n## Test\n\n```bash\n# Validate schema before attempting migration\nnpx prisma validate && echo \"Schema OK\" || echo \"FAIL: schema invalid\"\n\n# Also check for type mismatches (Int fk -> String id is a common error)\ngrep -A3 \"@relation\" prisma/schema.prisma\n```"
}