Vous êtes sur la page 1sur 39

ème

Université Alger 1 Ben Youcef Ben Khedda 3 année Informatique - SI


Faculté des sciences Administration de Bases de Données
Département MI Dr. Aoudia - 2017/2018

Série d’exercices du chapitre 1- Solution


Modélisation sémantique des données

PARTIE 1 : Modèle Entité-Association


Exercice 1 : Edition de livres
On veut représenter la gestion d’édition de livres :
Nous devons représenter :
§ Des livres avec : numéro du livre (ISBN), Titre du livre
§ Des auteurs avec : Numéro de l’auteur, nom de l’auteur
§ Des éditeurs avec : Numéro d’éditeur, nom de l’éditeur
§ Des dépôts avec : Numéro de dépôt, nom du dépôt
Attention : ici un « livre » n’est pas le « livre physique » (un exemplaire) mais plutôt une «édition»

L’investigation du domaine a permis de définir les règles suivantes : Un livre peut être
1. Écrit par plusieurs auteurs
2. Édité par plusieurs éditeurs, mais une seul fois par chacun d’entre eux. Pour distinguer,
on donne alors l’année éditions
3. Stocké dans plusieurs dépôts, et cela pour chaque éditeur.
4. Chaque livre stocké est stocké avec une quantité définie.
- Donner le schéma entité-association et les éventuels contraintes d’intégrité correspondant à cet
énoncé.

Exercice 2 : Gestion de bibliothèque

On se propose de représenter le système d’information d’une bibliothèque :


§ La bibliothèque enregistre chaque lecteur à qui elle donne un numéro de lecteur.
§ Elle lui prend son nom et son adresse. Le lecteur peut éventuellement être membre d’une société
adhérente. On enregistre alors l’identification de cette société.
§ Un lecteur peut emprunter plusieurs livres chaque jour. A chaque prêt, on associe une « date de
retour au plus tard ».
§ Un lecteur appartient à un « type de lecteur ». Ce type lui permet d’avoir ou non accès à certaines
catégories de livres.
§ La durée du prêt dépend de la catégorie du livre et du type de lecteur. Elle est la même pour tous
les livres d’une catégorie donnée empruntés par un quelconque lecteur d’un type donné.
§ Un livre est caractérisé par son numéro d’inventaire. Il est nécessaire de connaître sa catégorie, le
nom de son auteur, son éditeur, ainsi que le nombre de ses différents exemplaires disponibles.
L’édition, lorsqu’elle existe, est également à connaître.
§ La catégorie d’un livre se repère par un numéro et possède un libellé. Il en est de même pour le
type de lecteur.
§ Une société adhérente possède un nom et une adresse ; elle s’engage à envoyer un minimum de
500 lecteurs.

- Donner le schéma entité-association et les éventuels contraintes d’intégrité correspondant à cet


énoncé.

1
ème
Université Alger 1 Ben Youcef Ben Khedda 3 année Informatique - SI
Faculté des sciences Administration de Bases de Données
Département MI Dr. Aoudia - 2017/2018

Exercice 3 : Gestion d’entreprise

Une entreprise veut améliorer sa gestion du matériel ainsi que celle des commandes de ces clients.
Pour cela, elle envisage les orientations suivantes :
§ Elle veut connaître à tout instant la quantité disponible d’un matériel dans un magasin donné
§ Les matériaux sont classés en catégories pour faciliter leur gestion
§ On doit pouvoir connaître les composants d’un matériel et les matériaux dans lesquels on trouve
un composant donné
§ Lors d’une rupture de stock, un matériel peut être remplacé par un matériel de substitution
§ Chaque client a un seuil maximal de commandes autorisé (droit d’approvisionnement) par
catégorie de matériel pour une période donnée
§ Un client ne peut s’approvisionner que dans un magasin et un seul
§ Une commande est définie par un numéro : elle concerne un seul client et différents matériaux,
et précise la quantité commandée

- Donner le schéma entité-association et les éventuels contraintes d’intégrité correspondant à cet


énoncé.

Exercice 4 : Aéroport

Pour les besoins de la gestion d'un aéroport on souhaite mémoriser dans une base de données les
informations nécessaires à la description des faits suivants:

§ chaque avion géré est identifié par un numéro d'immatriculation. Il est la propriété soit d'une
société, soit d'un particulier: dans les deux cas on doit connaître le nom, l'adresse et le numéro
de téléphone du propriétaire, ainsi que la date d'achat de l'avion;
§ chaque avion est d'un certain type, celui-ci étant caractérisé par son nom, le nom du
constructeur, la puissance du moteur, le nombre de places;
§ la maintenance des avions est assurée par les mécaniciens de l'aéroport. Par sécurité, les
interventions sont toujours effectuées par deux mécaniciens (l'un répare, l'autre vérifie). Un
même mécanicien peut, selon les interventions, effectuer la réparation ou la vérification. Pour
toute intervention effectuée, on conserve l'objet de l'intervention, la date et la durée;
§ pour chaque mécanicien on connaît son nom, son adresse, son numéro de téléphone et les
types d'avion sur lesquels il est habilité à intervenir;
§ un certain nombre de pilotes sont enregistrés auprès de l'aéroport. Pour chaque pilote on
connaît son nom, son adresse, son numéro de téléphone, son numéro de brevet de pilote et
les types d'avion qu'il est habilité à piloter avec le nombre total d'heures de vol qu'il a effectué
sur chacun de ces types.
Des questions types auxquelles l'application doit pouvoir répondre sont les suivantes:
1. liste des avions de la société "Voltige";
2. liste des avions qui sont la propriété de particuliers;
3. durée totale des interventions faites par le mécanicien Rochat au mois de janvier;
4. liste des types d'avion de plus de 4 places; - liste des pilotes habilités pour tel type
d'avion;
5. liste des interventions (objet, date) faites sur l'avion numéro 3242XZY78K3.

