Add functionnal dependencies course

This commit is contained in:
Yorick Barbanneau 2022-02-18 01:35:27 +01:00
parent f069304b46
commit 2ac622ccea
2 changed files with 566 additions and 0 deletions

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 22 KiB

View file

@ -0,0 +1,302 @@
---
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 dEuclide.
Laxiome 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.