Prisma
Rules
- Schema in
prisma/schema.prisma— single source of truth - Use
selectoverinclude— fetch only needed fields - Transactions for multi-step mutations:
prisma.$transaction([...]) - Soft deletes via
deletedAt DateTime?field + middleware filter - Indexes on frequently queried fields:
@@index([fieldName]) - Relations: always define both sides (
@relation) - Migrations:
npx prisma migrate dev --name descriptive-name - Connection pooling for serverless: use Prisma Accelerate or PgBouncer
- Type generation:
npx prisma generateafter schema changes
Avoid
include: { relation: true }when you only need one field — useselectinstead- N+1 queries — use
includeorselectwith nested relations - Raw SQL when Prisma API can handle it — only use
$queryRawfor complex aggregations prisma.table.findMany()withouttakelimit — always paginate