Bloc 5 — TD/TP : Triggers et contrôles automatiques

Objectifs pédagogiques

  • Implémenter la logique métier du cahier des charges par triggers.
  • Garantir la cohérence des données sans intervention applicative.
  • Utiliser RAISE NOTICE et RAISE EXCEPTION pour la traçabilité et la validation.

Partie A — Sur feuille : conception et analyse

  1. Identifier les événements à automatiser. D’après le cahier des charges, lister pour chaque table les actions susceptibles de déclencher un traitement automatique (insertion, mise à jour, suppression).

  2. Tracer la chaîne d’actions. Schématisez la propagation : suppression → archivage → vérification de contrainte → journalisation. Indiquez le moment d’exécution adéquat (BEFORE / AFTER).

  3. Déterminer les erreurs à lever. Énumérez les cas où une erreur doit interrompre la transaction :

    • chevauchement détecté malgré exclusion,
    • séjour au-delà de l’année,
    • suppression d’un village encore réservé, etc.

Partie B — Sur machine : implémentation

Exercice 1 — Archivage automatique

Objectif : implémenter la fonctionnalité 11.

Vérifier : suppression d’un séjour → ligne ajoutée dans ArchiveSejour.

Exercice 2 — Contrôle de cohérence avant insertion

Objectif : refuser toute réservation au-delà de l’année courante.

Tester : insertion valide / invalide → exception bloquante.

Exercice 3 — Refus de suppression d’un village réservé

Objectif : fonctionnalité implicite (capacité et intégrité logique).

Exercice 4 — Mise à jour automatique des totaux

Ajouter une colonne nb_sejours int dans client. Créer un trigger AFTER INSERT OR DELETE ON sejour qui met à jour client.nb_sejours. But : préparer le reporting global sans requête d’agrégat.

Exercice 5 — Gestion des erreurs et messages

Modifier les fonctions précédentes pour :

  • utiliser RAISE NOTICE, RAISE WARNING, RAISE EXCEPTION USING MESSAGE = …, ERRCODE = 'P0001';
  • tester la remontée d’erreur dans psql et son effet sur la transaction.

Partie C — Application intégrée

  1. Scénario complet

    • Un client crée un séjour valide.
    • L’employé exécute la purge/archivage.
    • L’employé tente ensuite de supprimer un village occupé (échec).
    • Le client essaie un séjour multi-année (échec).
    • Vérifier les traces (NOTICE) et les exceptions (EXCEPTION).
  2. Extension libre

    • Créer un journal log_evenement alimenté par un trigger AFTER INSERT OR DELETE ON sejour. Colonnes : evenement text, horodatage timestamptz default now().
    • Visualiser les logs des trois dernières opérations.

Partie D — Pour aller plus loin / devoir maison

  • Regrouper les triggers d’archivage et de vérification dans un même schéma logique (schema systeme).
  • Expérimenter un trigger INSTEAD OF sur une vue de synthèse (vue_sejours_actifs).
  • Comparer : logique en trigger vs logique en procédure ; discuter des avantages.
Pierre-Henri Paris
Pierre-Henri Paris
Associate Professor in Artificial Intelligence

My research interests include Knowlegde Graphs, Information Extraction, and NLP.