- Donner le modèle Entité Association correspondant.

2
ème
Université Alger 1 Ben Youcef Ben Khedda 3 année Informatique - SI
Faculté des sciences Administration de Bases de Données
Département MI Dr. Aoudia - 2017/2018

PARTIE 2 : Passage du modèle EA vers le modèle Relationnel

Exercice 5 :

Soit l’exemple de modélisation EA suivant

Donner le modèle relationnel correspondant.

Exercice 6 : Modèle relationnel pour une bibliothèque

Donner le modèle relationnel pour le modèles entité-association suivant :


• Définir les relations
• Définir les attributs
• Définir les clés primaires et les clés étrangères

3
ème
Université Alger 1 Ben Youcef Ben Khedda 3 année Informatique - SI
Faculté des sciences Administration de Bases de Données
Département MI Dr. Aoudia - 2017/2018

Exercice 7 : Modèle relationnel d’un cinéma

Soit le modèle Entité Association correspondant à la gestion d’un cinéma :

- Donner le modèle relationnel correspondant

Exercice 8 : Gestion d’une école

Donner le modèle relationnel correspondant au modèle EA suivant

4
ème
Université Alger 1 Ben Youcef Ben Khedda 3 année Informatique - SI
Faculté des sciences Administration de Bases de Données
Département MI Dr. Aoudia - 2017/2018

PARTIE 3 : Modèle Relationnel


Exercice 9 : Propriétés d’Armstrong
1. Démontrer que les trois propriétés : réflexivité, augmentation et transition, permettent de dériver les
trois autres propriétés d’Armstrong

Exercice 10 : Dépendances fonctionnelles


Soit un schéma de bases de données contenant les relations suivantes :

Bureau(NumBureau, NumTelephone, Taille) avec


FBureau = { NumBureau à NumTelephone, Taille; NumTelephone à NumBureau; }

Occupant(NumBureau, PersonneID) avec FOccupant = { NumBureau à PersonneID }

Materiel(NumBureau, NumPC) avec FMateriel = { NumPC à NumBureau }

1. Les contraintes ci-dessous sont-elles vérifiées par ce schéma de bases de données ? Si la réponse est positive,
expliquez pourquoi. Si la réponse est négative, indiquez quelle(s) dépendance(s) fonctionnelle(s) il faut
ajouter/supprimer ou modifier pour que la contrainte soit vérifiée.
i. "Un bureau peut contenir plusieurs postes téléphoniques."
ii. "Il y a une et une seule personne par bureau."
iii. "Un bureau contient un seul ordinateur."

2. A partir des familles de dépendances fonctionnelles initiales données dans l'énoncé, indiquez quelles sont les
clés minimales possibles de chaque relation.

Solution

5
ème
Université Alger 1 Ben Youcef Ben Khedda 3 année Informatique - SI
Faculté des sciences Administration de Bases de Données
Département MI Dr. Aoudia - 2017/2018

Exercice 11 : Normalisation
1. Soit la relation suivante :
COMMANDE(NUMCOM, NUMCLI, NOMCLI, DATE, NUMPRODUIT, LIBELLE)

Avec les dépendances fonctionnelles suivantes :


NUMCLI à NOMCLI
NUMPRODUIT à LIBELLE

• La relation COMMANDE est-elle normalisée ? si c’est non la rendre normalisée.

2. Même question avec la relation


PRODUIT(NPRO, DATE_INTRO, IMPORTATEUR, AGREGATION)
DATE_INTRO, IMPORTATEURà AGREATION

3. Décomposez si nécessaire la relation ACHAT

6
ème
Université Alger 1 Ben Youcef Ben Khedda 3 année Informatique - SI
Faculté des sciences Administration de Bases de Données
Département MI Dr. Aoudia - 2017/2018

ACHAT(NCOM, NPRO, PRIX)


NCOM->NPRO , NPRO ->PRIX

4. Décomposer si nécessaire la relation COMMANDE.


COMMANDE(NCOM, NCLI, NOM, DATE, NPRO, LIBELLE)
NCOM → NCLI, DATE, NPRO NCLI → NOM NPRO → LIBELLE

5. Calculer les identifiants de la relation CINE. Décomposer cette relation si nécessaire.


CINE(FILM, VILLE, SALLE, DISTRIBUTEUR, DELEGUE)
SALLE → VILLE FILM,
VILLE → SALLE, DISTRIBUTEUR
DISTRIBUTEUR → DELEGUE

6. La relation suivante décrit des commandes faites par des clients, avec les produits et
quantités commandés par client.

Commandes (NumCom, DateCom, NumCli, AdrCli, NumProd,


Prix, Qte)
Quelle est la a. clé de cette relation ?
b. En quelle forme normale elle est ?
c. La mettre en 3FN le cas échéant.

Solution

