cours/content/bdd_avancees/5-formes_normales/index.md

6.1 KiB

title date tags categories mathjax
Base de données avancées : Les formes normales 2022-01-18
schema
relation
Base de données avancées
Cours
true

Les formes normales représentent différentes formes de normalisation de la relation universelle afin d'obtenir un schéma de base de données sans redondance, perte de donnée, perte de dépendance fonctionnelle et anomalies de mise à jour. On en dénombre 7 mais nous n'en verrons que 3 (plus celle de FNBC), les autres ayant surtout un interet théorique.

La première forme normale (1FN)

Une relation est en première forme normale si chaque domaine de ses attributs est constitué de valeurs atomique : ne pouvant être décomposé. Attention, une coordonnée GPS, même si elle est composée de deux nombres flottant est considére comme atomique car elle supprime l'un des deux conduirait à la perte du sens initial.

Les tableaux, les listes violent la première forme normale car composés de valeurs sémantiquement indépendante.

La seconde forme normale (2FN)

Une relation en seconde forme normale est forcément en première forme normale.

Une relation en 2FN ne supporte pas les dépendance de clé partielle. Pour être plus simple, un attribut ne peut dépendre une partie de la clé. Dans ce cas il est opportun de décomposer la relation

exemple

  1. prenons la relation \(R(\underline{A,B},C,D)\) avec \(B \to D\)
  2. nous pouvons la décomposer en \(R'(\underline{A,B},C)\) et \(R''(\underline{B},D)\)

La troisième forme normale (3FN)

Une relation en troisième forme normale est forcement en seconde forme normale.

Chaque attribut non clé est pleinement et directement dependant des clé. tout attribut n'appartenant pas à une clé ne depend pas d'un attribut non clé.

Prenons l'exemple de la relations suivante:

\( R(\underline{A,B},C,D)\) avec \( C \to D\). Cette relation n'est pas en 3FN, pour cela nous allons la décomposer en deux relations :

\(R^{'}(\underline{A,B},C) \\ R^{''}(\underline{C},D)\)

La forme normale de Boyce-Codd

Un schéma est en FNBC si et seulement si il est en 3FN et si aucun attribut ne dépend transitivement d'une clé. Pour faire plus simple, la partie gauche d'une dépendance fonctionnelle est forcément une clé (être une super clé).

Prenons un exemple concret avec la relation suivante: \(\text{adresse}(\text{ville}, \text{CP}, \text{rue})\). on observe les dépendances suivantes:

\(\begin{array}{l} \text{ville},\text{rue} \to \text{CP} \\ \text{CP} \to \text{ville} \end{array}\)

Cette relation n'est pas en FNBC car \(\text{CP} \to \text{Ville}\) et \(\text(CP)\) n'est pas une clé et \(ville\) depend transitivement de la clé.

Décomposition en 3FN et FNBC

À partie d'une relation\(r\), l'objectif de ces décompositions est l'obtention d'un schéma de base de données minimisant le nombre de schéma de relations \(r_{i}\ dans perte (dependances fonctinnelles et données) et maximisant leurs formes normales.

À partir des relations \(r_{i}\) nous devons pouvoir reconstituer \(r\) (via des jointures).

Notons qu'il est toujours possible de décomposer en #FM sans perte de données et de dépendances fonctinnelle. Il est cependant toujours possible de décomposer en FNBC sans perte de données (mais avec parfois perte de dependances fonctionnelles).

Décomposition sans perte

La décomposition d'une relation \(R<\text{U},F>\) en un ensemble de schema de relation \({R_{1}, R_{2},...R_{n}}\) obtenus par projection et dites sans pertes si et seulement si quelque soit la réalisation cd \(r\) de \(R\):

  • la jointure naturelle de \(r_{i}\) donne exactement \(r\).
  • pas de perte de dependances : \((F_{1} \cup F_{2}, ... \cup F_{n})^{+} = F^{+}\)

Théorème de Heath

Soit une relation \(R(X,Y,Z)\) avec la dépendance fonctionnelle vérifiée \(X \to Y\). \(R\) peut être décomposée en \(R_{1}(X,Y)\) et \(R_{2})(X,Z)\).\(R\) est égal à la jointure de ses projections sur \(R_{1}\) et \(R_{2}\).

Théorème de Rissanen

Soit une relation \(R(X,Y,Z)\) avec les dépendances fonctionnelle vérifiées \(X \to Y\) et \(Y \to Y\).\(R\) peut alors être décomposée en \(R_{1}(X,Y)\) et \(R_{2}(Y,Z)\).

Théorème (mais sans nom celui-là)

Soit un schéma de base de données \(S = (S^{'}, S^{''}\) et \(F\) l'ensemble de dépendances fonctionnelles associé. \(S\) est sans pertes par rapport à \(F\) si et seulement si \((R^{'} \cap R^{''}) \to (R^{'} - R^{''})
\in F^{+}\)

Décomposition en FNBC

La décomposition en forme normale de Boyce-Codd s'obtient par décomposition successive sans garantie de conversation de toutes les dépendances fonctionnelles.

exemple

Soit \(R(C, P, H, S, E, N )\) avec

  • C : Cours
  • P : Professeur
  • H : Heure
  • S : Salle
  • E : Etudiant
  • N : Niveau

Avec une seule clé : \((H, E, C)\) et les dependances fonctionnelles suivantes:

\( F= \left \{ \begin{array}{l} C \to P \\ CE \to N \\ HS \to C \\ HE \to S \\ HP \to S \ \end{array} \right \} \)

  1. Considérons \(CE \to N \implies R_{1}(C,E,N\) qui est en FNBC et \(R_{2}(C,P,H,S,E)\) qui ne l'est pas.
  2. Dans \(R_{2}\) on a \(C \to P\ \implies R_{3}(C,P)\) en FNBC et \(R_{4}(C,H,S,E)\) qui le l'est pas.
  3. Dans \(R_{4}\) on a \(HC \to S \implies R_{5}(H,C,S) \text{ et } R_{6}(C,H,E)\) toutes les deux en FNBC.

Résultat : \(R_{1}, R_{3}, R_{5} \text{ et } R_{6}\) représente les relations en FNBC mais nous avons perdu la dependances fonctionnelles \(HP \to S\).

Décomposition en 3FN

À partir de l'ensemble des dépendances fonctionnelles fournies et en utilisant leurs propriétés, on peut directement obtenir une décomposition sans perte

Principe

  1. Calculer la couverture minimale
  2. Condenser les dépendances fonctionnelles ayant la même partie gauche. Chaque relation obtenue est alors en 3FN
  3. Détecter les équivalences entre dependances fonctionnelles (regroupement des relations) et vérifier que la clé \(R\) est présente dans un des schemas de relation obtenu.