---
title: "Base de données avancées : contraintes d'intégrité: les dépendances
fonctionnelles"
date: 2022-01-17
tags: ["schema", "algèbre relationnelle", "relation"]
categories: ["Base de données avancées", "Cours"]
mathjax: true
---

Une dépendance fonctionnelle entre deux ensemble d'attributs A et B indique une
implication vérifié universellement : à une valeur de A correspond toujours une
même valeur de B. Elle est notée \\(A \to B\\), A est parfois appelé **la
source** et B **Le but**.

Soit \\(R(a,b,c\\), l'attribut \\(b\\) est dit *fonctionnellement dépendant* de
\\(a\\) si pour deux *n_uplets* \\(<a_1, b_1, c_1>\\) et \\(<a_2, b_2, c_2>\\)
alors \\( a_1 = a_2 \implies b_1 = b_2 \\).

Il est important de préciser que'une dependance fonctionnelle est **une
assertion sur les valeurs possible** (domaine des attributs) et **non sur les
valeurs actuelles** (extentipon courante de la relation). Elle caractérise une
intention  et non pas une extention d'une relation :invariante au cours du
temps.

Elle doit être définie à partir d'un schema de relation. Par défaut elle sont
définie sur la relation univerelle.

## Utilité des dépendances fonctionnelles

Elles permettent:

 * de vérifier que les extentions \\(r\\) du'un schema \\(R\\) sont conforme 
     au réel perçu.
 * Modéliser les contraintes que devront vérifier toutes les relations d'un
     schema.

Les dépendances fonctionnelles sont des outils permettant de génerer de bon
schemas fonctionnels et valides de façon automatique.

## Propriété des dépendances fonctionnelles.

Les propriétés des dependances fonctionnelles sont régies par les règles
d'inférences définie par Armstrong en 1974. Il y en a 3 [axiomes][^n_axiome] :
la réflexivité, l'augmentation et la transitivité.

[^n_axiome]: En mathématiques,a le mot axiome désignait une proposition qui est
  évidente en soi dans la tradition mathématique des Éléments d’Euclide.
  L’axiome est utilisé désormais, en logique mathématique, pour désigner une
  vérité première, à l'intérieur d'une théorie. source 
  [Wkipedia](https://fr.wikipedia.org/wiki/Axiome#Math%C3%A9matiques)


### La réflexivité.

Tout groupe d'attributs se détermine lui même et détermine chacun de ses
attributs.

\\( \text{si } Y \subseteq X \text{ alors } X \to Y \\)

### L'augmentation

Si un attribut X détermine un attribut Y, alors tout groupe composé de X enrichi
avec d'autres attributs détermine un groupe composé de Y et enrichi des mêmes
autres attributs.

\\( \text{Si } X \to Y \text{ et } Y \subset X \text{ alors  } XZ \to XY \\)

### La transitivité

Si un attribut X détermine un attribut Y et que cet attribut Y détermine un
autre attribut Z, alors X détermine Z.

\\( X \to Y \text{ et } Y \to Z \implies X \to Z \\)

### Les règles déduites des trois principales

#### La pseudo-transitivité

 1. Augmentation
 2. Transitivité

\\( \text{Si } X \to Y \text{ et } WY \to Z \text{ alors } WX \to Z \\)

#### L'union (ou la composition)

\\( \text{si } X \to Y \text{ et } WY \to Z \text{ alors } WX \to Z \\)

#### La décomposition

 1. Réflexivité
 2. Transitivité

\\( \text{si } X \to Y \text{ et } Z \subset Y \text{ alors } X \to Z \\)

## Les formes des dépendances fonctionnelles

### Dépendance fontionnelle triviale

C'est une simple dependance fonctionnelle obtenue par transitivité/

### dépendance fonctionnelle simple / composée.

Une dependance fonctionnelle qui ne comporte qu'un seul attribut en partie
droite.

### Dépendance fonctionnelle directe

Dépendance fonctionnelle non obtenue par transitivité

### Dépendance fonctionnelle directe

Dependance fonctionnelle qui ne peux être décomposée (simple en partie gauche,
sans attribut(s) superflu(s)).

## Fermeture transitive d'un ensemble de dependances fonctionnelles

La fermeture transitive d'un ensemble \\(F\\) représente le plus grand ensemble
stationnaire \\(F^+\\) de dépendances fonctionnelles valides. Il est obtenu en
appliquant les propriété des dépendances fonctionnelles (axiomes d'Armstrong).

Cette fermeture est unique et ne depend pas de l'ordre d'utilisation de ses
propriétés.

Deux ensembles de dependances fonctionnelles sont équivalent si et seulement si
ils ont la même fermeture transitive :

\\( F_1^+ \equiv F_2^+ \iff F_1^+ = F_2^+ \\)

## Fermeture transitive d'un ensemble d'attributs

La fermeture transitive d'un ensemble d'attributs X par rapport à un ensemble de
dépendances fonctionnelles F est l'ensemble des attributs qui peuvent être
inférés à partir de X en utilisant les DF contenues dans F.

Prenons l'exemple de la relation \\( R \\) avec les dépendances fonctionnelle 
suivantes: \\( N \to T, T \to M, T \to P, N \to C \\) :

![Schéma des dépendances fonctionnelles de N](./images/fermeture_transitive.svg)

 1. \\( N_{0}^{+} = \{ N \} \\)
 2. \\( N_{1}^{+} = \{ N, T, C \} \\) obtenu par réfexivité
 3. \\( N_{2}^{+} = \{ N, T, C, M, P \} \\)
 4. \\( N_{3}^{+} = \{ N, T, C, M, P \} \\)

Comme \\( N_{2}^{+} = N_{3}^{+} \\) alors la condition d'arrêt est \\(N_{3}\\).

## couverture minimale

La couverture minimale représente un sous-ensemble \\( F_{min} \\) minimum --
sans redondance -- de dépendance fonctionnelles qui permet de générer toutes des
dépendances fonctionnelles de \\(F^{+}\\) :

\\( F^{+}(F_{min}) \\)

\\( \neg \exists F^{'} / F^{'} 	\subset  F_{min} \text{ et } F^{+}(F^{'}) =
F^{+}(F_{min}) \\)

Contrairement à \\(F^{+}\\), la couverture minimale n'est pas unique. C'est un
ensemble essentiels pour effectuer des décompositions sans perte et ainsi
générer de bon modèles de base de donnees.

L'algorithme pour arriver à la couverture minimale se décompose en 3 étapes.
L'ordre est à respecter :

 1. Décomposer les dépendances fonctionnelles : un sel attribut en partie
    droite.
 2. Rendre les dépendances fonctionnelles élémentaires : membre gauche non 
    décomposable
 3. Supprimer les dépendances fonctionnelles redondantes, celles qui sont
    obtenues par transitivité.

### un exemple

Soit la relation

\\( F \left \\{ \begin{array}{c}
A \to BC\\\
AB \to C\\\
ABC \to D\\\
C \to D\\\
D \to E\\\
E \\to F\\\
DEF \to G
\end{array}
\right \\} \\)

Dans un premier temps nous décomposons les relations afin de rendre les
relations élémentaires (un seul élement dans la partie droite)

\\( F_{1} \left \\{ \begin{array}{c}
A \to B \\\
A \to C\\\
AB \to C \\\
ABC \to D\\\
C \to D\\\
D \to E\\\
E \\to F\\\
DEF \to G
\end{array}
\right \\}
\begin{array}{l}
\\\
\\\
\to \text{ élémentaire? non! augmentation de B sur } A \to C \textbf{: DF inutile}\\\
\to \text{ idem: augentation de AB sur } C \to D \textbf{: DF inutile}\\\
\\\
\\\
\\\
\\\
\end{array}
\\)

nous obtenons alors notre relation \\(F_{2}\\) :

\\( F_{2} \left \\{ \begin{array}{c}
A \to B \\\
A \to C\\\
C \to D\\\
D \to E\\\
E \\to F\\\
DEF \to G
\end{array}
\right \\}
\begin{array}{l}
\\\
\\\
\\\
\\\
\\\
\to \text{ pseudo transitivite car on a } D \to E \text{ et } E \to F \\\
\end{array}
\\)

Devellopons le raisonnement autour de \\( DEF \to G \\). \\(D\\) est-il superfu?
En clair y a t-il toujours un chemin pour aller de \\(EF\\) vers \\(G\\). En
calcul relationnel, \\(G\\) appartient-il à la fermeture transitive de \\(EF\\)
En clair il y a toujours un chemin pour aller de \\(EF\\) vers \\(G\\) : \\( G
\in \\{EF\\}_{F2}^{+} \\)?.

 1. \\( \\{EF\\}_{F2}^{+} = \\{E,F\\} \\) 
 2. donc \\( G \notin \\{EF\\}_{F2}^{+} \\).
 3. En clair \\(D\\) **n'est pas superflu**.

Répétons ce raisonnement pout \\(E\\) :

 1. \\( \\{DF\\}_{F2}^{+} = \\{D,F,E,G\\} \\) 
 2. donc \\( G \in \\{DF\\}_{F2}^{+} \\) 
 3. alors \\(E\\) **est superflu** donc on passe de \\(F_{2}\\) à \\(F_{3}\\)

La méthode est donc la suivante : j'enlève un attribut en partie gauche de ma
dependance foncionnelle et je vois s'il est toujours possible d'attendre la
partie droite en parcourant le graphe des dépendances.

On repête l'opération pour \\(F\\):

 1. \\( \\{D\\}_{F3}^{+} = \\{D,E,F,G\\} \\)
 2. donc \\( G \in \\{F\\}_{F3}^{+} \\)
 3. alors \\(G\\) **est superflu** donc on passe de \\(F_{3}\\) et \\(F_{4}\\)


\\( F_{4} \left \\{ \begin{array}{c}
A \to B \\\
A \to C\\\
C \to D\\\
D \to E\\\
E \\to F\\\
D \to G
\end{array}
\right \\}
\\)

**Toutes les dépendances fonctionnelles son maintenant élementaires, elles ont
un nombre minimum d'attriuts en partie gauche**. Il nous reste maintenant un
dernier point : avons nous des dépendances obtenues par transitivité. Ici il n'y
a ici aucune dépendance fonctionnelle obtenue de la sorte : aucun attribut
apparaît deux fois en partie gauche (un seul chemin pour aller vers chacun des
attributs.

Pour vérifier la transitivité, nous pouvons uassi utiliser une méthode
ensembliste. Vérifions pour la dépendance \\( A \to C \\). nous devons vétifier 
si \\( C \in \\{A\\}_{F4 - A \to C}^{+} \\) en clair est-ce que \\(C\\) 
appartient à \\(A\\) privé de sa relation  \\( A \to C \\)

 1. \\( \\{A\\}_{F4 - A \to C}^{+} = \\{A,B\\} \\)
 2. donc \\( C \notin \\{A\\}_{F4 - A \to C}^{+} \\)
 3. alors \\( A \to C \\) n'est pas redondante

Il nous suffit de recommencer l'opération pour l'ensemble de dépendances de
notre relation.

La conclusion : \\(F_{4}\\) représente **la couverture minimale** de notre
relation.

## Retour sur la notion de clé

Un sous ensemble \\(X\\) d'un schéma \\(R<U,F>\\) (\\(U\\) étant l'ensemble
attributs et \\(F\\) une couverture minimale) est une clé si et seulement si :

 1. \\( \\{X \to U\\} \in F^{+} \\)
 2. \\( \neg \exists X' \subset X / \\{ X' \to U \\} \in F^{+} \\) : minimalité
    de la clé
 3. \\( X_{F}^{+} = U \\)

Exemple:

\\(R(\underline{A,B},C,D,E,F,G)\\) alors \\(AB \to CDEFG\\) et chaque dépendance
fonctionnelle simple est élémentaire. Une clé candidate est un minimum
d'attributs qui détermine tous les autres.


\\( F_{4} \left \\{ \begin{array}{c}
A \to BC \\\
C \to D\\\
D \to EG\\\
E \\to F\\\
\end{array}
\right \\}
\\)

\\(A_{4}^{+} \\{ABCDEFG\\}\\) donc \\(A\\) est une clé candidate de la relation 
R.