1. La colonne NOMCLI dépend d’une colonne qui n’est pas une clé. La table n’est pas normalisée. On la
décompose en deux tables
COMMANDE(NCOM, NUMCLI, DATE, NUMPRODUIT, LIBELLE) et
CLIENT(NUMCLI, NOMCLI).
Ensuite, dans la nouvelle table COMMANDE, la colonnes LIBELLE dépend d’une colonne qui n’est pas une clé. Par
4 décomposition, on obtient le schéma ci-dessous : Annexe A • Exercices et solutions
COMMANDE(NCOM, NUMCLI, DATE, NUMPRODUIT)
CLIENT(NUMCLI, NOMCLI)
A.3 CHAPITRE 3 - MODÈLE
PRODUIT(NUMPRODUIT, LIBELLE) RELATIONNEL ET NORMALISATION
Avec deux clés étrangères : NUMCLI de COMMANDE et NUMPROUIT de COMMANDE.
3.1 Décomposer si nécessaire la relation ACHAT.
2. La colonne AGREATION dépend de colonnes qui ne forment pas un identifiant. La table n’est pas normalisée.
ACHAT(NCOM, NPRO, PRIX)
On la décompose en deux tables PRODUIT(NPRO, DATE_INTRO, IMPORTATEUR) et AGRE(DATE_INTRO,
NCOM → NPRO
IMPORTATEUR, AGREATION). Une clé étrangère : (DATE_INTRO, IMPORTATEUR) de PRODUIT.
NPRO → PRIX
3.
Solution
L’identifiant de ACHAT est {NCOM}. La DF NPRO → PRIX est donc
anormale. Par décomposition selon cette DF, on obtient le schéma relationnel
normalisé :
ACHAT(NCOM, NPRO); PRODUIT(NPRO, PRIX);
ACHAT[NPRO] ⊆ PRODUIT[NPRO]

4. La clé de COMMANDE est {NCOM}. Les DF NCLI → NOM et NPRO → LIBELLE sont donc anormales. Par
3.2 Décomposer si nécessaire la relation COMMANDE.
décomposition selon chacune de ces DF, on obtient le schéma relationnel normalisé :
COMMANDE(NCOM,
COMMANDE(NCOM, NCLI, NCLI,
DATE, NOM,
NPRO);
DATE, NPRO, LIBELLE)
CLIENT(NCLI,
NCOMNOM);
→ NCLI, DATE, NPRO
PRODUIT(NPRO,
NCLI →LIBELLE);
NOM
NPRO → LIBELLE
COMMANDE[NCLI] ⊆ CLIENT[NCLI]
COMMANDE[NPRO]
Solution ⊆ PRODUIT[NPRO]
L’identifiant de COMMANDE est {NCOM}. Les DF NCLI → NOM et NPRO
→ LIBELLE sont donc anormales. Par décomposition selon chacune de ces
5. LeDF,
graphe ADF comporte
on obtient le schémaunrelationnel
circuit. Lesnormalisé
identifiants
: sont {FILM, VILLE} et {SALLE, FILM}.
Les deux DFCOMMANDE(NCOM,
suivantes sont doncNCLI,
anormales
DATE,: NPRO);
SALLE → VILLE et DISTRIBUTEUR
CLIENT(NCLI, → DELEGUE.
NOM); PRODUIT(NPRO, LIBELLE);
COMMANDE[NCLI] ⊆ CLIENT[NCLI]
COMMANDE[NPRO] ⊆ PRODUIT[NPRO]
7
3.3 Décomposer si nécessaire la relation ACHAT2.
ACHAT2(CLI, PRO, MAG, PRIX)
PRO, MAG → PRIX
ème
Université Alger 1 Ben Youcef Ben Khedda 3 année Informatique - SI
Faculté des sciences Administration de Bases de Données
Département MI Dr. Aoudia - 2017/2018

Cette dernière étant externe, elle permet une première décomposition :


CINE(FILM, VILLE, SALLE, DISTRIBUTEUR);
DIS(DISTRIBUTEUR, DELEGUE);
CINE[DISTRIBUTEUR] ⊆ DIS[DISTRIBUTEUR]
SALLE → VILLE FILM,
VILLE → DISTRIBUTEUR

La DF FILM, VILLE → DISTRIBUTEUR, non anormale, est externe et ne fait pas partie du noyau irréductible. Elle
peut donc faire l’objet d’une décomposition :
CINE(FILM, VILLE, SALLE);
DISTR(FILM, VILLE, DISTRIBUTEUR);
DIS_DEL(DISTRIBUTEUR, DELEGUE);
CINE[FILM, VILLE] ⊆ DISTR[FILM, VILLE]
DISTR[DISTRIBUTEUR] ⊆ DIS_DEL[DISTRIBUTEUR]
SALLE → VILLE

Le noyau résiduel {FILM, VILLE, SALLE} est irréductible et non normalisé. La dernière relation CINE peut être
remplacée par un des trois schémas ci-dessous :
a. CINE(FILM, VILLE, SALLE); SALLE → VILLE
b. CINE(FILM, SALLE); LOC(SALLE, VILLE); CINE[SALLE] = LOC[SALLE] CINE*LOC: FILM, VILLE → SALLE
c. CINE(FILM, VILLE, SALLE); LOC(SALLE, VILLE); CINE[SALLE, VILLE] = LOC[SALLE, VILLE]

6-

8
ème
Université Alger 1 Ben Youcef Ben Khedda 3 année Informatique - SI
Faculté des sciences Administration de Bases de Données
Département MI Dr. Aoudia - 2017/2018

9
ème
Université Alger 1 Ben Youcef Ben Khedda 3 année Informatique - SI
Faculté des sciences Administration de Bases de Données
Département MI Dr. Aoudia - 2017/2018

Série d’exercices du chapitre 1- Solution


Modélisation sémantique des données

PARTIE 3 : Modèle Relationnel


Exercice 9 : Propriétés d’Armstrong
1. Démontrer que les trois propriétés : réflexivité, augmentation et transition, permettent de dériver les trois
autres propriétés d’Armstrong

Exercice 10 : Dépendances fonctionnelles


Soit un schéma de bases de données contenant les relations suivantes :

Bureau(NumBureau, NumTelephone, Taille) avec


