From 2ac622ccea236dfc310e650f345efc224bb4ecb5 Mon Sep 17 00:00:00 2001 From: Yorick Barbanneau Date: Fri, 18 Feb 2022 01:35:27 +0100 Subject: [PATCH] Add functionnal dependencies course --- .../images/fermeture_transitive.svg | 264 +++++++++++++++ .../4-dependances_fonctionnelles/index.md | 302 ++++++++++++++++++ 2 files changed, 566 insertions(+) create mode 100644 content/bdd_avancees/4-dependances_fonctionnelles/images/fermeture_transitive.svg create mode 100644 content/bdd_avancees/4-dependances_fonctionnelles/index.md diff --git a/content/bdd_avancees/4-dependances_fonctionnelles/images/fermeture_transitive.svg b/content/bdd_avancees/4-dependances_fonctionnelles/images/fermeture_transitive.svg new file mode 100644 index 0000000..add8943 --- /dev/null +++ b/content/bdd_avancees/4-dependances_fonctionnelles/images/fermeture_transitive.svg @@ -0,0 +1,264 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/content/bdd_avancees/4-dependances_fonctionnelles/index.md b/content/bdd_avancees/4-dependances_fonctionnelles/index.md new file mode 100644 index 0000000..46491f3 --- /dev/null +++ b/content/bdd_avancees/4-dependances_fonctionnelles/index.md @@ -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* \\(\\) et \\(\\) +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\\) é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.