Vous êtes sur la page 1sur 4

Université Ibn Tofaïl Examen : Base de données

Faculté des sciences SMI/S5


Département d’Informatique 2021/2022

Session : Automne (Normale) Le 07 Février 2022 Durée : 1h 30


Correction de l’examen BD
Exercice 1 : Modélisation MCD (6 points)

A.

Equipe Joueur
CodeEquipe <pi> Caractère variable (10) <O> 0,n Composer NumImmatriculation <pi> Entier <O>
NomEq Caractère variable (40) DateAdhésion Date Nom Caractère variable (20)
DateCreation Date 0,n Prénom Caractère variable (20)
Identifiant_1 <pi> DateNaiss Date
... Identifiant_1 <pi>
...
1,n
1,n

Jouer Participer
Debut Heure
Fin Heure
...
2,2

Match
4,n Arbitre
NumMatch <pi> Entier <O> Diriger
DateMatch Date NumArbitre <pi> Entier <O>
1,1
HeurDeb Heure 1,n NomArbitre Caractère variable (20)
Resultat Caractère variable (10) PrenomArbitre Caractère variable (20)

Identifiant_1 <pi> Identifiant_1 <pi>


... ...

B.

Client
CodeClient <pi> Caractère variable (20) <O>
NomClient Caractère variable (40)
PrenomClient Caractère variable (40)
Adresse Caractère variable (100)
Tel Entier
Identifiant_1 <pi>
...
1,n

concerner

Produit
RefProduit <pi> Caractère variable (20) <O> 1,1 1,1
DesignationProduit Caractère variable (20) contenir

Identifiant_1 <pi> Livraison


... NumLiv <pi> Caractère variable (20) <O>
DateLiv Date & Heure
1,n
quantité Entier
Identifiant_1 <pi>
Voiture ...
1,1
NumVoiture <pi> Caractère variable (20) <O>
Puissance Entier Assurer
AnneeFabrication Date 1,n utiliser

Identifiant_1 <pi>
... 1,1 1,n

Livreur

1,n CodeEmp <pi> Caractère variable (20) <O>


Service
NomEmp Caractère variable (40)
NomService <pi> Caractère variable (20) <O> Appartenir
1,1 PrenomEmp Caractère variable (40)
Identifiant_1 <pi> AdressEmp Caractère variable (100)
Identifiant_1 <pi>
...

1
Exercice 2 : Normalisation et Dépendances fonctionnelles (3 points)

Soit la relation suivante :


CarnetDeVoyage (numAuteur, nomAuteur, prenomAuteur, numVille, nomVille, nomPays,
descriptionVoyage)

numAuteur → nomAuteur
numAuteur → prenomAuteur
numVille → nomVille
numVille → nomPays
numAuteur, numVille → description

