Aller au contenu principal

Conventions de schéma

:::danger Règle absolue Toutes les clés étrangères doivent utiliser le pattern de nommage id_*. :::

Règles de migration

  • Noms de tables explicites
  • Index sur les clés étrangères et les filtres fréquents
  • Clés étrangères contraintes quand c'est sûr
  • Soft deletes quand des enregistrements peuvent être référencés par des logs, audits, permissions ou historique
  • Ne jamais renommer des colonnes sans migration et revue de compatibilité

Exemple de clé étrangère

$table->unsignedBigInteger('id_role')->index();
$table->foreign('id_role')->references('id_role')->on('roles');

$table->unsignedBigInteger('id_service')->index();
$table->foreign('id_service')->references('id_service')->on('services');

Checklist migration

  • ✅ Convention de clé primaire conforme aux tables existantes
  • ✅ Clés étrangères en id_*
  • ✅ Colonnes nullable intentionnelles uniquement
  • ✅ Contraintes unique conformes aux règles métier
  • deleted_at présent quand la rétention historique est nécessaire
  • ✅ Préfixe de module sur le nom de table

Tables partagées (app/)

Ces tables n'ont pas de préfixe et vivent dans database/migrations/ racine :

TableDescription
usersUtilisateurs (soft delete)
rolesRôles RBAC
permissionsPermissions atomiques
servicesServices / unités organisationnelles
core_applicationsApplications métier + settings JSON

Tables de module

Exemples de préfixes :

PréfixeModule
dashboard_Dashboard (alias, groupes)
elevage_Élevage
infrastructure_Infrastructure
ai_Module Ai
thalia_Thalia (futur)