FBureau = { NumBureau  NumTelephone, Taille; NumTelephone  NumBureau; }

Occupant(NumBureau, PersonneID) avec FOccupant = { NumBureau  PersonneID }

Materiel(NumBureau, NumPC) avec FMateriel = { NumPC  NumBureau }

1. Les contraintes ci-dessous sont-elles vérifiées par ce schéma de bases de données ? Si la réponse est positive,
expliquez pourquoi. Si la réponse est négative, indiquez quelle(s) dépendance(s) fonctionnelle(s) il faut
ajouter/supprimer ou modifier pour que la contrainte soit vérifiée.
i. "Un bureau peut contenir plusieurs postes téléphoniques."
ii. "Il y a une et une seule personne par bureau."
iii. "Un bureau contient un seul ordinateur."

2. A partir des familles de dépendances fonctionnelles initiales données dans l'énoncé, indiquez quelles sont les
clés minimales possibles de chaque relation.

Solution

1
ème
Université Alger 1 Ben Youcef Ben Khedda 3 année Informatique - SI
Faculté des sciences Administration de Bases de Données
Département MI Dr. Aoudia - 2017/2018

Exercice 11 : Normalisation
1. Soit la relation suivante :
COMMANDE(NUMCOM, NUMCLI, NOMCLI, DATE, NUMPRODUIT, LIBELLE)

Avec les dépendances fonctionnelles suivantes :


NUMCLI  NOMCLI
NUMPRODUIT  LIBELLE

 La relation COMMANDE est-elle normalisée ? si c’est non la rendre normalisée.

2. Même question avec la relation


PRODUIT(NPRO, DATE_INTRO, IMPORTATEUR, AGREGATION)
DATE_INTRO, IMPORTATEUR AGREATION

3. Décomposez si nécessaire la relation ACHAT


ACHAT(NCOM, NPRO, PRIX)
NCOM->NPRO , NPRO ->PRIX

4. Décomposer si nécessaire la relation COMMANDE.


COMMANDE(NCOM, NCLI, NOM, DATE, NPRO, LIBELLE)
NCOM → NCLI, DATE, NPRO NCLI → NOM NPRO → LIBELLE

5. Calculer les identifiants de la relation CINE. Décomposer cette relation si nécessaire.


CINE(FILM, VILLE, SALLE, DISTRIBUTEUR, DELEGUE)

2
ème
Université Alger 1 Ben Youcef Ben Khedda 3 année Informatique - SI
Faculté des sciences Administration de Bases de Données
Département MI Dr. Aoudia - 2017/2018

SALLE → VILLE FILM,


VILLE → SALLE, DISTRIBUTEUR
DISTRIBUTEUR → DELEGUE

6. La relation suivante décrit des commandes faites par des clients, avec les produits et quantités
commandés par client.

Commandes (NumCom, DateCom, NumCli, AdrCli, NumProd,


Prix, Qte)
Quelle est la a. clé de cette relation ?
b. En quelle forme normale elle est ?
c. La mettre en 3FN le cas échéant.

Solution

1. La colonne NOMCLI dépend d’une colonne qui n’est pas une clé. La table n’est pas normalisée. On la
décompose en deux tables
COMMANDE(NCOM, NUMCLI, DATE, NUMPRODUIT, LIBELLE) et
CLIENT(NUMCLI, NOMCLI).
Ensuite, dans la nouvelle table COMMANDE, la colonnes LIBELLE dépend d’une colonne qui n’est pas une clé.
Par décomposition, on obtient le schéma ci-dessous :
COMMANDE(NCOM, NUMCLI, DATE, NUMPRODUIT)
CLIENT(NUMCLI, NOMCLI)
PRODUIT(NUMPRODUIT, LIBELLE)
Avec deux clés étrangères : NUMCLI de COMMANDE et NUMPROUIT de COMMANDE.

2. La colonne AGREATION dépend de colonnes qui ne forment pas un identifiant. La table n’est pas normalisée.
On la décompose en deux tables PRODUIT(NPRO, DATE_INTRO, IMPORTATEUR) et AGRE(DATE_INTRO,
IMPORTATEUR, AGREATION). Une clé étrangère : (DATE_INTRO, IMPORTATEUR) de PRODUIT.
3.

4. La clé de COMMANDE est {NCOM}. Les DF NCLI → NOM et NPRO → LIBELLE sont donc
anormales. Par décomposition selon chacune de ces DF, on obtient le schéma relationnel normalisé :
COMMANDE(NCOM, NCLI, DATE, NPRO);
CLIENT(NCLI, NOM);
PRODUIT(NPRO, LIBELLE);
COMMANDE[NCLI] ⊆ CLIENT[NCLI]
COMMANDE[NPRO] ⊆ PRODUIT[NPRO]

5. Le graphe ADF comporte un circuit. Les identifiants sont {FILM, VILLE} et {SALLE, FILM}.
Les deux DF suivantes sont donc anormales :
SALLE → VILLE et DISTRIBUTEUR → DELEGUE.
Cette dernière étant externe, elle permet une première décomposition :
CINE(FILM, VILLE, SALLE, DISTRIBUTEUR);
DIS(DISTRIBUTEUR, DELEGUE);
CINE[DISTRIBUTEUR] ⊆ DIS[DISTRIBUTEUR]
SALLE → VILLE FILM,
VILLE → DISTRIBUTEUR

La DF FILM, VILLE → DISTRIBUTEUR, non anormale, est externe et ne fait pas partie du noyau irréductible.
Elle peut donc faire l’objet d’une décomposition :
CINE(FILM, VILLE, SALLE);
DISTR(FILM, VILLE, DISTRIBUTEUR);

