170
Chapitre 7 • Applications avancées en SQL
Le lecteur pourra trouver dans [Celko, 2000] un traitement plus détaillé des structures d’ordre.
7.2 LES BASES DE DONNÉES ACTIVES
Les mécanismes des prédicats, des procédures SQL et des déclencheurs permettent
d’incorporer dans la base de données elle-même des composants actifs qui d’ordinaire sont inclus dans les programmes d’application. De telles bases de données sont
souvent appelées actives, réactives ou intelligentes.
Ces composants permettent par exemple de coder des contraintes d’intégrité
complexes, de définir des comportements particuliers en cas de violation de
contraintes, de contrôler la redondance ou de traduire des lois de comportement du
domaine d’application en comportement des données. Examinons quelques exemples
d’applications.
7.2.1 Les contraintes d’intégrité statiques
Une contrainte d’intégrité statique précise une propriété que les données doivent
vérifier à tout instant. Les contraintes d’unicité, référentielles et de colonnes obligatoires en sont les exemples les plus représentatifs, et d’ailleurs gérés automatiquement par la plupart des SGBD. Supposons qu’une commande ne puisse comporter
plus de 5 détails. Nous pourrions vérifier cette contrainte par le déclencheur suivant.
create trigger MAX-5-DET
before insert or update NCOM on DETAIL
for each row
begin
if (select COUNT(*) from DETAIL where NCOM = new.NCOM) = 5;
then abort(); end if;
end;
L’opération abort a pour effet d’annuler l’action qui provoque l’événement, ici un
delete.
7.2.2 Les contraintes d’intégrité dynamiques
En revanche, une contrainte dynamique indique quels changements d’états sont
valides. On ne peut détecter une violation lors d’une modification qu’en connaissant
les deux états avant et après l’événement. Ces deux états peuvent respecter toutes les
contraintes statiques, alors que le passage de l’un à l’autre est illégal. Nous en reparlerons en 9.5.2.
Admettons qu’on n’autorise la suppression d’un client que s’il n’a plus envoyé de
commandes depuis le 1er janvier 2005. Cette règle est prise en charge par le déclencheur ci-dessous.
Précédent

- 170/436

Suivant