Normalisation II : Décomposition FN3

Pertes de Dépendances Fonctionnelles. Décomposition FN3

2024-11-29

Décompositions : rappels

Définition

Soit \(\mathcal{A}\) un schéma de relation

Un décomposition de \(\mathcal{A}\) est un ensemble \(\{\mathcal{A}_1,..., \mathcal{A}_k\}\) de sous-ensembles de \(\mathcal{A}\) tel que

\[\mathcal{A}_i\not=\emptyset, 1\le i\le k, \quad \text{ et } \quad \mathcal{A} = \bigcup_{i=1}^k \mathcal{A}_i\]

Définition

Soit \(\mathcal{A}\) un schéma de relation et \(\Sigma\) un ensemble de DF sur \(\mathcal{A}\).

Une décomposition \(\{\mathcal{A}_1,..., \mathcal{A}_k\}\) est sans perte d’information par rapport à \(\Sigma\) si pour toute relation \(R\) de schéma \(\mathcal{A}\) satisfaisant \(\Sigma\) on a

\[R= \pi_{\mathcal{A}_1}(R) \bowtie \pi_{\mathcal{A}_2}(R) \bowtie...\bowtie\pi_{\mathcal{A}_k}(R)\]

Résultat de la séance précédente

Important

On peut décomposer une relation \(\mathcal{A}\) relativement à un ensemble de DF \(\Sigma\) de façon à obtenir une décomposition :

  • dont tous les membres sont en FNBC relativement à \(\Sigma\)

  • SPI

Ce résultat ne fournit pas toujours une solution complètement satisfaisante

Projection d’un ensemble de dépendances fonctionnelles

Projection d’un ensemble de DF

Soientt \(\mathcal{A}\) un schéma de relation (\(\mathcal{A}\) est un ensemble d’attributs) et \(\Sigma\) un ensemble de DF sur \(\mathcal{A}\)

Soit \(\mathcal{A}_1\subset \mathcal{A}\) un sous-ensemble d’attributs

Définition

\[\pi_{\mathcal{A}_1}(\Sigma)=\left\{ X\to Y \mid \Sigma\models X\to Y \text{ et } X,Y\subset \mathcal{A}_1\right\}\]

Caractérisation

Si \(X\subset {\mathcal{A}}_1\) on a l’équivalence \[X\to Y \in \pi_{{\mathcal{A}}_1}(\Sigma) \iff Y\subset\left\{X\right\}^+∩{\mathcal{A}}_1\]

Exemple

  • \({\mathcal{A}}=\left\{A,B,C\right\}\) et \(\Sigma=\left\{A\to B, B\to C, C\to A\right\}\)

  • \(\pi^{}_{\left\{A,B\right\}}(\Sigma)\) est équivalent à \(\left\{A\to B, B\to A\right\}\)

Calcul de \(\pi_{{\mathcal{A}}_1}(\Sigma)\)

On calcule un ensemble de DF équivalent à \(\pi_{\mathcal{A}_1}(\Sigma)\)

\begin{algorithm} \caption{Projection de DF} \begin{algorithmic} \Procedure{Projection}{$\mathcal{A}_1, Σ$} \State P ← ∅ \For{$X ⊂ \mathcal{A}_1$, $X ≠ ∅$, $X ≠ \mathcal{A}_1$} \State Y ← $X^+ ∩ \mathcal{A}_1$ \State P ← P ∪ $\{ X → Y\}$ \EndFor \Return P \EndProcedure \end{algorithmic} \end{algorithm}

Exemple

  • \({\mathcal{A}}=\left\{A,B,C,D,E\right\}\) et \(\Sigma=\left\{A\to C, BC\to D, AD\to E\right\}\)
  • \(\pi_{AC}(\Sigma)\) est équivalent à \(\left\{A\to C\right\}\) car
    \(\left\{A\right\}^+=\left\{A,C\right\}\) et \(\left\{C\right\}^+=\left\{C\right\}\)
  • \(\pi_{ABD}(\Sigma)\) est équivalent à \(\left\{AB\to D\right\}\) car
    \(\left\{A\right\}^+=\left\{A,C\right\}\), \(\left\{B\right\}^+=\left\{D\right\}\), \(\left\{D\right\}^+=\left\{D\right\}\),
    \(\left\{A,B\right\}^+=\left\{A,B,C,D,E\right\}\), \(\left\{A,D\right\}^+=\left\{A,D,C,E\right\}\), \(\left\{B,D\right\}^+=\left\{B,D\right\}\)
  • \(\pi_{ABCE}(\Sigma)\) est équivalent à \(\left\{A\to C, AB \to CE, AE\to C, ABC\to E, ABE\to C\right\}\)
    \(A^+=AC \quad B^+=B \quad C^+=C \quad E^+=E\)
    \(AB^+=ABCDE \quad AC^+=AC \quad AE^+=AEC\)
    \(BC^+=BCD \quad BE^+=BE \quad CE^+=CE\)
    \(ABC^+=ABCDE \quad ABE^+=ABECD\)
    \(BCE^+=BCED \quad ACE^+=ACE\)
  • Simplification : \(\pi_{ABCE}(\Sigma)\) équivaut à \(\left\{A\to C, AB\to E\right\}\)

