Les Formes normales:
- Restreignent les dépendances admises dans un schéma relationnel
- Permettent d’éviter la duplication de l’information au sein des relations
- Définissent une méthode de décomposition d’un schéma relationnel redondant en plusieurs schémas liés entre eux.
- Soit $R$ un schéma relationnel
- Soit $X$ un ensemble d’attributs ⊆ $R$
- Soit $A$ un attribut de $R$
- Il existe une DFE entre $X$ et $A$ ssi :
- $X \rightarrow A$
- Il n’existe aucun sous-ensemble $Y$ ⊆ $X$ tel que $Y \rightarrow A$
- Un schéma $R$ est en 2FN :
- ssi la clé primaire de $R$ est en DFE avec tous les autres attributs.
- Donc : il n’y a pas d’attributs qui ne dépendent que d’une partie de la clé.
- Lorsqu’un schéma relationnel n’est pas en deuxième forme normale, il doit être normalisé:
- Pour obtenir un schéma 2FN,
- on “découpe” la table selon les DFE trouvées.
- La normalisation consiste
- à créer une nouvelle table
- pour chaque DFE de la table initiale.
- Soit :
$$R (\underline{A_1,...,\color{red}{A_i},...,A_n},B_1,...,\color{red}{B_j},...,B_m)$$
- avec :
$$\color{red}{A_i} \stackrel{DFE}{\rightarrow} \color{red}{B_j}$$ $$A_1,...,\color{red}{A_i},...,A_n \stackrel{DFE}{\rightarrow} B_1,...,B_{j-1},B_{j+1}...,B_m$$
- Alors le schéma de table doit être modifié comme suit :
$$R_1 (\underline{A_1,...,\color{red}{A_i},...,A_n},B_1,...,B_{j-1},B_{j+1}...,B_m)$$ $$R_2 (\underline{\color{red}{A_i}},\color{red}{B_j})$$
- Attention,
- même si aucun attribut ne dépend plus de la clé primaire initiale,
- il est important de la conserver dans une table spécifique
- (elle sert à “lier” les valeurs dispersées dans les différentes tables).
- Avant:
$$\textbf{Fournisseur}(\underline{\text{nom_f,composant}}, \text{adresse_f, prix})$$ $$\text{nom_f} \rightarrow \text{adresse_f}$$ $$\text{nom_f, composant} \rightarrow \text{prix}$$
- Après:
$$\textbf{Catalogue}(\underline{\text{nom_f,composant}}, \text{prix})$$ $$\textbf{Fournisseur}(\underline{\text{nom_f}}, \text{adresse_f})$$
- Les tables ont un attribut commun : nom_f (clé primaire de la table Fournisseur).
- La clé primaire de la table des Fournisseurs est dupliquée dans la table des prix (appelée ici Catalogue).
- On dit que nom_f est une clé étrangère de la table des prix (l’attribut fait référence à la clé primaire d’une autre table, en l’occurrence la table des fournisseurs - voir formes_normales).
Previous : Tables mal construites Up : 2.2.5 Normalisation d'un schéma