ADR-004 (learnkorean) — Base de données : PostgreSQL
Statut : accepté (2026-07-19)
Contexte
Données multi-utilisateurs publiques : comptes, cartes, état de répétition espacée par carte et par utilisateur (beaucoup d'écritures lors des révisions), progression. Hébergement sur l'infra, sauvegardes obligatoires.
Comparatif pondéré
1. Filtre éliminatoire
PostgreSQL (licence PostgreSQL), MariaDB (GPL-2.0), SQLite (domaine public) : tous libres.
2. Critères et pondérations (total = 100)
| Critère | Poids | Pourquoi |
|---|---|---|
| Adéquation multi-utilisateurs public | 30 | Écritures concurrentes, intégrité, montée en charge raisonnable |
| Exploitation sur l'infra (service, sauvegardes) | 25 | Dump logique + vzdump, service géré par Coolify |
| Compétences existantes | 20 | Je pratique SQL (monde MySQL) |
| Valeur CV | 15 | |
| Performance | 10 |
3-4. Candidats et notation
| Critère (poids) | PostgreSQL 17 | MariaDB 11 | SQLite |
|---|---|---|---|
| Adéquation (30) | 5 — référence : intégrité, JSON, index riches | 4 — très bon aussi | 2 — écritures concurrentes limitées, sauvegarde à chaud délicate |
| Exploitation (25) | 4 — service Coolify + pg_dump quotidien | 4 — équivalent | 5 — un fichier |
| Compétences (20) | 3 — SQL connu, spécificités PG à découvrir | 4 — monde familier | 4 |
| Valeur CV (15) | 5 — le standard demandé partout | 3 | 2 |
| Performance (10) | 5 | 4 | 4 |
| Score pondéré / 5 | 4,35 | 3,85 | 3,35 |
5. Recommandation
PostgreSQL 17. L'écart de familiarité avec MariaDB est faible (Laravel abstrait l'essentiel via Eloquent), et PostgreSQL est à la fois le choix le plus robuste pour une app publique et la ligne la plus valorisée sur un CV backend. SQLite reste parfait… pour le développement local et les tests.
Décision
PostgreSQL 17. Je le valide le 2026-07-19 ; SQLite reste autorisé en dev/tests.
Conséquences
- Service PostgreSQL créé via Coolify (réseau interne uniquement, jamais exposé publiquement).
- Sauvegardes :
pg_dumpquotidien versionné vers le NAS en plus du vzdump de la VM ; restauration testée avant l'ouverture publique (cf. exigences). - En dev/tests : SQLite autorisé pour la vitesse, parité vérifiée par la CI qui teste sur PostgreSQL.