Compare commits
2 commits
a61170161e
...
2ac622ccea
Author | SHA1 | Date | |
---|---|---|---|
2ac622ccea | |||
f069304b46 |
3 changed files with 617 additions and 2 deletions
|
@ -188,7 +188,7 @@ t[acteur] = "Jay" \land s[acteur] = "Silent Bob" ) \\} \\)
|
||||||
\\( \\{
|
\\( \\{
|
||||||
t | \exists s \in p(s[titre] = t[titre]
|
t | \exists s \in p(s[titre] = t[titre]
|
||||||
\land s[\text{nom_cinemas}] = "UCG"
|
\land s[\text{nom_cinemas}] = "UCG"
|
||||||
\land {\not} {\exists} u \in p( u[\text{nom_cinemas}] = "Megarama"
|
\land {\neg} {\exists} u \in p( u[\text{nom_cinemas}] = "Megarama"
|
||||||
\land u[titre] = t[titre]
|
\land u[titre] = t[titre]
|
||||||
\\} \\)
|
\\} \\)
|
||||||
|
|
||||||
|
@ -200,8 +200,57 @@ t | \exists \in p(\exists u \in f((s[\text{nom_cinemas}] = "UGC"
|
||||||
\land t[realisateur] = u[realisateur]
|
\land t[realisateur] = u[realisateur]
|
||||||
\\} \\)
|
\\} \\)
|
||||||
|
|
||||||
## Retour sur la notion de clé
|
### Retour sur la notion de clé
|
||||||
|
|
||||||
comme nous lavons abordé précédement, une clé est nécessaire pour identifier des
|
comme nous lavons abordé précédement, une clé est nécessaire pour identifier des
|
||||||
*n_uplets* de façon unique sans pour autant en donner toutes leurs valeurs et
|
*n_uplets* de façon unique sans pour autant en donner toutes leurs valeurs et
|
||||||
respecter leurs unicité.
|
respecter leurs unicité.
|
||||||
|
|
||||||
|
Plus formellement
|
||||||
|
|
||||||
|
* \\(X \text{ clé de } R(U) \textit{ avec } X \subseteq U \textit{ ssi } \forall
|
||||||
|
r:R(U) \\)
|
||||||
|
* \\(\forall t_1, t_2 \in r \\)
|
||||||
|
* \\(t_1\[X\] = t_2\[X\] \implies t_1 = t_2 \\)
|
||||||
|
* \\(\neg \exists Y \subset X \implies t_1[Y] = t_2[Y] \implies t_1 = t_2\\)
|
||||||
|
|
||||||
|
### Expression saine
|
||||||
|
|
||||||
|
Il est possible d'écrire en calcul algébrique des requêtes qui retourne un
|
||||||
|
relation infinie. Un exemple parlant avec les numéros de comptes :
|
||||||
|
|
||||||
|
* Soit \\(Numcompte(Num)\\)) avec l'instance \\(n\\)
|
||||||
|
* Et la requête \\(\\{ t | \neg t \in n \\}\\) représentant les numéros de
|
||||||
|
comptes non rencencés.
|
||||||
|
* si on considère que \\( Dom(Num) = IN \\) alors la réponse à la question est
|
||||||
|
infinie.
|
||||||
|
|
||||||
|
Un requête est saine si **quel que soit l'instance de la base** dans laquelle on
|
||||||
|
l'évalue, elle retourne **une réponse finie**.
|
||||||
|
|
||||||
|
## Calcul relationnel par domaine
|
||||||
|
|
||||||
|
Le calcul relationnel par domaine est un langage de requête non procédural. Il
|
||||||
|
ne fournit que la description de la requête et pas les méthodes pour la
|
||||||
|
résoudre. Elle prend la forme suivante:
|
||||||
|
|
||||||
|
\\(\\{ < x_1, x_2, ... , x_n> | P(x_1, x_2, ... , x_n)\\}\\)
|
||||||
|
|
||||||
|
* \\(< x_1, x_2, ... , x_n>\\) représente les variables de domaine résultant
|
||||||
|
* \\(P(x_1, x_2, ... , x_n)\\}\\) représente la formule similaire à ce que l'on
|
||||||
|
trouve dans la logique des prédicats
|
||||||
|
|
||||||
|
Si on reprends notre exemple des cinémas, la requête permettant de trouver les
|
||||||
|
films proposé à l'UGC est
|
||||||
|
|
||||||
|
\\(\\{ \<t\> | \exists <nc, t, h> \in p(nc = "UGC"\\}\\)
|
||||||
|
|
||||||
|
## Relation entre les trois langages
|
||||||
|
|
||||||
|
Toute requête exprimée en algèbre peut être exprimée par le calcul et toute
|
||||||
|
requête saine du calcul peut être expriméeapt une requête de l'algèbre. Les
|
||||||
|
trois langages sont donc **équivalent d'un point de vue de la puissance
|
||||||
|
d'expression**.
|
||||||
|
|
||||||
|
L'algèbre est un langage procédural (quoi et comment) alors que le calcul ne
|
||||||
|
l'est pas (seulement quoi).
|
||||||
|
|
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