cours/content/bdd_avancees/4-dependances_fonctionnelles/index.md

9.9 KiB
Raw Blame History

title date tags categories mathjax
Base de données avancées : contraintes d'intégrité: les dépendances fonctionnelles 2022-01-17
schema
algèbre relationnelle
relation
Base de données avancées
Cours
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]1 : la réflexivité, l'augmentation et la transitivité.

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

  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.


  1. 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 ↩︎