Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

ADR-007 - PostgreSQL comme base de données relationnelle

  • Statut : Accepté
  • Date : 2026-04-05

Contexte

L’application manipule des données fortement relationnelles :

  • utilisateurs, rôles (agriculteurs, pilotes)
  • parcelles agricoles et leurs métadonnées géographiques
  • missions de drone et plans de vol
  • actions et tâches sur les parcelles
  • transactions de la marketplace

Elle nécessite des transactions fiables et une modélisation stricte des relations entre entités.

Décision

Nous utilisons PostgreSQL comme base de données principale.

Alternatives considérées

  • MongoDB : flexibilité du schéma utile pour des données non structurées, mais inadapté aux relations complexes et aux transactions multi-documents
  • MySQL : bonne alternative relationnelle, mais fonctionnalités avancées (types JSON, window functions, extensions géospatiales) moins riches que PostgreSQL
  • SQLite : parfait pour le développement local, mais inadapté à la production multi-utilisateurs et à la concurrence d’écriture
  • PlanetScale / Turso : bases managées intéressantes, mais complexité supplémentaire et coût

Conséquences

  • Forte cohérence des données et support complet des transactions ACID
  • Excellente modélisation des relations entre entités métier
  • Support des types avancés (JSONB, tableaux, UUID) utiles pour les métadonnées de parcelles
  • Extension PostGIS disponible si des requêtes géospatiales avancées s’avèrent nécessaires
  • Nécessite une modélisation stricte du schéma en amont
  • Requiert une instance PostgreSQL dédiée (Docker en développement, service managé en production)
  • Montée en charge horizontale plus complexe que des bases NoSQL distribuées