Aller au contenu

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_dump quotidien 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.