====2.2.5 Normalisation d'un schéma==== __**Tables mal construites**__ ** Exemple : fournisseurs de composants électroniques:** $$\textbf{Fournisseur}(\underline{\text{nom_f, composant}}, \text{adresse_f, prix})$$ * **Problèmes :** * **Redondance** : l’adresse des fournisseurs est répétée plusieurs fois * **Inconsistance** : mauvaise mise à jour => adresses différentes pour un même fournisseur. * **Problème Insertion** : on ne peut pas insérer dans la table un fournisseur qui ne fournit rien * **Problème suppression** : si un fournisseur ne fournit plus rien, on perd son adresse * Solution? * Couper la table en 2? $$\textbf{Fournisseurs} (\text{nom_f, adresse_f})$$ $$\textbf{Catalogue}(\text{composant, prix})$$ --> Impossible de retrouver les prix pratiqués par les différents fournisseurs. * Nouveau Schéma : $$\textbf{Fournisseurs} (\text{nom_f, adresse_f})$$ $$\textbf{Catalogue}(\text{nom_f, composant, prix})$$ --> Il est possible de reconstruire la table initiale en effectuant une jointure entre ces 2 tables sur l’attribut ''nom_f''. **Exercice** : Les tables suivantes sont-elles bien ou mal construites? * **Enseignement** (__id_enseignant__, nom_enseignant, __matière, id_élève__, nom_élève) * **Arrêt** (__num_train__, horaire, __nom_gare__, ville) * **Facture** (__id_client, article__, date, montant) **__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//: * Voir: * [[public:STD-3:CM1:Aspect logique:2.2.5 Normalisation d'un schéma:2ème forme normale (2FN)]] * [[public:STD-3:CM1:Aspect logique:2.2.5 Normalisation d'un schéma:Normalisation 2FN]] * [[public:std-3:cm1:aspect_logique:2.2.5 Normalisation d'un schéma:3ème forme normale (3FN)]] * [[public:STD-3:CM1:Aspect logique:2.2.5 Normalisation d'un schéma:Normalisation 3FN]] __Previous__ : [[public:STD-3:CM1:Aspect logique:2.2.4 Clé d'une relation]] __Up__ : 2.2 [[public:STD-3:CM1:Aspect logique]] __Next__ : [[public:STD-3:CM1:Aspect logique:2.2.6 Exemple -- Création d’un schéma de table en SQL]]