===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.
**Dépendance fonctionnelle élémentaire (DFE) **
* 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$
**2ème forme normale (2FN) **
* 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é.
**Exemple :**
$$\textbf{Fournisseur}(\underline{\text{nom_f}, \text{composant}}, \text{adresse_f}, \text{prix})$$
$$\text{nom_f} \rightarrow \text{adresse_f}$$
$$\text{nom_f}, \text{composant} \rightarrow \text{prix}$$
⇒ Pas 2FN!!
* Lorsqu’un schéma relationnel n’est pas en deuxième forme normale, __il doit être **normalisé**__:
**Normalisation 2FN** :
* 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).
**__Exemple__**
* __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})$$
**Remarque :** le schéma est maintenant constitué de deux tables.
* 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 [[]]).
__Previous__ : [[public:STD-3:CM1:Aspect logique:2.2.5 Normalisation d'un schéma:Tables mal construites]]
__Up__ : [[public:STD-3:CM1:Aspect physique:2.2.5 Normalisation d'un schéma]]