Vous êtes sur la page 1sur 3

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

Faculté des sciences SMI/S5


Département d’Informatique 2022/2023

Session : Automne (Normale) Le 21 Janvier 2023 Durée : 1h 30


Correction
Exercice 1 :
ExtraitNaissance AttestationDeces
DeclarationNaissance NumExtrait <pi> Caractère variable (20)
NumAttestationDece <pi> Caractère variable (20)
NumDecl <pi> Entier <O> Identifiant_1 <pi> Identifiant_1 <pi> OfficierEtatCivil
NumCertificatNaiss Caractère variable (20) MatriculeOfficier <pi> Caractère variable (20) <O>
1,1
Identifiant_1 <pi> 1,1 NomOfficier Caractère variable (20)
1,1 PrenomOfficier Caractère variable (20)
DelivrerEN DatePriseService Date
1,1 DelivrerAD Identifiant_1 <pi>
avoirLieuNN ...
EffectuerDN
0,n 1,1 0,n 0,n
0,n Asscier
1,n
1,n
EnregistrerNaiss
BureauEtatCivil
Declarant EnregistrerDece
NumArrondissment <pi> Entier
NumPieceId <pi> Caractère variable (10) <O> 1,n 1,n
NomPrefc Caractère variable (20)
Identifiant_1 <pi> Ville Caractère variable (20)
1,n
EnregistrementNaissance
Identifiant_1 <pi>
... NumEnreg <pi> Entier EnregisttementDece
0,n
nomNaiss Caractère variable (20)
1,n NumEnregD <pi> Caractère variable (20) <O>
PrenomNaiss Caractère variable (20)
NumActeNaiss Caractère variable (20) <O>
dateNaiss Date & Heure DateDec Date & Heure
nomPere Caractère variable (20)
LieuDece Caractère variable (20)
PrenomPere Caractère variable (20)
EffectuerDD1,1 DeclarationDeces nomMere Caractère variable (20) Identifiant_1 <pi>
avoirLieuDD PrenomMere Caractère variable (20) ...
NumDeclDD <pi> Entier <O>
1,1 PrenomGPP Caractère variable (20) 1,1
NumCertMedLegiste Caractère variable (20) <O>
PrenomGPM Caractère variable (20)
Identifiant_1 <pi> villeNaiss Caractère variable (20) EnregistrerDDans
... PaysNaiss Caractère variable (20)
Identifiant_1 <pi>
1,n

1,n Registre
EnregistrerNDans NumReg <pi> Caractère variable (20) <O>
1,n Année Date
Identifiant_1 <pi>
...

Exercice 2 :
Rappel énoncé: La relation suivante décrit des commandes faites par des clients, avec les produits et quantités
commandées par client.
Commandes (NumCom, DateCom, NumCli, AdrCli, NumProd, Prix, Qte)
a. Quelle est la clé de cette relation ?
b. En quelle forme normale elle est ?
c. La mettre en 3FN le cas échéant.

Correction :
1.
Avant de chercher la clé, il faut d'abord déterminer les DFs. on a les règles de gestion suivantes :
1. NumCom → DateCom, NumCli, AdrCli (Une commande est faite par un seul client avec une adresse
donnée et à une date donnée
2. NumCom, NumProd → Prix, Qte (Dans une commande, un produit a un prix donnée est commandé avec
une quantité donnée)
3. NumCli → AdrCli (Un client a une seul adresse)
4. NumProd → Prix (Il y un seul prix pour un produit)
On peut alors dire que (NumCom, NumProd) déterminent tous les autres attributs. C'est donc une clé.

2.
a. Comme NumCli, entre autres attributs, ne dépend que de NumCom, c'est à dire une partie de la clé, la
relation est en 1FN mais pas en 2FN. On décompose donc :
Commandes (NumCom, DateCom, NumCli, AdrCli )
Com-Prods (NumCom, NumProd, Prix, Qte)

1
b. On a la relation Commandes n'est pas en 3FN, on décompose
Commandes (NumCom, DateCom, NumCli)
Clients (NumCli, AdrCli )
qui sont en 3FN

c. On a aussi la relation Com-Prods n'est pas en 2FN. On décompose en deux relations


Com-Prods (NumCom, NumProd, Qte)
Produits (NumProd, Prix)
qui sont en 3FN.

Résultat final : les quatre dernières relations (b.) et (c.)

Commandes (NumCom, DateCom, NumCli)


Clients (NumCli, AdrCli )
Com-Prods (NumCom, NumProd, Qte)
Produits (NumProd, Prix)

Exercice 3 :
1. Schéma relationnel
Immeuble (nomImm, Adresse , nbEtages, annéeConstruction, #nomGérant)
Appart (noApp, #nomImm, superficie, étage)
Personne (nom, age, prefession)
Occupant (nomImm, noApp, nomOcc, anneeArrivee)
2. MCD Correspondant :
Appartement
appartenir
noApp <Indéfini>
1,1 superficie <Indéfini>
etage <Indéfini>

0,n
1,n
Immeuble
nomImm <Indéfini>
adress <Indéfini> occuper
1,n
nbEtages <Indéfini> anneeArrivee <Indéfini>
anneeConstruction <Indéfini>

1,1
0,n

Personne
gerer nom <Indéfini>
age <Indéfini>
0,n
profession <Indéfini>

3. Script SQL pour créer la table Occupant

CREATE TABLE Occupant (


nomImm varchar(20),
noApp int,
nomOccup varchar(20),
anneeArrivee Year,
PRIMARY KEY (nomImm, noApp, nomOccup),
FOREIGN KEY (nomImm) REFERENCES Immeuble(nomImm),
FOREIGN KEY (noApp) REFERENCES Appart(noApp),
FOREIGN KEY (nomOccup) REFERENCES Personne(nom)
); ENGINE=INNODB;

2
4. 4.a.
profession
Rentier
Informaticien
4.b
nomGerant superficie
Doug 150
Doug 50
Doug 200
Doug 50
Ross 250
Ross 250

5. 5.a. π nomOcc (σsuperficie<70(Appart noApp=noApp Occupant))

5.b π nomOcc (Immeuble nomGerant ≠ nomOcc Occupant)

Autre solution : π nomOcc (σnomGerant ≠ nomOcc (Immeuble nomImm = nomImm Occupant)

6. 6.a. Select P.age, P.profession


From Personne P
Inner Join Occupant O ON O.nomOcc=P.nom
Inner Join Immeuble I ON O.nomImm=I.nomImm
Where I.nomGerant= "Ross";

6.b. Select A.nomImm, A.noApp


From Appart A
MINUS
Select O.nomImm, O.noApp
From Occupant O;

6.c Select AVG(P.age)


From Personne P
Inner Join Occupant O On P.nom=O.nomOccup
Inner Join Immeuble I On O.nomImm=I.nomImm
Where (O.anneeArrivee – I.anneeConstruction) > 20;

6.d Select Count(*)


From Personne P
Inner Joint Occupant O On P.nom = O.nomOcc
Inner Joint Appart A On O.noApp = A.noApp
Where P.profession = "Informaticien" and A.superficie > 100 and O.nomImm = "Koudalou";

Vous aimerez peut-être aussi