7.5 Exercices
191
© Dunod – La photocopie non autorisée est un délit.
7.8 On admet qu’à chaque produit correspond une page HTML qui en décrit les
propriétés (exercice 7.29). Rédiger un composant SQL qui rafraîchit
automatiquement la page d’un produit dont on vient de modifier une
propriété.
7.9 A chaque création d’une ligne d’une table, on désire produire un message en
XML qui reprend les données introduites. Proposer une DTD XML adéquate.
Rédiger les composants qui créent automatiquement ces messages.
7.10 On ajoute à la table CLIENT une colonne ETAT_CIVIL facultative, dont les
valeurs autorisées sont C, M, S, D, V, etc. (codant respectivement les états
célibataire, marié, séparé, divorcé, veuf, etc.). Ecrire les composants SQL qui
garantissent (1) que cette colonne contient à tout moment une valeur valide
ou null, (2) que les modifications de valeurs respectent les transitions
légales; par exemple, les transitions null → C, M → S ou S → D sont valides
tandis que C → S ou V → S sont interdites.
Suggestion. La contrainte 1 est statique, et peut être représentée pas des
mécanismes élémentaires. La contrainte 2 est dynamique, et réclame la
comparaison des valeurs avant et après modification, ce qui n’est possible que
dans un déclencheur.
7.11 Si le montant d’une commande dépasse 1.000 alors que le compte du client
est inférieur à 3.000, la commande est tronquée de manière que son montant
ne dépasse pas le seuil de 1.000.
Suggestion. Cette validation peut avoir lieu pour chaque insertion d’un
détail. Si le détail viole la règle, son insertion est annulée.
7.12 A tout instant, la table PRODUIT contient une ligne dont la valeur de
LIBELLE est ’CADEAU’. Elle représente un article dont une unité est
gratuitement ajoutée à toute commande dont le montant dépasse 2.000.
Rédigez les composants SQL qui automatisent cette règle.
Suggestion. Le problème est moins simple qu’il n’y paraît, car la réaction est
induite par l’insertion des lignes de DETAIL et non par celle de la ligne
COMMANDE, ce qui serait prématuré. Si on utilise un déclencheur, celui-ci
17. Une solution en InterBase est disponible sur le site de l’ouvrage.
191
© Dunod – La photocopie non autorisée est un délit.
7.8 On admet qu’à chaque produit correspond une page HTML qui en décrit les
propriétés (exercice 7.29). Rédiger un composant SQL qui rafraîchit
automatiquement la page d’un produit dont on vient de modifier une
propriété.
7.9 A chaque création d’une ligne d’une table, on désire produire un message en
XML qui reprend les données introduites. Proposer une DTD XML adéquate.
Rédiger les composants qui créent automatiquement ces messages.
7.10 On ajoute à la table CLIENT une colonne ETAT_CIVIL facultative, dont les
valeurs autorisées sont C, M, S, D, V, etc. (codant respectivement les états
célibataire, marié, séparé, divorcé, veuf, etc.). Ecrire les composants SQL qui
garantissent (1) que cette colonne contient à tout moment une valeur valide
ou null, (2) que les modifications de valeurs respectent les transitions
légales; par exemple, les transitions null → C, M → S ou S → D sont valides
tandis que C → S ou V → S sont interdites.
Suggestion. La contrainte 1 est statique, et peut être représentée pas des
mécanismes élémentaires. La contrainte 2 est dynamique, et réclame la
comparaison des valeurs avant et après modification, ce qui n’est possible que
dans un déclencheur.
7.11 Si le montant d’une commande dépasse 1.000 alors que le compte du client
est inférieur à 3.000, la commande est tronquée de manière que son montant
ne dépasse pas le seuil de 1.000.
Suggestion. Cette validation peut avoir lieu pour chaque insertion d’un
détail. Si le détail viole la règle, son insertion est annulée.
7.12 A tout instant, la table PRODUIT contient une ligne dont la valeur de
LIBELLE est ’CADEAU’. Elle représente un article dont une unité est
gratuitement ajoutée à toute commande dont le montant dépasse 2.000.
Rédigez les composants SQL qui automatisent cette règle.
Suggestion. Le problème est moins simple qu’il n’y paraît, car la réaction est
induite par l’insertion des lignes de DETAIL et non par celle de la ligne
COMMANDE, ce qui serait prématuré. Si on utilise un déclencheur, celui-ci
17. Une solution en InterBase est disponible sur le site de l’ouvrage.
