Genie logiciel igl234
Thème :
Junior
1 vues ·12/19 leçons

Cours Détaillé : Formes Normales Avancées (BCNF, 4NF) et Contraintes d’intégrité

Introduction

Si les formes normales classiques (1NF, 2NF, 3NF) suffisent pour la majorité des applications, certaines situations complexes nécessitent des règles plus strictes pour éliminer toute redondance subtile. C’est là qu’interviennent la Forme Normale de Boyce-Codd (BCNF) et la Quatrième Forme Normale (4NF).


I. La Forme Normale de Boyce-Codd (BCNF)

La BCNF est une version plus stricte de la 3NF. On la considère souvent comme la “vraie” 3NF, car elle corrige une lacune de la 3NF concernant les clés candidates multiples qui se chevauchent.

A. Définition et Règle

Une table est en BCNF si et seulement si :

  1. Elle est en 3NF.
  2. Pour toute dépendance fonctionnelle X → Y, X doit être une super clé (c’est-à-dire qu’il permet d’identifier uniquely une ligne).

En termes simples : Il ne doit exister aucun attribut non-clé qui détermine un autre attribut. Même une partie d’une clé candidate ne doit pas déterminer un attribut non-clé.

B. Exemple Corrigé et Détaillé

Imaginons une université où :

  • Un étudiant peut suivre plusieurs cours.
  • Un cours peut être enseigné par plusieurs professeurs (mais un professeur n’enseigne qu’un seul cours).
  • Un étudiant n’a qu’un seul professeur par cours.

Table Initiale : Inscription

Etudiant Cours Professeur
Eva Maths Prof. Laravel
Eva Physique Prof. Devinsto
Owen Maths Prof. Inertia
Charlie Maths Prof. Laravel

Analyse des Dépendances Fonctionnelles (DF) :

  1. (Etudiant, Cours) -> Professeur : Un étudiant dans un cours a un unique professeur.
    • La clé candidate est (Etudiant, Cours). C’est une clé composée.
  2. Professeur -> Cours : Un professeur n’enseigne qu’une seule matière.
    • Ici, Professeur est un déterminant, mais ce n’est pas une super clé (car un professeur peut avoir plusieurs étudiants, il ne détermine pas une ligne unique).

Le Problème (Violation BCNF) : La table est en 3NF, mais pas en BCNF car nous avons une dépendance Professeur -> Cours où le déterminant (Professeur) n’est pas une clé. Cela crée de la redondance : On répète que “Prof. Laravel” enseigne les “Maths” à chaque fois qu’un nouvel étudiant s’inscrit chez lui.

Décomposition en BCNF : On sépare la dépendance problématique dans une nouvelle table.

Table 1 : Enseignement

Professeur Cours
Prof. Laravel Maths
Prof. Inertia Maths
Prof. Devinsto Physique

Table 2 : Inscription_Etudiant

Etudiant Professeur
Eva Prof. Laravel
Eva Prof. Devinsto
Owen Prof. Inertia
Charlie Prof. Laravel

Résultat : Plus de redondance sur le lien Professeur/Cours. Pour savoir quel cours suit Eva, on joint les deux tables.


II. La Quatrième Forme Normale (4NF)

La 4NF traite les problèmes que la BCNF ne peut pas résoudre : les Dépendances Multi-Values (DMV). Elle intervient lorsque une table contient deux attributs indépendants l’un de l’autre, mais dépendant tous deux d’une même clé.

A. Définition

Une table est en 4NF si :

  1. Elle est en BCNF.
  2. Elle ne contient pas de dépendance multi-valeur non triviale.

Qu’est-ce qu’une Dépendance Multi-Valeur (DMV) ? Cela se produit quand, pour une valeur de A, il existe un ensemble de valeurs B et un ensemble de valeurs C, mais B et C sont totalement indépendants l’un de l’autre. Notation : A ↠ B (A multi-détermine B).

B. Exemple Détaillé

