Exercices Corrigés Dépendances fonctionnelles(Forme Normale) – Partie 1

La meilleure façon d’apprendre quelque chose est de pratiquer des exercices. Nous avons préparer ces exercices corrigés pour les personnes (débutantes ou intermédiaires) qui sont familières avec les dépendances fonctionnelles et normalisation des bases de données. Nous espérons que ces exercices vous aideront à améliorer vos compétences sur les Dépendances fonctionnelles et Normalisation. Les exercices corrigés suivantes sont actuellement disponibles, nous travaillons dur pour ajouter plus d’exercices. Bon apprentissage!

Une dépendance fonctionnelle: X → Y signifie que la valeur de X détermine une seule valeur de Y.

Exemple: NumÉtudiant → NomÉtudiant.

Un numéro d’étudiant permet de déterminer un seul nom d’étudiant.

Les formes normales:

  • 1FN : les attributs contiennent des valeurs atomiques, pas de groupes répétitifs.
  • 2FN : être en 1FN + aucun attribut non-clé ne dépend d’une partie seulement d’une clé composée.
  • 3FN : être en 2FN + aucune dépendance transitive d’une clé vers un attribut non-clé.
  • BCNF : pour toute dépendance fonctionnelle non triviale X → Y, X doit être une super-clé.

 


Exercice 1 — Identifier les dépendances fonctionnelles

On considère la relation:

ETUDIANT(NumEtudiant, Nom, Prenom, DateNaissance, CodeClasse, NomClasse)

On suppose que :

  • Un numéro d’étudiant identifie un seul étudiant.
  • Un code classe identifie une seule classe.
  • Une classe possède un seul nom.

 

Questions

1.1) Donner les dépendances fonctionnelles.

NumEtudiant → Nom
NumEtudiant → Prenom
NumEtudiant → DateNaissance
NumEtudiant → CodeClasse
CodeClasse → NomClasse

 

1.2) Donner la clé primaire.

La clé est: NumEtudiant

 

1.3) Identifier une éventuelle dépendance transitive.

On a NumEtudiant → CodeClasse → NomClasse

Il existe donc une dépendance transitive: NumEtudiant → NomClasse via CodeClasse.

 


Exercice 2 — Vérifier la 1FN

On considère la relation:

CLIENT(IdClient, Nom, Téléphones)

Exemple :

| IdClient | Nom  | Téléphones             |
| -------- | ---- | ---------------------- |
| 1        | Alex | 0612345678, 0623456789 |
| 2        | Bob  | 0634567890             |
Questions

2.1) Cette relation est-elle en 1FN ?

❌ Non. L’attribut Téléphones contient plusieurs valeurs dans une même cellule. La 1FN exige que chaque cellule contienne une seule valeur atomique. On peut créer :
 
CLIENT

| IdClient | Nom  |
| -------- | ---- |
| 1        | Alex |
| 2        | Bob  |

TELEPHONE

| IdClient | Téléphone  |
| -------- | ---------- |
| 1        | 0612345678 |
| 1        | 0623456789 |
| 2        | 0634567890 |

Les relations sont maintenant en 1FN.

 


Exercice 3 — Passage de la 1FN à la 2FN

On considère la relation:

INSCRIPTION(NumEtudiant, CodeCours, NomEtudiant, NomCours, Note)

Les dépendances sont :

NumEtudiant → NomEtudiant
CodeCours → NomCours
(NumEtudiant, CodeCours) → Note

 

Questions

3.1) Quelle est la clé primaire ?

Un étudiant peut suivre plusieurs cours et un cours peut être suivi par plusieurs étudiants. La clé est donc composée: (NumEtudiant, CodeCours).

 

3.2) La relation est-elle en 2FN ?

On a: NumEtudiant → NomEtudiant. NomEtudiant dépend seulement d’une partie de la clé.
Et : CodeCours → NomCours. NomCours dépend également seulement d’une partie de la clé.
❌ La relation n’est donc pas en 2FN.

 

3.3) Si non, décomposer la relation.

On crée trois relations :

ETUDIANT(NumEtudiant, NomEtudiant)
COURS(CodeCours, NomCours)
INSCRIPTION(NumEtudiant, CodeCours, Note)

On obtient ainsi une relation en 2FN.

 


Exercice 4 — Passage de la 2FN à la 3FN

On considère la relation:

EMPLOYE(Matricule, Nom, CodeService, NomService)

Les dépendances sont :

Matricule → Nom
Matricule → CodeService
CodeService → NomService

 

Questions

4.1) Quelle est la clé primaire ?

La clé est : Matricule.

 

4.2) La relation est-elle en 2FN ?

La clé est simple. Il ne peut donc pas y avoir de dépendance partielle.
✅ La relation est en 2FN.

 

4.3) Est-elle en 3FN ?

On a:

Matricule → CodeService
CodeService → NomService

Donc :

Matricule → CodeService → NomService

Il existe une dépendance transitive.

❌ La relation n’est donc pas en 3FN.

 

4.4) Décomposer la relation.

Décomposition:

EMPLOYE(Matricule, Nom, CodeService)
SERVICE(CodeService, NomService)

Les deux relations sont maintenant en 3FN.

 


Exercice 5 — Trouver la clé candidate

On considère la relation:

R(A, B, C, D, E)

avec les dépendances fonctionnelles :

A → B
B → C
AC → D
D → E

 

Questions

5.1) Déterminer la ou les clés candidates.