1. Une clé est un groupe d'attributs minimal qui détermine tous les attributs de la relation.
Il y a une unique clé (numAuteur, numVille).
numAuteur, numVille → nomAuteur
numAuteur, numVille → prenomAuteur
numAuteur, numVille → nomVille
numAuteur, numVille → nomPays
numAuteur, numVille → description
La réflexivité et la transitivité sont utilisées à chaque fois de la même façon, par exemple,
pour le premier :
numAuteur, numVille → numAuteur
ET numAuteur → nomAuteur
DONC numAuteur, numVille →nomAuteur
2. La relation est en 1NF, on a identifié une clé et les attributs sont atomiques. Elle n'est pas en
2NF car des attributs faisant partie de la clé déterminent d'autres attributs, par exemple :
numAuteur → nomAuteur.
3. Auteur(#numAuteur, nomAuteur, prenomAuteur)
Ville(#numVille, nomVille, nomPays)
CarnetDeVoyage(#numAuteur, #numVille, description)

Exercice 3 : Algèbre relationnelle (4 points)


Soit la base de données BANQUE contenant les tables suivantes :

 AGENCE (Num_Agence, Nom, Ville, Actif)


 CLIENT (Num_Client, Nom, Prenom, Ville)
 COMPTE (Num_Compte, #Num_Agence, #Num_Client, Solde)
 EMPRUNT (Num_Emprunt, #Num_Agence, #Num_Client, Montant)

1.

2
Agence
Compte
NumAgence <pi> Caractère variable (10) <O>
NomAg Caractère variable (20) 1,n NumCompte <pi> Entier <O>
disposer
VilleAg Caractère variable (20) Solde Décimal
1,1
Actif Décimal Identifiant_1 <pi>
Identifiant_1 <pi> ...
... 1,1
1,n

Association_3 appartenir

1,n
1,1
Client
Emprunt NumClient <pi> Entier <O>
benificier
NumEmprunt <pi> Entier <O> 1,1 NomCl Caractère variable (40)
Montant Décimal 1,n PrenomCl Caractère variable (40)
Identifiant_1 <pi> VilleCl Caractère variable (50)
... Identifiant_1 <pi>
...

2. Les clients résidant à Kénitra, avec un compte dont le solde est supérieur à 10 000 et un emprunt
dont le montant est inférieur à 100 000.
πNum_Client(σville=’Kenitra’(Client) σsolde>1000(Compte) σmontant<100000(Emprunt))

3. Les clients n’ayant contracté aucun emprunt.


πNum_Client(Client) – πNum_Client(Emprunt)

4. Les clients ayant un compte dans la même agence que Mohammed Idrissi.
πNum_Client(πNum_Agence(σPrenom=’Mohammed’ AND Nom=’Idrissi’(Client) Compte) Compte)

Exercice 4 : Langage SQL (7 points)

Soit la base de données intitulée "gestion_projet" permettant de gérer les projets relatifs au
développement de logiciels suivante :

 Developpeur (NumDev, NomDev, AdrDev, EmailDev, TelDev)


 Projet (NumProj, TitreProj, DateDeb, DateFin)
 Logiciel (CodLog, NomLog, PrixLog, #NumProj)
 Realisation (#NumProj, #NumDev)

1. Créer les tables Projet et Logiciel :


CREATE TABLE Projet (
NumProj INT UNSIGNED PRIMARY KEY AUTO_INCREMENT,
TitreProj VARCHAR(40),
DateDeb Date,
DateFin Date,
)
ENGINE=InnoDB;

CREATE TABLE Logiciel (


CodeLog INT UNSIGNED PRIMARY KEY AUTO_INCREMENT,
NomLog VARCHAR(40),
PrixLog DECIMAL,
NumProj INT UNSIGNED,
CONSTRAINT fk_projet_numero -- On donne un nom à notre clé
FOREIGN KEY (NumProj) -- Colonne sur laquelle on crée la clé
REFERENCES Projet(NumProj) -- Colonne de référence

3
)
ENGINE=InnoDB;

2. Afficher les noms et les prix des logiciels appartenant au projet ayant comme titre « gestion
de stock », triés dans l’ordre décroissant des prix.
SELECT L.NomLog, L.PrixLog FROM Logiciel L INNER JOIN Projet P
ON L.NumProj=P.NumProj WHERE P.TitreProj="gestion de stock"
ORDER BY L.PrixLog DESC

3. Afficher le total des prix des logiciels du projet numéro 10. Lors de l’affichage, le titre de la
colonne sera « coût total du projet ».

SELECT SUM(PrixLog) as "cout total du projet" FROM Logiciel WHERE NumPRoj=10

4. Afficher le nombre de développeurs qui ont participé au projet intitulé « gestion de stock »

SELECT count(*) FROM Developpeur D INNER JOIN Realisation R


ON D.NumDev=R.NumDev INNER JOIN Projet P ON P.NumProj=R.NumProj
WHERE P.TitreProj= "gestion de stock"

5. Afficher les projets qui ont plus que 5 logiciels

SELECT NumProj, TitreProj FROM PRojet P INNER JOIN Logiciel L ON P.NumProj=L.NumProj


GROUP BY NumProj, TitreProj
HAVING count(*)>5

6. Les numéros et noms des développeurs qui ont participés dans tous les projets.

SELECT NumDev, NomDev FROM Developpeur D INNER JOIN Realisation R ON


D.NumDev=R.NumDev
GROUP BY NumDev, NomDev
HAVING count(*)=(SELECT COUNT(*) FROM Projet)

7. UPDATE Projet
SET DateFin = '17/04/2022'
WHERE TitreProj like ‘%Web%’ ;

Vous aimerez peut-être aussi