3.3 KiB
Base de donnees - migrations & seeds
Transcription executable du MLD (docs/merise/mld.md, 21 tables) vers MariaDB 11.4.
Arborescence
db/
migrations/ migrations SQL versionnees, appliquees dans l'ordre lexicographique
0001_init_schema.sql schema initial : 21 tables, FK, CHECK, index (InnoDB, utf8mb4)
seeds/ donnees de reference (RBAC, allergenes, catalogue, variantes)
migrate-container.sh runner de boot IN-CONTAINER (canonique, service wakdo-migrate)
migrate.sh runner de migrations cote HOTE (manuel, via docker exec)
seed.sh runner de seeds cote HOTE (manuel, via docker exec)
Numerotation des migrations (trou 0004 assume)
Les migrations sautent 0004 : la sequence est 0001, 0002, 0003, 0005, 0006, 0007. Ce n'est PAS un fichier manquant mais un desalignement historique assume :
le numero 0004 a ete consomme cote seeds/ (0004_menu_side_maxi.sql) lors
d'un meme increment de travail, sans contrepartie cote migrations/. Le suivi se
fait par NOM DE FICHIER (schema_migrations), pas par numero contigu : le trou
est donc inoffensif (rien ne presuppose une sequence sans lacune). Convention
conservee : ne pas reattribuer 0004 cote migrations pour eviter toute confusion
avec le seed homonyme ; la prochaine migration prend le numero suivant disponible.
Appliquer les migrations + seeds
Chemin canonique (boot de la stack) : le service one-shot wakdo-migrate
(docker compose up) execute db/migrate-container.sh, qui applique
db/migrations/*.sql (suivi : table schema_migrations) PUIS db/seeds/*.sql
(suivi : table seeds_applied), de maniere idempotente. Il se connecte a
wakdo-db par le reseau compose.
Chemin manuel (hote, via docker exec) :
bash db/migrate.sh # applique les migrations en attente
bash db/migrate.sh --status # liste l'etat des migrations sans rien appliquer
bash db/seed.sh # charge les seeds en attente
bash db/seed.sh --status # liste l'etat des seeds sans rien charger
Les runners hote ciblent le conteneur wakdo-db et lisent les identifiants dans
.env (DB_NAME, DB_ROOT_PASSWORD).
Suivi partage entre les deux chemins
Les runners hote et conteneur partagent les MEMES tables de suivi (memes noms,
memes colonnes filename / applied_at) : schema_migrations pour les
migrations, seeds_applied pour les seeds. Consequence : rejouer un chemin apres
l'autre ne replaye RIEN. (Auparavant db/seed.sh suivait une table distincte
seed_history, ce qui pouvait lui faire re-jouer des seeds deja charges par
wakdo-migrate et echouer sur une contrainte UNIQUE — corrige.)
Conventions
- Une migration = un fichier
NNNN_description.sql. Un fichier deja applique en commun n'est plus edite : on ajoute une nouvelle migration pour corriger. - Pas de
CREATE DATABASE/USEdans les fichiers : la base cible est choisie par le runner. - Le schema suit le MLD v0.2 a la lettre : montants en centimes (INT UNSIGNED),
vat_rateen pour-mille,service_dayNON materialise (calcule applicatif, decision D6), stock signe (survente), journaux append-only (stock_movement,audit_log). - Verification : le DDL a ete applique sur une instance MariaDB 11.4 reelle (21 tables, 28 FK, 22 CHECK) sans erreur avant integration.