Add database normalization course
This commit is contained in:
parent
9d9c379bff
commit
28d234f2d4
1 changed files with 170 additions and 0 deletions
170
content/bdd_avancees/5-formes_normales/index.md
Normal file
170
content/bdd_avancees/5-formes_normales/index.md
Normal file
|
@ -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.
|
Loading…
Add table
Add a link
Reference in a new issue