3
ème
Université Alger 1 Ben Youcef Ben Khedda 3 année Informatique - SI
Faculté des sciences Administration de Bases de Données
Département MI Dr. Aoudia - 2017/2018

DIS_DEL(DISTRIBUTEUR, DELEGUE);
CINE[FILM, VILLE] ⊆ DISTR[FILM, VILLE]
DISTR[DISTRIBUTEUR] ⊆ DIS_DEL[DISTRIBUTEUR]
SALLE → VILLE

Le noyau résiduel {FILM, VILLE, SALLE} est irréductible et non normalisé. La dernière relation CINE peut être
remplacée par un des trois schémas ci-dessous :
a. CINE(FILM, VILLE, SALLE); SALLE → VILLE
b. CINE(FILM, SALLE); LOC(SALLE, VILLE); CINE[SALLE] = LOC[SALLE] CINE*LOC: FILM,
VILLE → SALLE
c. CINE(FILM, VILLE, SALLE); LOC(SALLE, VILLE); CINE[SALLE, VILLE] = LOC[SALLE,
VILLE]
6-

4
ème
Université Alger 1 Ben Youcef Ben Khedda 3 année Informatique - ISIL
Faculté des sciences Bases de Données Avancées
Département MI Dr. Aoudia - 2017/2018

Série d’exercices du chapitre 1- Solution


Intégrité d’une base de données
Exercice 1 : détermination du résultat d’exécution d’un code trigger
Déterminer le rôle de chaque trigger dans les codes SQL ci-dessous
1.
CREATE OR REPLACE TRIGGER pasDeDeleteDansClient
BEFORE DELETE ON CLIENT
BEGIN
RAISE_APPLICATION_ERROR(-20555, 'erreur !...');
END;
2.
CREATE TRIGGER new_emploee
AFTER INSERT ON hr_table
BEGIN
INSERT INTO benefits_table (‘name’, ’street’ , ‘workig’)
VALUES (‘john’, 123 street t’, ‘2100’ )
END
3.
CREATE TRIGGER ToUpperCase
BEFORE INSERT OR UPDATE ON Sailors
FOR EACH ROW
BEGIN
new.name := UPPER(new.name )
return new
END
4.
CREATE TRIGGER View-Update
INSTEAD OF INSERT ON dog-and-owner
REFERENCING NEW ROW AS n
FOR EACH ROW
BEGIN
INSERT INTO Dog(name, weight) VALUE(n.d.name, weight)
INSERT INTO Owner(name, phone) VALUE(n.o.name, n.o.phone)
INSERT INTO Owns(O.name, D.name) VALUE(n.o.name, n.d.name)
END
5.
CREATE TRIGGER audit_sal
AFTER UPDATE OF salary ON employees
FOR EACH ROW
BEGIN
INSERT INTO employee_audit(employee_id,date, new_salary, old_salary)
VALUE(old.employee_id, SYSDATE,new.salary ,old.salary)
END
6.
CREATE TRIGGER art_four_trig1
INSTEAD OF INSERT on v_article_fournisseur1
DECLARE
vNbFour int := 0; vNbArt int := 0;
BEGIN
SELECT count(*) into vNbFour
FROM cdi_fournisseur
WHERE fo_numero=:new.fo_numero;

SELECT count(*) into vNbArt


FROM cdi_article
WHERE ar_numero = :new.ar_numero;

IF vnbart<>0 and vnbfour<>0 then


raise_application_error (-20001,'l''article et le fournisseur existent déjà');
ELSIF vnbart=0 then
insert into cdi_article(fo_numero,ar_numero,ar_nom,ar_poids,ar_couleur,
ar_stock,ar_pa,ar_pv)
values (:new.fo_numero,:new.ar_numero,:new.ar_nom,
:new.ar_poids,:new.ar_couleur,:new.ar_stock,:new.ar_pa,:new.ar_pv);
ELSE
insert into cdi_fournisseur (fo_numero,fo_nom)
values (:new.fo_numero,null);
END IF;
dbms_output.put_line('v_article_fournisseur1 terminé');*
END;

1
ème
Université Alger 1 Ben Youcef Ben Khedda 3 année Informatique - ISIL
Faculté des sciences Bases de Données Avancées
Département MI Dr. Aoudia - 2017/2018

Exercice 2 : écriture de triggers

1. Soit la relation suivante


Employee(nom_employe, salaire, bonus, date_dermodif, utilisateur_dermodif )

A. Ecrire le trigger qui assure qu'à chaque moment où une ligne est insérée ou mise à jour dans la table employee, le nom de l'utilisateur courant et
l'heure sont estampillés dans la ligne. Le trigger doit aussi assurer qu'un nom d'employé est donné et que le salaire est une valeur positive.

Solution

CREATE TRIGGER emp_stamp BEFORE INSERT OR UPDATE ON employee


FOR EACH ROW
BEGIN
-- Verifie que nom_employe et salary sont donnés
IF NEW.nom_employe IS NULL THEN
RAISE EXCEPTION 'nom_employe ne peut pas être NULL';
END IF;
IF NEW.salaire IS NULL THEN
RAISE EXCEPTION '% doit avoir un salaire ', NEW.nom_employe;
END IF;

-- Qui travaille pour nous si la personne doit payer pour cela ?


IF NEW.salaire < 0 THEN
RAISE EXCEPTION '% ne peut pas avoir un salaire négatif', NEW.nom_employe;
END IF;

-- Rappelons-nous qui a changé le salaire et quand


NEW.date_dermodif := current_timestamp;
NEW.date_dermodif := current_user;
RETURN NEW;
END;