Perte de dépendances fonctionnelles

Préservation de dépendances fonctionnelles

Définition

Soit \(\mathcal{A}\) un schéma de relation et \(\Sigma\) un ensemble de DF sur \(\mathcal{A}\).

Soit \(\left\{ \mathcal{A}_1,\dots, \mathcal{A}_k\right\}\) une décomposition du schéma \(\mathcal{A}\) (\(\mathcal{A}_i\neq \emptyset, 1\leq i\leq k\) et \(\mathcal{A}= \bigcup_{i=1}^k \mathcal{A}_i\))

La décomposition \(\left\{\mathcal{A}_1,\dots, \mathcal{A}_k\right\}\) préserve \(\Sigma\) si l’ensemble des dépendances fonctionnelles locales \(\bigcup_{i=1}^k \pi_{\mathcal{A}_i}(\Sigma)\) est équivalent à \(\Sigma\)

Détection de perte de DF

Algorithme pour tester si \(\bigcup_{i=1}^k \pi_{\mathcal{A}_i}(\Sigma) \models X \rightarrow Y\)

\begin{algorithm} \caption{X → Y est-elle impliquée par les dépendances projetées?} \begin{algorithmic} \Procedure{Implique}{$\left\{ \mathcal{A}_1,\dots, \mathcal{A}_k\right\}, Σ, X, Y$} \State Z ← X \State continuer ← \True \While{continuer} \State $W ← Z$ \For{i ∈ 1, ..., k} \State $W ← W ∪ \bigl((W ∩ \mathcal{A}_i)^+ ∩ \mathcal{A}_i\bigr)$ \EndFor \If{W ≠ Z} \State Z ← W \Else \State continuer ← \False \EndIf \EndWhile \If{Y ⊆ Z} \Return \True \Else \Return \False \EndIf \EndProcedure \end{algorithmic} \end{algorithm}

Exemple I

  • \(\mathcal{A}=\left\{A,B,C,D\right\}\),

  • \(\mathcal{A}_1=\left\{A,B\right\}\), \(\mathcal{A}_2=\left\{B,C\right\}\), \(\mathcal{A}_3=\left\{C,D\right\}\)

  • \(\Sigma=\left\{A\to B, B\to C, C\to D, D\to A\right\}\)

  • Est-ce que la décomposition \(\left\{\mathcal{A}_1,\mathcal{A}_2,\mathcal{A}_3\right\}\) préserve \(\Sigma\) ?

  • Les DF locales impliquent \(A\to B\), \(B\to C\), \(C\to D\) (ce sont DF locales)
  • Est-ce que les DF locales impliquent \(D\to A\) ?

Commencer avec \(Z ← \{D\}\)

  1. \((\{D\}∩\{CD\})^+ ∩ \{CD\}=\{D\}^+ ∩\{CD\}=\{DABC\} ∩ \{CD\}=\{CD\}\), ajouter \(C\)

  2. \((\{DC\}∩ \{BC\})^+ ∩ \{BC\}=\{C\}^+ ∩ \{BC\}=\{CDAB\}∩ \{BC=B\}\), ajouter \(B\)

  3. \((\{DCB\}∩ \{AB\})^+ ∩ \{AB\}=\{B\}^+ ∩ \{AB\}=\{BCDA\} ∩ \{AB\}\), ajouter \(A\)

  4. \(\{DCBA\}\) contient \(A\) donc \(D\to A\) est préservée

Exemple II

  • \(\mathcal{A}=\) {Ville, CP, Rue, Numero}

  • \(\Sigma=\) { CP → Ville, {Ville, Rue, Numero} → CP}

  • \(\mathcal{A}_1=\) {Ville, CP} \(\mathcal{A}_2=\) {Rue, Numero, CP}

  • Est-ce que la décomposition \(\{\mathcal{A}_1, \mathcal{A}_2 \}\) préserve \(\Sigma\) ?

  • CP → Ville est préservée car elle est locale à \(\mathcal{A}_1\)
  • Est-ce que {Ville, Rue, Numero} → CP est préservée par \(\mathcal{A}_1, \mathcal{A}_2\) ?

