Conception d'un schéma relationnel
Une même BDD peut être représentée par plusieurs schémas relationnels.
Prenons par exemple la relation :
| sommet | face | année | altitude |
|---|---|---|---|
| Everest | S | 1953 | 8848 |
| Annapurna | SO | 1972 | 8048 |
| Everest | N | 1970 | 8848 |
Cette représentation pose des problèmes lors de la mise à jour :
- Insertion : on ne peut insérer un sommet que si une première ascension de ce sommet a été réalisée.
- Suppression : supprimer une première peut entraîner de la perte de données (en l'occurrence l'altitude d'un sommet).
- Modification : modifier une altitude doit être fait sur toutes les lignes concernant le même sommet (redondance).
La solution apportée est de normaliser le schéma, qui consiste à décomposer les relations.
Formellement :
(On décompose la "grosse" table en de multiples "petites" tables à partir desquelles on peut reconstruire la table initiale à l'aide de jointures naturelles.)
Une telle normalisation s'appuie sur les dépendances fonctionnelles (DF).
Il y a une dépendance fonctionnelle entre un ensemble d'attributs X et un ensemble d'attributs Y d'une relation R, si dans toute extension R la valeur des attributs de X détermine fonctionnellement celle des attributs de Y.
On note : \(X \rightarrow Y\)
Dépendances fonctionnelles
Exemples :
- \(\text{nomSommet} \rightarrow \text{altitude}\)
- \(\text{nomSommet, face} \rightarrow \text{année}\)
DF triviales : \(\text{nomSommet, face} \rightarrow \text{nomSommet}\)
À partir d'un ensemble \(F\) de dépendances fonctionnelles, on construit la fermeture de F, notée \(F^+\), avec les opérations suivantes :
- Réflexivité : si \(Y \subseteq X\) (\(Y\) est un sous-ensemble de \(X\)) alors \(X \rightarrow Y\)
- Augmentation : si \(X \rightarrow Y\) alors \(X \cup W \rightarrow Y \cup W\)
- ⭐ Transitivité : si \(X \rightarrow Y\) et \(Y \rightarrow Z\) alors \(X \rightarrow Z\)
(Pseudo-transitivité : si \(X \rightarrow Y\) et \(Y \cup W \rightarrow Z\) alors \(X \cup W \rightarrow Z\))
La recherche d'une bonne décomposition passe par l'utilisation des dépendances fonctionnelles.
À l'aide de ces DF et de la notion de clé, on va définir 4 degrés de normalisation qui indiquent la qualité de votre schéma relationnel.
Dépendances fonctionnelles & clés
Un ensemble d'attributs X d'une relation \(R(A_1, A_2, \ldots, A_n)\) est une clé de R si :
- \(X \rightarrow A_1, A_2, \ldots, A_n\)
- (minimalité) il n'existe pas de sous-ensemble strict Y de X tel que \(Y \rightarrow A_1, A_2, \ldots, A_n\)
Une même relation peut posséder plusieurs clés. On appelle attribut clé d'une relation R, un attribut qui fait partie d'une clé de R.
Un attribut non-clé est un attribut qui ne fait partie d'aucune clé.
Un ensemble d'attributs est une super-clé s'il contient une clé.