B. Ecrire un trigger qui affiche respectivement, pour un employé, l’ancien salaire, le nouveau salaire et la différence entre ces deux salaires

CREATE OR REPLACE TRIGGER Print_salary_changes


BEFORE UPDATE ON Emp_tab
FOR EACH ROW
WHEN (new.nom_employe != NULL)
DECLARE
sal_diff number;
BEGIN
sal_diff := :new.sal - :old.sal;
afficher (nouveau salaire)
afficher(ancien salaire)
afficher (différence)
END ;

C. Ecrire un trigger qui permet de garder toujours la valeur de l’attribut bonus supérieure de 3% du salaire de l’employé

Create Trigger EmpBonus


Before Insert Or Update On Employee
For Each Row
Begin
new.bonus := new.salary * 0.03;
End;

D. Ecrire un trigger qui permet de sauvegarder le nombre d’employés ayant un salaire > 100 000 dans la table CadresSup
Create Trigger EmpSup
After Insert Or Update of salary Or Delete On Employee
For Each Statement
Begin
insert into R(cnt) Select count(*) from employee where salaire > 100 000;
End;

Exercice 3 :
Soit la relation suivante :
COMPTECLIENT(numCli, nomCli, nbComptes)

2
ème
Université Alger 1 Ben Youcef Ben Khedda 3 année Informatique - ISIL
Faculté des sciences Bases de Données Avancées
Département MI Dr. Aoudia - 2017/2018

1. Ecrire le trigger qui empêche un client d’avoir plus de 10 comptes en banque


CREATE TRIGGER verifieNbComptes
BEFORE INSERT ON COMPTECLIENT
FOR EACH ROW
DECLARE
nbComptes int;
BEGIN
SELECT nbComptes INTO nbComptes
FROM CLIENT
WHERE numCli = :new.numCli;
IF (nbComptes >= 10) THEN
RAISE_APPLICATION_ERROR(-20556 'Ce client a deja trop de comptes');
END IF;
END;

Exercice 4 :

3. Soit la base de données suivante

A. Ecrire un trigger qui empêche assure que la somme des prêts d’un client ne dépasse pas 100000.

Create Trigger CustMaxLoan1