Commençons avec A. On obtient :

A → B
B → C
AC → D
D → E

Donc : A+ = {A, B, C, D, E}

Comme A+ contient tous les attributs, A est une clé candidate.

 


Exercice 6 — Déterminer la forme normale

On considère la relation:

R(A, B, C)

avec les dépendances fonctionnelles :

A → B
B → C

On considère que A est la clé primaire.

 

Questions

6.1) La relation est-elle en 1FN, 2FN ou 3FN ?

1FN. On suppose que les attributs sont atomiques.

2FN. La clé A est simple. Il ne peut donc pas y avoir de dépendance partielle.

Pas en 3FN. On a: A → B → C. Il existe une dépendance transitive de la clé A vers C.

Donc R est en 2FN mais pas en 3FN.

 


Exercice 7 — Décomposition en 3FN

On considère la relation:

VENTE(NumVente, DateVente, CodeClient, NomClient, VilleClient)

avec les dépendances fonctionnelles :

NumVente → DateVente
NumVente → CodeClient
CodeClient → NomClient
CodeClient → VilleClient

 

Questions

7.1) Décomposer cette relation afin d’obtenir des relations en 3FN.

On remarque:

NumVente → CodeClient
CodeClient → NomClient
CodeClient → VilleClient

Donc :

NumVente → CodeClient → NomClient
NumVente → CodeClient → VilleClient

Il existe une dépendance transitive. Voici la décomposition:

VENTE(NumVente, DateVente, CodeClient)
CLIENT(CodeClient, NomClient, VilleClient)

✅ Résultat: Les deux relations sont en 3FN.

 


Exercice 8 — Dépendances fonctionnelles avec clé composée

On considère la relation:

RESULTAT(CodeEtudiant, CodeMatiere, NomEtudiant, NomMatiere, Coefficient, Note)

avec les dépendances fonctionnelles :

CodeEtudiant → NomEtudiant
CodeMatiere → NomMatiere
CodeMatiere → Coefficient
(CodeEtudiant, CodeMatiere) → Note

 

Questions

8.1) Déterminer la clé.

Un étudiant peut avoir plusieurs matières et une matière peut concerner plusieurs étudiants. Donc: (CodeEtudiant, CodeMatiere) est la clé.

 

8.2) Vérifier la 2FN.

On a: CodeEtudiant → NomEtudiant

et :

CodeMatiere → NomMatiere
CodeMatiere → Coefficient

Ces attributs dépendent seulement d’une partie de la clé.

❌ La relation n’est pas en 2FN.

 

8.3) Décomposer si nécessaire.

ETUDIANT(CodeEtudiant, NomEtudiant)
MATIERE(CodeMatiere, NomMatiere, Coefficient)
RESULTAT(CodeEtudiant, CodeMatiere, Note)

 


Exercice 9 — BCNF

On considère la relation:

ENSEIGNEMENT(Etudiant, Cours, Professeur)

avec les dépendances fonctionnelles :

(Etudiant, Cours) → Professeur
Professeur → Cours

 

Questions

9.1) La relation est-elle en BCNF ?

On a: Professeur → Cours

Pour respecter la BCNF, Professeur doit être une super-clé.

Mais Professeur ne détermine pas Etudiant.

Donc: Professeur ❌ n’est pas une super-clé.

La relation n’est donc pas en BCNF.

Décomposition:

PROFESSEUR_COURS(Professeur, Cours)
ETUDIANT_PROFESSEUR(Etudiant, Professeur)

 


Exercice 10 — Exercice complet

On considère la relation:

GESTION_PROJET(
NumProjet,
NomProjet,
NumEmploye,
NomEmploye,
CodeService,
NomService,
Fonction
)

avec les dépendances fonctionnelles :

NumProjet → NomProjet
NumEmploye → NomEmploye
NumEmploye → CodeService
CodeService → NomService
(NumProjet, NumEmploye) → Fonction

 

Questions

10.1) Déterminer la clé candidate.

On a NumProjet → NomProjet et NumEmploye → NomEmploye, CodeService puis CodeService → NomService

Mais Fonction dépend de (NumProjet, NumEmploye) Donc la clé est :

(NumProjet, NumEmploye)

 

10.2) La relation est-elle en 1FN ?

On suppose que tous les attributs contiennent des valeurs atomiques.

✅ La relation est en 1FN.

 

10.3) Est-elle en 2FN ?

La clé est composée: (NumProjet, NumEmploye) mais NumProjet → NomProjet

NomProjet dépend uniquement de NumProjet.

Et:

NumEmploye → NomEmploye
NumEmploye → CodeService

Ces attributs dépendent uniquement de NumEmploye.

❌ La relation n’est donc pas en 2FN.

 

10.4) Est-elle en 3FN ?

Il existe également:

NumEmploye → CodeService
CodeService → NomService

Donc :

NumEmploye → CodeService → NomService

Il y a une dépendance transitive.

❌ La relation n’est donc pas en 3FN.

 

10.5) Décomposer la relation en 3FN.

PROJET(
NumProjet,
NomProjet
)

Clé primaire: NumProjet

 
EMPLOYE(
NumEmploye,
NomEmploye,
CodeService
)

Clé primaire: NumEmploye

 
SERVICE(
CodeService,
NomService
)

Clé primaire: CodeService

 
PARTICIPATION(
NumProjet,
NumEmploye,
Fonction
)

Clé primaire: (NumProjet, NumEmploye)

 

 

 

 

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *