# Migrations SQL Ce répertoire contient les migrations SQL versionnées pour la base de données Formation Manager Itinova. ## Format des fichiers Les fichiers de migration doivent suivre ce format de nommage : ``` YYYYMMDD-description.sql ``` Exemples : - `20260113-fix-schema.sql` - `20260120-add-notifications.sql` - `20260201-update-rappels.sql` ## Ordre d'application Les migrations sont appliquées dans l'ordre alphabétique (donc chronologique grâce au format de date). ## Syntaxe Utilisez la syntaxe MySQL compatible avec les versions 5.7+. Pour les opérations ALTER TABLE, utilisez `IF NOT EXISTS` ou `IF EXISTS` quand c'est supporté, ou gérez les erreurs dans le script de mise à jour. ## Exemple de migration ```sql -- Migration YYYYMMDD: Description courte -- Description détaillée de ce que fait cette migration -- Ajouter une nouvelle table CREATE TABLE IF NOT EXISTS nouvelle_table ( id INT AUTO_INCREMENT PRIMARY KEY, nom VARCHAR(255) NOT NULL, createdAt TIMESTAMP DEFAULT CURRENT_TIMESTAMP ); -- Modifier une table existante ALTER TABLE users ADD COLUMN IF NOT EXISTS nouveau_champ VARCHAR(100); -- Ajouter un index ALTER TABLE users ADD INDEX IF NOT EXISTS idx_users_nouveau_champ (nouveau_champ); -- Insérer des données par défaut INSERT IGNORE INTO nouvelle_table (nom) VALUES ('Valeur par défaut'); ``` ## Suivi des migrations Le script de mise à jour crée automatiquement une table `schema_migrations` qui enregistre : - La version (nom du fichier sans .sql) - La date d'application - Une description ## Créer une nouvelle migration 1. Créez un fichier avec le format de nommage correct 2. Écrivez votre migration SQL 3. Testez-la sur une base de données de développement 4. Incluez-la dans le package de déploiement ## Rollback Pour annuler une migration, créez une nouvelle migration qui fait l'opération inverse. Exemple : Si `20260113-add-column.sql` ajoute une colonne, créez `20260114-remove-column.sql` qui la supprime. ## Bonnes pratiques 1. **Toujours tester** sur une base de développement avant de déployer 2. **Sauvegarder** la base de données avant d'appliquer des migrations (fait automatiquement par le script) 3. **Être idempotent** : la migration doit pouvoir être exécutée plusieurs fois sans erreur 4. **Documenter** : ajouter des commentaires expliquant le but de chaque modification 5. **Atomique** : chaque migration doit être une unité logique de changement 6. **Rétrocompatible** : éviter de supprimer des colonnes utilisées par l'ancienne version