After Insert On Borrower
For Each Row
Declare Takes into account the new loan assigned to
sumLoan int;
Begin
the customer (because it is “After Insert”
Select sum(amount) into sumLoan
From loan L, Borrower B
where L.loan_number = B.loan_number
And B.customer_name = new.customer_name;
IF sumLoan > 100,000 Then
RAISE_APPLICATION_ERROR(-20004, ’Cannot insert record.');
End IF;
End;

4.
La DRH annonce que désormais, tout nouvel employé devra avoir un numéro supérieur ou égal à 10000
Il faut donc interdire toute insertion qui ne reflète pas cette nouvelle directive

Solution
CREATE OR REPLACE TRIGGER TRG_BIR_EMP
BEFORE INSERT -- avant insertion
ON EMP -- sur la table EMP
FOR EACH ROW -- pour chaque ligne
Begin
If :NEW.empno < 10000 Then
RAISE_APPLICATION_ERROR ( -20010, 'Numéro employé inférieur à 10000') ;
End if ;
End ;

Exercice5 : écriture de triggers

1. Ecrire un trigger qui permet de Contrôler les salaires : ils doivent être plus grand que le plus petit des salaires
et plus petit que le plus grand des salaire
3
ème
Université Alger 1 Ben Youcef Ben Khedda 3 année Informatique - ISIL
Faculté des sciences Bases de Données Avancées
Département MI Dr. Aoudia - 2017/2018

2. Écrire un trigger qui permet de mettre le salaire à 5000$ si un employé n’a pas de salaire.

Employee(Name, Salary, Department)

Create trigger deffaultSalairy

Before insert or update of salary on employee

For each row

begin

When new.salary is null

New.salary = 5000

end

4
ème
Université Alger 1 Ben Youcef Ben Khedda 3 année Informatique - ISIL
Faculté des sciences Bases de Données Avancées
Département MI Dr. Aoudia - 2017/2018

3. Soit une table cumul sert à enregistrer le cumul des augmentations dont ont bénéficié les employés d'une
entreprise.
a. Ecrire le trigger qui fait la mise à jour automatique d’une table cumul qui totalise les augmentations de
salaire de chaque employé.

b. Ecrire un trigger qui ajoute une ligne dans la table cumul quand un employé est créé

Exercice 6 : Base de données commerce

Soit la base de données commerce suivante

5
ème
Université Alger 1 Ben Youcef Ben Khedda 3 année Informatique - ISIL
Faculté des sciences Bases de Données Avancées
Département MI Dr. Aoudia - 2017/2018

a. Créer le trigger T1 qui permet d’ajouter la quantité entrée de la table Achat à la quantité en stock dans la table produit
correspondant à chaque insertion d’un achat.
b. Créer le trigger T2 qui permet de retrancher la quantité sortie de la table Vente de la quantité en stock dans la table produit
correspondant à chaque insertion d’une vente.
c. Ecrire le trigger T3 dans la table Achat qui permet de mettre à jour la Qut_St de la table Produit après chaque suppression
d’un achat.
d. Ecrire le trigger T4 dans la table Vente qui permet de mettre à jour la Qut_St de la table Produit après chaque suppression
d’une Vente.
e. Modifier le trigger T1 pour mettre à jour la Qut_st de la table Produit après chaque modification d’une opération d’achat.
f. Modifier le trigger T2 pour mettre à jour la Qut_st de la table Produit après chaque modification d’une opération de Vente.

6
ème
Université Alger 1 Ben Youcef Ben Khedda 3 année Informatique - ISIL
Faculté des sciences Bases de Données Avancées
Département MI Dr. Aoudia - 2017/2018

7
ème
Université Alger 1 Ben Youcef Ben Khedda 3 année Informatique - ISIL
Faculté des sciences Bases de Données Avancées
Département MI Dr. Aoudia - 2017/2018

8
ème
Université Alger 1 Ben Youcef Ben Khedda 3 année Informatique - ISIL
Faculté des sciences Bases de Données Avancées
Département MI Dr. Aoudia - 2017/2018

9
ème
Université Alger 1 Ben Youcef Ben Khedda 3 année Informatique - ISIL
Faculté des sciences Bases de Données Avancées
Département MI Dr. Aoudia - 2017/2018

Exercice7 : Gestion de films

Soit la base de données suivante

10
ème
Université Alger 1 Ben Youcef Ben Khedda 3 année Informatique - ISIL
Faculté des sciences Bases de Données Avancées
Département MI Dr. Aoudia - 2017/2018

1. Supposons que l'on rajoute à la table Personne du schéma FilmBD ci-dessus, une colonne nbRoles
donnant le nombre de rôles ayant été joués par cette personne. Écrivez un TRIGGER pour mettre à jour cette
colonne suite à l'insertion d'un nouveau rôle.

2. En se référant au schéma de base de données ci-dessus, écrire pour chaque contrainte ci-dessous un
TRIGGER qui vérifie que :
a. Un film ne peut pas avoir plus de cinq genres différents. Vérifier cette contrainte lors d'une insertion
seulement.
b. Une personne ne peut pas jouer dans un film dont il/elle est le réalisateur. Vérifier cette contrainte
seulement lors de l'insertion dʼun nouveau rôle.
c. L'année de sortie d'un film ne peut pas être supérieure à l'année courante. Vérifier cette contrainte
lors d'une insertion ET d'un update.

Solution

11
ème
Université Alger 1 Ben Youcef Ben Khedda 3 année Informatique - ISIL
Faculté des sciences Bases de Données Avancées
Département MI Dr. Aoudia - 2017/2018

12
ème
Université Alger 1 Ben Youcef Ben Khedda 3 année Informatique - ISIL
Faculté des sciences Bases de Données Avancées
Département MI Dr. Aoudia - 2017/2018

13
Université Alger 1 Ben Youcef Ben Khedda 3ème année Informatique - SI
Faculté des sciences Administration de Bases de Données
Département MI Dr. Aoudia - 2017/2018

Série d’exercices du chapitre 5 et 6- Solution


BDD non Structurées, XML , Interrogation des BDD XML

PARTIE 1 : Documents XML

Exercice 1 : Déterminer les composants d’un document XML


Remplir les cases suivantes

Exercice 2: Document XML bien formé

Voila un document XML avec 5 erreurs. Entourez-les puis corrigez-les (Ne réécrivez pas le document,
faites les modifications dans le texte).

1
Université Alger 1 Ben Youcef Ben Khedda 3ème année Informatique - SI
Faculté des sciences Administration de Bases de Données
Département MI Dr. Aoudia - 2017/2018

Correction

Exercice 3 : Création d’un document XML à partir d’une définition


2
Université Alger 1 Ben Youcef Ben Khedda 3ème année Informatique - SI
Faculté des sciences Administration de Bases de Données
Département MI Dr. Aoudia - 2017/2018

Soit le document XML suivant. Donner le code XML correspondant

Solution

Exercice 4 : Création d’un livre en XML


3
Université Alger 1 Ben Youcef Ben Khedda 3ème année Informatique - SI
Faculté des sciences Administration de Bases de Données
Département MI Dr. Aoudia - 2017/2018

On souhaite écrire un livre en utilisant le formalisme XML. Le livre est structuré en sections
(au moins 2), en chapitres (au moins 2) et en paragraphes (au moins 2).
 Le livre doit contenir la liste des auteurs (avec nom et prénom).
 Tous les éléments doivent posséder un titre, sauf le paragraphe qui contient du texte.
 Proposez une structuration XML de ce document (avec 2 auteurs, 2 sections, 2 chapitres par section et 2
paragraphes par chapitre).

Votre document sera nommé livre1.xml.

Solution

4
Université Alger 1 Ben Youcef Ben Khedda 3ème année Informatique - SI
Faculté des sciences Administration de Bases de Données
Département MI Dr. Aoudia - 2017/2018

Exercice 5 : Arbres XML

1. Donner l’arbre XML correspondant au document XML suivant

Solution

5
Université Alger 1 Ben Youcef Ben Khedda 3ème année Informatique - SI
Faculté des sciences Administration de Bases de Données
Département MI Dr. Aoudia - 2017/2018

2. Même question

Réponse

3. Même question

6
Université Alger 1 Ben Youcef Ben Khedda 3ème année Informatique - SI
Faculté des sciences Administration de Bases de Données
Département MI Dr. Aoudia - 2017/2018

Partie 2 XQUERY

Exercice 6: Déterminer le résultat d’une requête XQuery

Soit le document XML «bib.xml » suivant

7
Université Alger 1 Ben Youcef Ben Khedda 3ème année Informatique - SI
Faculté des sciences Administration de Bases de Données
Département MI Dr. Aoudia - 2017/2018

1. Donner le résultat de la requête

<auteurs>
{ document("bib.xml")//book[2]/author/la }
</auteurs>

Solution

<?xml version="1.0"?>
<auteurs>
<la>Rigaux</la>
<la>Scholl</la>
<la>Voisard</la>
</auteurs>

2. Même question

<livre>
Tous les sous-elements sauf les auteurs:
{ document("bib.xml")//book[1]/(* except author) }
</livre>

Solution

<livre>
8
Université Alger 1 Ben Youcef Ben Khedda 3ème année Informatique - SI
Faculté des sciences Administration de Bases de Données
Département MI Dr. Aoudia - 2017/2018

Tous les sous-elements sauf les auteurs:


<publisher>O’Reilly</publisher>
<price>28.95</price>
</livre>

3. Même question

<livre>
Le prix suivi des auteurs:
{ document("bib.xml")//book[1]/(price,author) }
</livre>

Solution

Résultat:
<livre>
Le prix suivi des auteurs:
<price>28.95</price>
<author><la>Amann</la><fi>B.</fi></author>
<author><la>Rigaux</la><fi>P.</fi></author>
</livre>
On a changé l’ordre des noeuds (_union)

4.

5. Même question

Requête:
document("bib.xml")//book/author[la eq "Scholl"]

Résultat:
<author><la>Scholl</la><fi>M.</fi></author>

6. Même question

Requête:
document("bib.xml")//book[author/la eq "Scholl"]

Résultat:
ERROR

9
Université Alger 1 Ben Youcef Ben Khedda 3ème année Informatique - SI
Faculté des sciences Administration de Bases de Données
Département MI Dr. Aoudia - 2017/2018

On obtient une erreur car l’expression author/la (dans le prédicat)


retourne une séquence de longueur

7. Même question

Requête:
"Les auteurs du premier livre sont",
document("bib.xml")//book[1]/author/xf:string(la)

Résultat:
Les auteurs du premier livre sont, Amann, Rigaux
(xf:string est une fonction prédéfinie).

Exercice 7 : écrire des requêtes XQuery

Soit le document XML suivant. Ecrire les requêtes exprimées ci dessous

1. Pour chaque série, créez un élément serie avec un


attribut titre contenant le nom de la série et un
attribut editeur contenant le nom de son éditeur (la
valeur de l'attribut editeur est "" s'il n'y a pas
d'éditeur pour la série)
Solution
for $serie in doc("collection.xml")//serie
return
<serie
titre="{$serie/@nom}"
editeur="{$serie/editeur/@nom}"
/>

2. Pour chaque tome de la collection donner son


numero, le nom de sa serie et son titre sous forme
d'attributs.
Solution
for $tome in doc("collection.xml")//tome
let $serie :=
doc("collection.xml")//serie[tome=$tome]
return
<tome numero="{$tome/@numero}"
serie="{$serie/@nom}"
titre="{$tome/titre/text()}"/>
3. Même question mais en ordonnant les
résultats par titre.
Solution
for $tome in doc("collection.xml")//tome
let $serie :=
doc("collection.xml")//serie[tome=$tome]
let $titre := $tome/titre/text()
order by $titre
return
<tome numero="{$tome/@numero}"
serie="{$serie/@nom}" titre="{$titre}"/>

10
Université Alger 1 Ben Youcef Ben Khedda 3ème année Informatique - SI
Faculté des sciences Administration de Bases de Données
Département MI Dr. Aoudia - 2017/2018

Partie 3 XPATH

Exercice 8 : Comparaison des résultats d’exécution


Donnez un document pour lequel le résultat d’exécution les deux expressions suivantes est identique :

1. //COURS[INTITULE=’XML’]
2. //COURS[INTITULE=XML]

Solution

Solution :
1: <?xml version="1.0"?>
2: <COURS>
3: <INTITULE>XML</INTITULE>
4: <XML>XML</XML>
5: </COURS>
Justification.
– La première requête retourne les éléments de type COURS ayant un élément fils INTITULE dont
la valeur textuelle est XML.
– La seconde requête retourne les éléments de type COURS ayant un élément fils INTITULE et un
élément de type XML dont les valeurs textuelles sont identiques.

Exercice 9 : écriture d’une requête XPATH

Soit le document suivant

<cv>
<etatcivil>
<nom>Lemay</nom>
<prenom>Aurélien</prenom>
<date>5 Juin 1976</date>
<lieu> Tourcoing </lieu>
</etatcivil>

Q : J’ai un CV, je veux trouver le nom de la personne, ou est-il ?

R : obtenue par l’expression XPATH : /cv/ etatcivil/nom

Exercice 10 : Requêtes XPath


Soit le document XML suivant

11
Université Alger 1 Ben Youcef Ben Khedda 3ème année Informatique - SI
Faculté des sciences Administration de Bases de Données
Département MI Dr. Aoudia - 2017/2018

Écrivez les expressions XPath suivantes au format non abrégé :


1. trouver la liste des chapitres de la première section ;
2. trouver la liste des attributs du premier auteur ;
3. trouver la valeur (fonction string) de l’attribut nom du deuxième auteur ;
4. trouver la liste des chapitres contenant deux paragraphes ;
5. trouver la liste des chapitres dont un paragraphe possède le mot Premier ;
6. trouver la liste des sections ayant un chapitre ;
7. trouver la liste des éléments ayant un seul attribut ;
8. trouver la liste des éléments ayant un ancêtre sections, sous deux formes ;
9. trouver la liste des attributs titre ;
10. trouver la liste des éléments ayant deux fils et pas d’attributs ;
11. trouver la liste des sections sans paragraphe ;
12. trouver la liste des éléments dont le texte contient le mot paragraphe.

Solution

12
Université Alger 1 Ben Youcef Ben Khedda 3ème année Informatique - SI
Faculté des sciences Administration de Bases de Données
Département MI Dr. Aoudia - 2017/2018

13

Vous aimerez peut-être aussi