Vous êtes sur la page 1sur 5

Université de Kairouan Année Universitaire

Institut Supérieur d’Informatique 2006-2007


et de Gestion de Kairouan

SESSION JANVIER 2007

FILIERE 3ème année Informatique de Gestion


EPREUVE Bases de données
Durée 2 heures
Documents non autorisés
Enseignants R. ZAAFRANI – M. MTIBAA

Exercice 1 (10 points)

On vous donne le schéma E/R suivant :

Race 1-N 1-1 Cheval Propriétaire


acquisPar
1-5 1-10 atient
Nom deRace Nom montant Nom
descriptif Poids Prénom
1-1 Naissance
0-N
parentDe 0-N
néLe
0-1 0-1
apourPère enfantDe 0-N Date
mortLe 0-N jour
mois
an

1) Construire le modèle relationnel correspondant.


2) Partant de ce modèle relationnel indiquer la sémantique de chacune des requêtes suivantes :
a) Selectnom_propriétaire = "Ben Saleh" (acquis)
b) Select (300<Poids<400)(Cheval)
c) projnom_propriétaire(Selectan=2003(Join….(Propriétaire, acquis)))
d) projnomCheval(Cheval) - projnomPère(Cheval)
e) proj(nomCheval, nom_propriétaire)(acquis) / proj(nom_propriétaire)(acquis)
f) proj(nomCheval, nom_propriétaire)(acquis) / proj(nomCheval)(acquis)

3) Construire les requêtes suivantes à l’aide de l’algèbre relationnelle(forme textuelle).

a) les propriétaires ayant possédé un cheval de plus de 600 kg


b) les propriétaires ayant possédé tous les chevaux
c) années où il y a eu des naissances mais pas de décès
d) années où il y a eu des décès mais pas de naissances
e) races n’ayant qu’un seul représentant
f) propriétaires n’ayant des chevaux que d’une seule race
g) propriétaires ayant au moins un cheval de chaque race

Page 1/2
Exercice 2 (10 points)

Soient les schémas suivants (MEDicament présentés dans un FORmat type à un certain coût
soignant une MALadie).

PREsentation MED FORmat Prix coûte MED PRIX soigne MED MAL
d1 1 10 d1 11 d1 a1
d1 2 20 d2 32 d2 a2
d2 1 30 d3 43 d2 a3
d3 1 10 d4 24 d3 a1
d4 3 20 d5 15 d4 a2
d5 1 30 d6 16 d5 a2
d5 2 10 d7 17 d5 a3
d6 2 20 d6 a1
d7 1 30 d6 a3
d7 a3

1) Créer les tables correspondantes, en spécifiant soigneusement les clés primaires


et étrangères avec la syntaxe SQL.

2) Ecrire en SQL les requêtes suivantes :

• Q1 : liste ordonnée des médicaments avec l’ensemble des maladies qu’ils soignent.
• Q2 : liste des maladies associées aux médicaments sous le format le moins cher.
• Q3 : liste des formats ordonnées selon leur moyenne de prix.
• Q4 : liste des différentes maladies associées aux médicaments les plus chers.
• Q5 : liste des maladies encadrées par les coûts les plus élevés et les coûts les plus
bas des médicaments la soignant.
• Q6 : Resserrer les prix des formats pour chaque médicament : augmenter le prix le
plus bas de 10%, diminuer le prix le plus haut de 15 %.
• Q7 : Eliminer tous les médicaments les plus chers (dans leurs différents formats).
• Q8 : Médicaments soignant plus de deux maladies.

Bon Courage.

Page 2/2
Correction de l'examen semestriel (Janvier 2007)

FILIERE 3ème année Informatique de Gestion


EPREUVE Bases de données
Enseignants R. ZAAFRANI – M. MTIBAA

Exercice 1 (10 points)

1) Construire le modèle relationnel correspondant. (2 pts)


- Race (Nom, descriptif)
- Cheval (NomCheval, Poids, NomRace#,NomPère#,
JourNaissance#,MoisNaissance#,AnNaissance#, JourDécès#,MoisDécès#,AnDécès#)
- Date (jour, mois, an)
- Propriétaire (Nom_Propriétaire, Prénom, Naissance)
- Acquis(NomCheval#, Nom#, Prénom#,
JourAcquisition#,MoisAcquisition#,AnAcquisition#, montant)

2) Indiquer la sémantique de chacune des requêtes suivantes :


a) Selectnom_propriétaire = "Ben Saleh" (acquis) (0.5 pt)
La liste des acquisitions de la famille « Ben Saleh » avec les dates et les montants d’acquisition.

b) Select (300<Poids<400)(Cheval) (0.5 pt)


La liste des chevaux dont le poids est compris entre 300 et 400 Kgs.

c) projnom_propriétaire(Selectan=2003(Join….(Propriétaire, acquis))) (0.5 pt)


La liste des propriétaires ayant acquis un cheval en 2003.

d) projnomCheval(Cheval) - projnomPère(Cheval) (0.5 pt)


La liste des chevaux qui n’ont pas de descendance.