Z ← {Ville, Rue, Numero}

  1. \((\texttt{Z} ∩ \texttt{{Ville, CP}})^+\){Ville, CP} = {Ville} rien à ajouter

  2. \((\texttt{Z} ∩ \texttt{{Rue, Numero, CP}})^+\){Rue, Numero, CP} = {Rue, Numero}, rien à ajouter

Donc Ville, Rue, Numero → CP n’est pas préservée

Décomposition FNBC et pertes de DF

Rappels séance précédente (bis)

Définition

Un schéma \(\mathcal{A}\) est en FNBC par rapport à un ensemble de dépendances fonctionnelles \(\Sigma\) sur \(\mathcal{A}\)

si

pour toute DF \(X\rightarrow Y\) impliquée par \(\Sigma\) avec \(Y\not\subset X\), \(X\) est une super-clef

Algorithme

\begin{algorithm} \caption{Décomposition FNBC} \begin{algorithmic} \Procedure{DecompositionFNBC}{$\mathcal{A}, Σ$} \State \Comment{Initialisation de la décomposition} \State $D ← \{\mathcal{A}\}$ \State \While{Exists some $\mathcal{B} \in D$ which is not in BCNF w.r.t. $\Sigma \models X → X^+ \cap \mathcal{B}$, $X \subsetneq \mathcal{B}$} \State $Y \leftarrow X^+ \cap \mathcal{B} \setminus X$ \State $D \leftarrow D \setminus \{\mathcal{B}\} \cup \{ X \cup Y, \mathcal{B} \setminus Y \}$ \EndWhile \State \Return $D$ \EndProcedure \end{algorithmic} \end{algorithm}

Proposition

  • L’algorithme termine

  • Les éléments de la décomposition finale sont en FNBC

  • La décomposition est Sans Perte d’Information (SPI)

Limites de la décomposition FNBC

Note

Il existe des couples schéma/Ensemble de DFs (\(\mathcal{A}, \Sigma\)) pour lesquels toute décomposition FNBC entraine une perte de dépendances fonctionnelles

