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