Add functionnal dependencies course
This commit is contained in:
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 |
302
content/bdd_avancees/4-dependances_fonctionnelles/index.md
Normal file
302
content/bdd_avancees/4-dependances_fonctionnelles/index.md
Normal 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 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 \\) :
|
||||
|
||||

|
||||
|
||||
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.
|
Loading…
Add table
Add a link
Reference in a new issue