\(\mathcal{A} =\) {Ville, Rue, Numéro, #Bureau_vote}

Σ = { Ville, Nom, Rue → #Bureau_vote, #Bureau_vote → Ville }

Deux clés Ville, Nom, Rue et #Bureau_vote, Nom, Rue

#Bureau_vote → Ville ne satisfait pas le critère FNBC

L’algorithme de décomposition en FNBC conduit à la décomposition {#Bureau_vote,Ville} et {#Bureau_vote, Nom, Rue}

La DF Ville, Nom, Rue → #Bureau_vote n’est pas préservée

La décomposition préserve l’information (SPI) mais pas les dépendances fonctionnelles.

Limites de la décomposition FNBC (suite)

À noter

On peut vérifier qu’aucune décomposition FNBC de \(\mathcal{A}\) ne préserve toutes les dépendances fonctionnelles.

Un nouvel objectif

Construire

Une décomposition :

  • Sans Perte d’Information (SPI)
  • Sans perte de Dépendances Fonctionnelles
  • Dont les éléments sont en FN3 par rapports aux dépendances projetées

Pour réaliser cet objectif

Une étape cruciale : réécrire l’ensemble de DFs

Couverture irredondante d’un ensemble de DF

Définition de la couverture irredondante d’un ensemble de DFs

Soit \(\Sigma\) un ensemble de DF, une couverture minimale/irredondante de \(\Sigma\) est un ensemble \(\Sigma'\) de DF qui vérifie :

  • Chaque DF de \(\Sigma'\) est de la forme \(X → A\), où \(A\) est un attribut

  • \(\Sigma'\) et \(\Sigma\) sont équivalents (\(\Sigma \models \Sigma'\) et \(\Sigma' \models \Sigma\))

  • Aucun sous-ensemble propre de \(\Sigma'\) n’implique \(\Sigma\) (\(∀ \Sigma^{\prime\prime} ⊊ \Sigma^\prime, \Sigma^{\prime\prime} \not\models \Sigma\))

  • Pour toute dépendance \(X → A\) de \(\Sigma'\), \(\forall Y ⊊ X, \Sigma \not\models Y→ A\)

Dans une couverture irredondante, toutes des DFs sont utiles, chaque DF est minimale (c’est vrai pour le membre droit comme pour le membre gauche)

  • Existence de couvertures irredondantes

  • Unicité

  • Construction de couvertures irredondantes

  • Si pas unicité des couvertures irredondantes, les couvertures irredondantes sont-elles toutes également intéressantes ?

Algorithme de construction de couverture irredondante

\begin{algorithm} \caption{Couverture irredondante} \begin{algorithmic} \Procedure{MinCover}{$Σ$} \State Σ' ← ∅ \State \Comment{Normaliser les éléments de Σ} \For{$(X → Y) ∈ Σ$} \For{$y ∈ Y$} \State Σ' ← Σ' ∪ {X → y} \EndFor \EndFor \State \Comment{Éliminer les dépendances redondantes dans Σ'} \State \Comment{Miniser les dépendances dans Σ'} \Return Σ' \EndProcedure \end{algorithmic} \end{algorithm}

Détails

\begin{algorithm} \caption{Éliminer les dépendances redondantes dans Σ' (détail)} \begin{algorithmic} \Repeat \State s ← \True \For{$(X → y) ∈ Σ'$} \If{$Σ' \setminus {X → y} ⊧ X → y$} \State $Σ' ← Σ' \setminus {X → y}$ \State s ← \False \EndIf \EndFor \Until{s} \end{algorithmic} \end{algorithm}
\begin{algorithm} \caption{Miniser les dépendances dans Σ' (détail)} \begin{algorithmic} \Repeat \State s ← \True \For{$(X → y) ∈ Σ'$} \For{$x ∈ X$} \If{$Σ' \setminus {X → y} ⊧ X \setminus {x} → y$} \State $Σ' ← (Σ' \setminus {X → y}) ∪ X \setminus {x} → y$ \State s ← \False \Break \EndIf \EndFor \EndFor \Until{s} \end{algorithmic} \end{algorithm}

Forme Normale 3 (FN3)

Définition : forme normale 3 (FN3)

Important

Un schéma relationnel \(\mathcal{A}\) est en forme normale 3 (FN3) relativement à un ensemble de DF Σ ssi pour toute dépendance non triviale X → Yde Σ, on a

  • le membre gauche X est une super-clé ou
  • le membre droit Y fait partie d’une clé

Pourquoi deux notions de forme normale ?

Proposition

Si un schéma \(\mathcal{A}\) est en forme normale Boyce-Codd (FNBC) relativement à un ensemble de DF Σ, alors \(\mathcal{A}\) est en forme normale 3 (FN3) relativement à Σ

Exercice

\(\mathcal{A}=\) (A, B, C, D, E) et Σ={A → C, BC → D, AD → E}

  • Quelles sont les clés ?
  • Le schéma est-il en FNBC ?
  • Si non, propopsez une décomposition SPI en FNBC. Est-elle sans perte de DF?
  • Le schéma est-il en FN3 ?

Intérêt de la forme normale 3 (FN3)

Redondance limitée

Possibilité de décomposition SPI et sans perte de Dépendances Fonctionnelles

Algorithme de Décomposition en FN3

Algorithme

\begin{algorithm} \caption{Decomposition FN3} \begin{algorithmic} \Procedure{DecompositionFN3}{$\mathcal{A}, Σ$} \State \Comment{Initialisation de la décomposition} \State $D ← ∅$ \State \Comment{Mise en forme des courverture minimale de Σ} \State Σ' ← \Call{MinCover}{$Σ$} \State \For{Each distinct determinant $X$ amongst FDs in Σ'} \State $Y ← \{y : X → y ∈ Σ'\}$ \State $D ← D \cup \{X \cup Y\}$ \Comment{ Ajouter $X \cup Y$ à $D$} \EndFor \State \State $\mathcal{B} ← $ Attributes in $\mathcal{A}$ that do not occur in $D$ \State $D ← D \cup \{\mathcal{B}\}$ \State \If{No component of $D$ includes a key for $\mathcal{A}, Σ$} \State $D ← D \cup $ some key for $\mathcal{A}, Σ$ \EndIf \State \Return $D$ \EndProcedure \end{algorithmic} \end{algorithm}

Proposition

L’algorithme termine en un nombre fini d’itérations

La décomposition produite par l’algorithme est

  • en FN3

  • sans perte d’information

  • sans perte de dépendances fonctionnelles

Preuves

Terminaison

FN3

SPI

SPDF

Fin

Pertes de Dépendances Fonctionnelles. Décomposition FN3