ADR-008 - Prisma comme ORM
- Statut : Accepté
- Date : 2026-04-05
Contexte
Le projet nécessite un accès base de données simple, typé et rapide à mettre en œuvre.
Le schéma est centralisé dans packages/db et partagé entre le serveur et les packages internes.
L’équipe veut éviter d’écrire du SQL brut tout en maintenant un contrôle sur les migrations.
Décision
Nous utilisons Prisma comme ORM, avec l’adaptateur @prisma/adapter-pg pour la connexion PostgreSQL et la génération de types ESM compatible Bun.
Alternatives considérées
- TypeORM : mature, décorateurs TypeScript, mais configuration complexe et compatibilité Bun incertaine
- Drizzle ORM : très léger, performant, SQL-like, bonne compatibilité Bun — alternative sérieuse mais adoption moins répandue dans l’équipe
- Kysely : query builder typé, contrôle total sur le SQL, mais plus verbeux et sans gestion de migrations intégrée
- Requêtes SQL brutes : contrôle maximal, mais perte du typage automatique et maintenance plus lourde
Conséquences
- Schéma lisible et déclaratif dans les fichiers
.prisma - Types TypeScript auto-générés à partir du schéma (zéro dérive entre base et code)
- Migrations versionnées via
prisma migratepour la production - Prisma Studio pour explorer et modifier les données en développement
- Abstraction qui peut limiter certaines optimisations SQL avancées (requêtes complexes nécessitent
$queryRaw) - Génération du client requise après chaque modification de schéma (
bun db:generate) - Performances légèrement inférieures à un query builder bas niveau pour des requêtes massives
- Le fichier de schéma multi-fichiers (
schema.prisma+auth.prisma) nécessite Prisma >= 6