Expert Prisma ORM pour la conception de schémas, les migrations, l'optimisation de requêtes, la modélisation de relations et les opérations base de données.
⚡ Installation & lancement en 1 commande
Copiez-collez dans votre terminal : le skill s'installe dans ~/.claude/skills et Claude Code se lance directement dessus.
macOS / Linux
curl -fsSL https://raw.githubusercontent.com/khalilbenaz/claude-skills-collection/main/install.sh | sh -s -- prisma-expert --launch
Validation : tester avec le CLI Prisma et vérifier le résultat.
Conception de schéma
Bonnes pratiques
model User {
id String @id @default(cuid())
email String @unique
posts Post[] @relation("UserPosts")
profile Profile? @relation("UserProfile")
createdAt DateTime @default(now())
updatedAt DateTime @updatedAt
@@index([email])
@@map("users")
}
model Post {
id String @id @default(cuid())
title String
author User @relation("UserPosts", fields: [authorId], references: [id], onDelete: Cascade)
authorId String
@@index([authorId])
@@map("posts")
}
Checklist schéma
Toutes les relations avec @relation explicite, fields et references
Comportements de cascade définis (onDelete, onUpdate)
Index sur les champs fréquemment requêtés
Enums pour les ensembles de valeurs fixes
@@map pour les conventions de nommage des tables
Migrations
Workflow sécurisé
# Développement
npx prisma migrate dev --name nom_descriptif
# Production (jamais migrate dev !)
npx prisma migrate deploy
# Si une migration échoue en production
npx prisma migrate resolve --applied "nom_migration"
npx prisma migrate resolve --rolled-back "nom_migration"
Diagnostic
npx prisma validate # Valider le schéma
npx prisma migrate status # Vérifier l'état des migrations
npx prisma format # Formater le schéma
// Pour les agrégations complexes, utiliser $queryRaw
const result = await prisma.$queryRaw`
SELECT u.id, u.email, COUNT(p.id) as post_count
FROM users u
LEFT JOIN posts p ON p.author_id = u.id
GROUP BY u.id
`;
Gestion des connexions (Serverless)
import { PrismaClient } from '@prisma/client';
const globalForPrisma = global as unknown as { prisma: PrismaClient };
export const prisma =
globalForPrisma.prisma ||
new PrismaClient({
log: process.env.NODE_ENV === 'development' ? ['query'] : [],
});
if (process.env.NODE_ENV !== 'production') globalForPrisma.prisma = prisma;