e) proj(nomCheval, nom_propriétaire)(acquis) / proj(nom_propriétaire)(acquis) (0.5 pt)


La liste des chevaux qui ont été possédés par tous les propriétaires acquéreurs.

f) proj(nomCheval, nom_propriétaire)(acquis) / proj(nomCheval)(acquis) (0.5 pt)


La liste des propriétaires ayant possédé tous les chevaux.

3) Construire les requêtes suivantes à l’aide de l’algèbre relationnelle(forme textuelle).

a) les propriétaires ayant possédé un cheval de plus de 600 kg (0.5 pt)


projnom_propriétaire, prénom_propriétaire(Selectpoids>600(Join…(Cheval, Join….(Propriétaire,
acquis))))
b) les propriétaires ayant possédé tous les chevaux (0.5 pt)
proj(nomCheval, nom_propriétaire)(acquis) / proj(nomCheval)(acquis)
c) années où il y a eu des naissances mais pas de décès (0.5 pt)
projAnNaissance(Cheval) - projAnDécès(Cheval)

d) années où il y a eu des décès mais pas de naissances (0.5 pt)


projAnDécès(Cheval) - projAnNaissance(Cheval)
e) races n’ayant qu’un seul représentant (1 pt)
projNomRace(selectcompte=1(compteNomRace(Cheval)))
Page 1/3
f) propriétaires n’ayant des chevaux que d’une seule race (1 pt)

projnom_propriétaire(selectcompte=1(comptenom_propriétaire(projnom_propriétaire,
NomRace(Join…(Cheval, acquis)))))

g) propriétaires ayant au moins un cheval de chaque race (1 pt)

projnom_propriétaire, NomRace(Join…(Cheval, acquis) / proj(NomRace)(Race)

Exercice 2 (10 points)


1) (1 pt)
CREATE TABLE PREsentation (
MED VARCHAR(2),
FORmat NUMBER(1),
Prix NUMBER(2),
Constraint PREsentation_PK PRIMARY KEY (MED,FORmat),
Constraint PREsentation_MED_FK FOREIGN KEY (MED)
REFERENCES coûte(MED)
);

CREATE TABLE Coûte (


MED VARCHAR(2),
Prix NUMBER(2),
Constraint coûte_PK PRIMARY KEY (MED)
);

CREATE TABLE Soigne (


MED VARCHAR(2),
MAL VARCHAR(2),
Constraint soigne_PK PRIMARY KEY (MED,MAL),
Constraint soigne_MED_FK FOREIGN KEY (MED) REFERENCES
coûte(MED)
);

Q1) liste ordonnée des médicaments avec l’ensemble des maladies qu’ils soignent. (1 pt)
SELECT MED,MAL
FROM soigne
ORDER BY MED;

Q2) liste des maladies associées aux médicaments sous le format le moins cher. (1 pt)

SELECT S.MAL, S.MED, Min(P.Prix) AS MinDePrix


FROM Soigne AS S, PREsentation AS P
WHERE S.MED=P.MED
GROUP BY S.MAL, S.MED;

Q3) liste des formats ordonnées selon leur moyenne de prix. (1 pt)

SELECT FORmat, AVG(Prix)


FROM PREsentation
GROUP BY FORmat
ORDER BY AVG(Prix);
Page 2/3
Q4) maladies associées aux médicaments les plus chers. (1 pt)

SELECT DISTINCT MAL


FROM soigne
WHERE MED IN (SELECT MED
FROM PREsentation
Where Prix = (Select Max(Prix) FROM PREsentation));

Q5) liste des maladies encadrées par les coûts les plus élevés et les coûts les plus bas des
médicaments la soignant. (1 pt)

SELECT S.MAL, Min(P.Prix), Max(P.Prix)


FROM Soigne AS S, PREsentation AS P
WHERE S.MED=P.MED
GROUP BY S.MAL;

Q6) Resserrer les prix des formats pour chaque médicament : augmenter le prix le plus bas
de 10%, diminuer le prix le plus haut de 15 %. (2 pts)

UPDATE PREsentation P1 SET Prix = Prix*1.1


WHERE Prix=(Select Min(prix)
FROM PREsentation P2
Where P2.MED= P1.MED
Group By P2.MED
Having Count(*) > 1); -- Médicaments ayant au moins 2 formats

UPDATE PREsentation P1 SET Prix = Prix*0.85


WHERE Prix=(Select Max(prix)
FROM PREsentation P2
Where P2.MED= P1.MED
Group By P2.MED
Having Count(*) > 1); -- Médicaments ayant au moins 2 formats

Q7) Eliminer tous les médicaments les plus chers (dans leurs différents formats). (1 pt)

DELETE FROM PREsentation DELETE FROM PREsentation


WHERE Med In(Select Med WHERE Med In(Select Med
From PREsentation From PREsentation
Where Prix=(Select Max(prix) Where Prix>= All(Select prix
FROM PREsentation)); FROM PREsentation));

Q8) Médicaments soignant plus de deux maladies. (1 pt)

SELECT MED
FROM Soigne
GROUP BY MED
HAVING COUNT(*) >= 2;

Page 3/3