Imaginons une table qui liste les compétences d’un employé et les langues qu’il parle. Un employé peut avoir plusieurs compétences et plusieurs langues, mais la compétence n’a rien à voir avec la langue parlée.

Table Initiale (Problématique) :

Employé Compétence Langue
Pierre PHP Français
Pierre PHP Anglais
Pierre Python Français
Pierre Python Anglais

Le Problème :

  • Pour Pierre, nous devons lister toutes les combinaisons possibles (Cartesian Product). Si Pierre apprend l’Espagnol, nous devons ajouter deux lignes (une pour PHP, une pour Python). C’est une explosion de données inutile.
  • Ici, Employé ↠ Compétence et Employé ↠ Langue. Compétence et Langue sont indépendants.

Décomposition en 4NF : On crée deux tables distinctes pour casser cette dépendance cartésienne.

Table A : Competences_Employe

Employé Compétence
Pierre PHP
Pierre Python

Table B : Langues_Employe

Employé Langue
Pierre Français
Pierre Anglais

Résultat : Si Pierre apprend l’Espagnol, on ajoute une seule ligne dans la Table B. La redondance est drastiquement réduite.


III. Les Contraintes d’Intégrité (Approfondissement)

Les contraintes d’intégrité sont les “garde-fous” de la base de données. Elles garantissent que les données restent exactes et cohérentes tout au long de leur vie.

A. Contraintes d’intégrité statiques (Structurelles)

Elles définissent l’état valide des données à un instant T.

  1. Intégrité d’entité (Clé Primaire) :
    • Règle : Aucun attribut de la clé primaire ne peut être NULL. La clé doit être unique.
    • But : Identifier chaque ligne de manière unique.
  2. Intégrité référentielle (Clé Étrangère) :
    • Règle : Une valeur de clé étrangère doit soit être NULL, soit correspondre à une valeur existante de la clé primaire référencée.
    • But : Assurer la cohérence entre tables (ex: impossible de créer une commande pour un client qui n’existe pas).
  3. Contrainte d’unicité (UNIQUE) :
    • Règle : Deux lignes ne peuvent avoir la même valeur pour cet attribut (ex: Email), mais peut accepter NULL (contrairement à la clé primaire).
  4. Contrainte de domaine (CHECK) :
    • Règle : Limite les valeurs possibles pour un attribut.
    • Exemple : CHECK (Age >= 18), CHECK (Status IN ('Actif', 'Inactif')).

B. Contraintes d’intégrité dynamiques (Comportementales)

Elles contrôlent les transitions d’un état à un autre lors des opérations.

  1. Déclencheurs (Triggers) :
    • Ce sont des procédures stockées qui s’exécutent automatiquement après un événement (INSERT, UPDATE, DELETE).
    • Exemple : Mettre à jour le Stock_Total automatiquement après l’ajout d’une ligne de commande.
  2. Règles métier complexes :
    • Validation logique impliquant plusieurs colonnes ou tables.
    • Exemple : Interdire la modification du Salaire d’un employé si son Poste est “Stagiaire”.

C. Contraintes transactionnelles (ACID)

Ces propriétés assurent la fiabilité des opérations globales.

  • Atomicité : “Tout ou Rien”. Si une transaction comporte 5 étapes et que l’étape 4 échoue, les 3 premières étapes sont annulées (Rollback).
  • Cohérence : La base de données passe d’un état valide à un autre état valide après chaque transaction.
  • Isolation : Les transactions concurrentes ne doivent pas s’interférer. L’utilisateur A ne doit pas voir les modifications non validées de l’utilisateur B.
  • Durabilité : Une fois la transaction validée (COMMIT), les données sont sauvegardées de façon permanente, même en cas de coupure de courant.

Prêt à passer à la suite ?

Vous avez terminé cette leçon sur Cours Détaillé : Formes Normales Avancées (BCNF, 4NF) et Contraintes d'intégrité. Continuez votre apprentissage avec la prochaine leçon ou explorez d'autres formations.