--- 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. \\( 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.