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