From 28d234f2d43a64c647b006f9b11ce5cbd8d62933 Mon Sep 17 00:00:00 2001 From: Yorick Barbanneau Date: Tue, 8 Mar 2022 11:33:21 +0100 Subject: [PATCH] Add database normalization course --- .../bdd_avancees/5-formes_normales/index.md | 170 ++++++++++++++++++ 1 file changed, 170 insertions(+) create mode 100644 content/bdd_avancees/5-formes_normales/index.md diff --git a/content/bdd_avancees/5-formes_normales/index.md b/content/bdd_avancees/5-formes_normales/index.md new file mode 100644 index 0000000..231dc36 --- /dev/null +++ b/content/bdd_avancees/5-formes_normales/index.md @@ -0,0 +1,170 @@ +--- +title: "Base de données avancées : Les formes normales" +date: 2022-01-18 +tags: ["schema", "relation"] +categories: ["Base de données avancées", "Cours"] +mathjax: true +--- + +Les formes normales représentent différentes formes de normalisation de la +relation universelle afin d'obtenir un schéma de base de données sans +redondance, perte de donnée, perte de dépendance fonctionnelle et anomalies de +mise à jour. On en dénombre 7 mais nous n'en verrons que 3 (plus celle de FNBC), +les autres ayant surtout un interet théorique. + +## La première forme normale (1FN) + +Une relation est en première forme normale si chaque domaine de ses attributs +est constitué de **valeurs atomique** : ne pouvant être décomposé. Attention, +une coordonnée GPS, **même si elle est composée de deux nombres flottant** est +considére comme atomique car elle supprime l'un des deux conduirait à la **perte +du sens initial**. + +Les tableaux, les listes violent la première forme normale car composés de +valeurs sémantiquement indépendante. + +## La seconde forme normale (2FN) + +Une relation en seconde forme normale est forcément en première forme normale. + +Une relation en 2FN ne supporte pas les dépendance de clé partielle. Pour être +plus simple, un attribut ne peut dépendre une partie de la clé. Dans ce cas il +est opportun de décomposer la relation + +### exemple + + 1. prenons la relation \\(R(\underline{A,B},C,D)\\) avec \\(B \to D\\) + 2. nous pouvons la décomposer en \\(R'(\underline{A,B},C)\\) et + \\(R''(\underline{B},D)\\) + +## La troisième forme normale (3FN) + +Une relation en troisième forme normale est forcement en seconde forme normale. + +Chaque attribut non clé est pleinement et directement dependant des clé. tout +attribut n'appartenant pas à une clé ne depend pas d'un attribut non clé. + +Prenons l'exemple de la relations suivante: + +\\( R(\underline{A,B},C,D)\\) avec \\( C \to D\\). Cette relation n'est pas en 3FN, +pour cela nous allons la décomposer en deux relations : + +\\(R^{'}(\underline{A,B},C) \\\ R^{''}(\underline{C},D)\\) + +## La forme normale de Boyce-Codd + +Un schéma est en FNBC si et seulement si il est en 3FN et si aucun attribut ne +dépend transitivement d'une clé. Pour faire plus simple, la partie gauche d'une +dépendance fonctionnelle est forcément une clé (être une super clé). + +Prenons un exemple concret avec la relation suivante: +\\(\text{adresse}(\text{ville}, \text{CP}, \text{rue})\\). on observe les +dépendances suivantes: + +\\(\begin{array}{l} +\text{ville},\text{rue} \to \text{CP} \\\ +\text{CP} \to \text{ville} +\end{array}\\) + +Cette relation n'est pas en FNBC car \\(\text{CP} \to \text{Ville}\\) et +\\(\text(CP)\\) n'est pas une clé et \\(ville\\) depend transitivement de la +clé. + +## Décomposition en 3FN et FNBC + +À partie d'une relation\\(r\\), l'objectif de ces décompositions est +l'obtention d'un schéma de base de données minimisant le nombre de schéma de +relations \\(r_{i}\\ dans perte (dependances fonctinnelles et données) et +maximisant leurs formes normales. + +À partir des relations \\(r_{i}\\) nous devons pouvoir reconstituer \\(r\\) (via +des jointures). + +Notons qu'il est toujours possible de décomposer en #FM sans perte de données et +de dépendances fonctinnelle. Il est cependant toujours possible de décomposer en +FNBC sans perte de données (mais avec parfois perte de dependances +fonctionnelles). + +### Décomposition sans perte + +La décomposition d'une relation \\(R<\text{U},F>\\) en un ensemble de schema de +relation \\(\{R_{1}, R_{2},...R_{n}\}\\) obtenus par projection et dites sans +pertes si et seulement si quelque soit la réalisation cd \\(r\\) de \\(R\\): + + * la jointure naturelle de \\(r_{i}\\) donne exactement \\(r\\). + * pas de perte de dependances : \\((F_{1} \cup F_{2}, ... \cup F_{n})^{+} = + F^{+}\\) + +#### Théorème de Heath + +Soit une relation \\(R(X,Y,Z)\\) avec la dépendance fonctionnelle vérifiée \\(X +\to Y\\). \\(R\\) peut être décomposée en \\(R_{1}(X,Y)\\) et +\\(R_{2})(X,Z)\\).\\(R\\) est égal à la jointure de ses projections sur +\\(R_{1}\\) et \\(R_{2}\\). + +#### Théorème de Rissanen + +Soit une relation \\(R(X,Y,Z)\\) avec les dépendances fonctionnelle vérifiées +\\(X \to Y\\) et \\(Y \to Y\\).\\(R\\) peut alors être décomposée en +\\(R_{1}(X,Y)\\) et \\(R_{2}(Y,Z)\\). + +#### Théorème (mais sans nom celui-là) + +Soit un schéma de base de données \\(S = (S^{'}, S^{''}\\) et \\(F\\) l'ensemble +de dépendances fonctionnelles associé. \\(S\\) est sans pertes par rapport à +\\(F\\) si et seulement si \\((R^{'} \cap R^{''}) \to (R^{'} - R^{''}) +\in F^{+}\\) + +### Décomposition en FNBC + +La décomposition en *forme normale de Boyce-Codd* s'obtient par décomposition +successive sans garantie de conversation de toutes les dépendances +fonctionnelles. + +#### exemple + +Soit \\(R(C, P, H, S, E, N )\\) avec + * C : Cours + * P : Professeur + * H : Heure + * S : Salle + * E : Etudiant + * N : Niveau + +Avec une seule clé : \\((H, E, C)\\) et les dependances fonctionnelles +suivantes: + +\\( +F= \left \\{ \begin{array}{l} +C \to P \\\ +CE \to N \\\ +HS \to C \\\ +HE \to S \\\ +HP \to S \\ +\end{array} +\right \\} +\\) + + 1. Considérons \\(CE \to N \implies R_{1}(C,E,N\\) qui est en FNBC et + \\(R_{2}(C,P,H,S,E)\\) qui ne l'est pas. + 2. Dans \\(R_{2}\\) on a \\(C \to P\\ \implies R_{3}(C,P)\\) en FNBC et + \\(R_{4}(C,H,S,E)\\) qui le l'est pas. + 3. Dans \\(R_{4}\\) on a \\(HC \to S \implies R_{5}(H,C,S) \text{ et } + R_{6}(C,H,E)\\) toutes les deux en FNBC. + +Résultat : \\(R_{1}, R_{3}, R_{5} \text{ et } R_{6}\\) représente les relations +en FNBC mais nous avons perdu la dependances fonctionnelles \\(HP \to S\\). + +### Décomposition en 3FN + +À partir de l'ensemble des dépendances fonctionnelles fournies et en utilisant +leurs propriétés, on peut directement obtenir une décomposition sans perte + +#### Principe + + 1. Calculer la couverture minimale + 2. Condenser les dépendances fonctionnelles ayant la même partie gauche. Chaque + relation obtenue est alors en 3FN + 3. Détecter les équivalences entre dependances fonctionnelles (regroupement des + relations) et vérifier que la clé \\(R\\) est présente dans un des schemas + de relation obtenu.