Compare commits
No commits in common. "2ac622ccea236dfc310e650f345efc224bb4ecb5" and "a61170161e2b2ca91236bdf66a474ca461c34566" have entirely different histories.
2ac622ccea
...
a61170161e
3 changed files with 2 additions and 617 deletions
|
@ -188,7 +188,7 @@ t[acteur] = "Jay" \land s[acteur] = "Silent Bob" ) \\} \\)
|
|||
\\( \\{
|
||||
t | \exists s \in p(s[titre] = t[titre]
|
||||
\land s[\text{nom_cinemas}] = "UCG"
|
||||
\land {\neg} {\exists} u \in p( u[\text{nom_cinemas}] = "Megarama"
|
||||
\land {\not} {\exists} u \in p( u[\text{nom_cinemas}] = "Megarama"
|
||||
\land u[titre] = t[titre]
|
||||
\\} \\)
|
||||
|
||||
|
@ -200,57 +200,8 @@ t | \exists \in p(\exists u \in f((s[\text{nom_cinemas}] = "UGC"
|
|||
\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
|
||||
*n_uplets* de façon unique sans pour autant en donner toutes leurs valeurs et
|
||||
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
Before Width: | Height: | Size: 22 KiB |
|
@ -1,302 +0,0 @@
|
|||
---
|
||||
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