Vous êtes sur la page 1sur 4

Exercice 1 (4pts)

Etablissement = (Nom_Etablissement, adresse)

Centre = (Nom_Centre , Adresse_Centre , Tarif , Capacité , Lieu , Tranche_Age )

Fournisseur = (Code_Fournisseur , Nom_Fournisseur , Adress_Fournisseur )

Cadeau = (Code_Cadeau , libellé , photo , Prix , #Code_Fournisseur)

Salarié = (Matricule, Nom , Prénom , #Matricule_1*, #Nom_Etablissement)

Enfant = (Code_Enfant , Prénom_Enfant , Date_Naissance , #Matricule)

Réservation_Cadeau = (Num_Réservation , Date_Réservation , #Code_Cadeau, #Code_Enfant)

Affecter = (#Code_Enfant, #Nom_Centre, Date_Affectation)

Exercice 2 (6pts)

Factorisation des DFs :


NumAssurance -> NumAssuré
NumAssurance, NumImmat -> NumCond, TypeAss, Bonus
NumCond, NumAssurance -> NumImmat
NumPers -> Nom, Prénom, Adresse
NumAssuré -> NumPers
NumCond -> NumPers

Travail à faire :
1- Proposer une clé primaire pour la relation Assurance.
La clé primaire = { NumAssurance, NumImmat }
Assurance (NumAssurance, NumImmat NumCond, NumPers, Nom, Prenom, Adresse,
NumAssuré, TypeAss, Bonus)

2- Quelle est la forme normale de la relation Assurance.


Cette relation est à la 1ère frome normale car :
- Elle a une clé
- Les attributs sont atomiques
--- 1pt (0.5 non 2ème FN + 0.5 explication)
Cette relation n’est pas à la 2ème forme normale car il existe des attributs non clé qui
dépendent d’une partie de la clé uniquement.
Exemple :
- NumAssurance -> NumAssuré

3- Déduire les schémas de relations en la 3ème FN.


Décomposition pour obtenir la 2ème FN :

R1 (#NumAssurance, NumImmat, NumCond, NumPers, Nom, Prenom, Adresse, TypeAss,


Bonus)
R2 (NumAssurance, NumAssuré)

Décomposition pour obtenir la 3ème FN :

La relation R1 n’est pas à la 3ème FN car des attributs non clé dépendent d’autres attributs non clé.

Exemples :

- NumPers -> Nom, Prénom, Adresse


- NumCond -> NumPers
- NumAssuré -> NumPers

VehiculeAssure (#NumAssurance, NumImmat, #NumCond, TypeAss, Bonus)


Personne (NumPers, Nom, Prenom, Adresse)
Conducteur (NumCond, #NumPers)
Assuré (NumAssuré, #NumPers)
Assurance (NumAssurance, #NumAssuré)
Exercice 3 (10pts)

Client (CodeClient, Nom, Prénom, Rue, CodePostal, Ville, Tel)


Echantillon (CodeEchantillon, DateEchantillon, #CodeClient)
TypeAnalyse (RéférenceType, Désignation, Prix)
Analyse (#CodeEchantillon, #RéférenceType, Date_Réalisation)

Travail demandé :
1- Créer la table Analyse en spécifiant les contraintes d’intégrités nécessairest
Create table Analyse (
CodeEchantillon char(10) references Echantillon (CodeEchantillon),
RéférenceType char(10) references TypeAnalyse(RéférenceType),
Date_Réalisation date,
Constraint AnalysePK Primary Key (CodeEchantillon, RéférenceType)
);

2- Ajouter le champ email, de taille maximale = 30, à la table Client.


Alter table Client Add Email varchar(30) ;

3- Exprimer les requêtes suivantes en SQL :


a- Donnez les noms, prénoms des clients qui n’ont pas d’emails.
SELECT Nom, Prenom
FROM CLIENT
WHERE Email IS NULL;

b- Donnez les noms, prénoms et adresses complètes des clients (rue, code postal et
ville) ayant fourni des échantillons en 2022.
SELECT Nom, Prenom, Rue, CodePostal, Ville
FROM CLIENT C, ECHANTILLON E
WHERE C.CodeClient = E.CodeClient
AND DateEchantillon BETWEEN '01/01/2022' AND '31/12/2022' ;
c- Donner la recette (la somme d’argent encaissée) du laboratoire pour le mois de Décembre
2022.
SELECT Sum(Prix) As Recette
FROM TypeAnalyse A1, Analyse A2
WHERE A1.RéférenceType=A2.RéférenceType
AND Date_Réalisation BETWEEN '01/12/2022' AND '31/12/2022' ;

d- Donnez les noms, prénoms des clients attendant le résultat d’une analyse (échantillon non
analysé).
SELECT Nom, Prenom
FROM Client C, Echantillon E
WHERE C.CodeClient=E.CodeClient
AND CodeEchantillon NOT IN (SELECT CodeEchantillon FROM Analyse) ;

e- Donnez pour chaque client par ordre alphabétique (nom et prénom) le nombre de ses
échantillons déposés ainsi que la date de dépôt de son échantillon le plus ancien et la date
de dépôt de son échantillon le plus récent.
SELECT Nom, Prenom, count (*) As NbrEchantillons, Min (DateEchantillon) As
AncienEchantillon, Max (DateEchantillon) As RécentEchantillon
FROM Client C, Echantillon E
WHERE C.CodeClient = E. CodeClient
Group BY Nom, Prenom;

f- Donnez les codes et dates des échantillons pour lesquels plus de 5 analyses ont été
réalisées.
SELECT E.CodeEchantillon, DateEchantillon
FROM ECHANTILLON E, Analyse A
WHERE E.CodeEchantillon = A.CodeEchantillon
GROUP BY E.CodeEchantillon, DateEchantillon
HAVING Count (*) >5;

Vous aimerez peut-être aussi