A -> D - Edouard Lopez
Download
Report
Transcript A -> D - Edouard Lopez
Base de Données 2
Cours 5 partie 2
Julie Dugdale
[email protected]
Material/Sources: Daniel Bardou, Julie Dugdale &
Vanda Luengo
Sommaire
La normalisation
Buts de la normalisation
Formes normales
Première forme normale
Deuxième forme normale
Troisième forme normale
Forme normale de Boyce-Codd
Algorithme de Normalisation
Algorithme de Normalisation – Exemple
Entre Fonctionnel et Opérationnel
Dénormalisation
Normalisation - Résumé
Définition:
Le processus de restructurer le modèle de
données logiques pour :
Eliminer les redondances,
Organiser les données efficacement,
Réduire le potentiel d'anomalies pendant les
opérations sur les données.
Normalisation - Résumé
Chaque nouvelle forme normale marque une
étape supplémentaire de progression vers
des relations présentant de moins en moins
de redondance
Le but..
est d'obtenir une représentation des données
présentant un minimum de redondance à
l'intérieur de chaque relation et un maximum
d'indépendance entre les différentes relations
Normalisation : 3FN - Résumé
Définition : troisième forme normale:
Une relation est en troisième forme normale
si :
- elle est en deuxième forme normale ;
- tout attribut n'appartenant pas à une clé ne
dépend pas d'un attribut non clé.
- cad toute DF dont la partie droite n’est pas
une clé doit avoir une partie gauche qui est
une clé :
B, C
OK
A, B, C
Algorithme de
Normalisation
Algorithme de Normalisation
L’algorithme de conception de schéma
relationnel en 3NF
Théorème:
Tout schéma relationnel peut se décomposer en
schémas sous 3ième forme normale avec
préservation des Dépendances Fonctionnelles
Il existe divers algorithmes de décomposition
(nous n’en étudierons qu’un « classique » dû à
Bernstein
Algorithme de Normalisation
4 étapes
1. Calculer DF-, une Couverture Irredondante Minimale
(une CIM) de DF, en enlevant:
A) les redondances des attributs de partie gauche
Est-ce que AB → D a des attributs redondants dans la
partie gauche? Est-ce que cela pourrait être remplacé par B →
D ou A → D?
B) les dépendances redondantes (transitivité)
Si A dépend de B et B dépend de C, alors A dépend aussi
de C
2. Regrouper en DFi- les dépendances fonctionnelles de
DF- ayant même partie gauche.
Algorithme de Normalisation
3. Pour chaque DFi-, construire un schéma
relationnel Ri avec l’union des attributs de
DFi4. Trouver les clés de DF-. Si aucune de ces
clés n’est contenue dans au moins un des Ri,
alors il faut rajouter un schéma relationnel Rk
= {Ki K->K} avec K un clé candidate.
Résultat : Toutes les Ri sont 3NF!
Algorithme de Normalisation:
Exemple
On considère la relation R(A, B, C, D, E) et
l’ensemble de dépendances fonctionnelles
suivant DF= {A -> BC, CD -> E, B -> D, A ->
D, BE -> D}
D'abord mettre DF sous forme canonique:
(partie droite atomique)…
DF = {A -> B, A -> C, CD -> E, B -> D, A -> D,
BE -> D}
Algorithme de Normalisation:
Exemple
Souvent utile de dessiner un graphe des
dépendances fonctionnelles de DF:
DF = {A -> B, A -> C, CD -> E, B -> D, A -> D,
BE -> D}
A
B
C
D
E
Algorithme de Normalisation:
Exemple
1. Calculer un couverture irredondante DF- (une CIM) de
DF, en enlevant:
A) les redondances des attributs de partie gauche
B) les dépendances redondantes (transitivité)
DF = {A -> B, A -> C, CD -> E, B -> D, A -> D, BE -> D}
A) Elimine BE -> D (car on a déjà B->D)
DF = {A -> B, A -> C, CD -> E, B -> D, A -> D, BE -> D}
B) Elimine A -> D (car on a déjà A->B et B->D)
Donc, DF- = {A -> B, A -> C, CD -> E, B -> D}
Algorithme de Normalisation:
Exemple
Utile: graphe des dépendances fonctionnelles
de DF:
A) Elimine BE -> D (car on a déjà B->D)
B) Elimine A -> D (car A->B et B->D)
Donc, DF- = {A -> B, A -> C, CD -> E, B -> D}
A
B
C
D
E
Algorithme de Normalisation:
Exemple
2. Regrouper les dépendances fonctionnelles de DFayant même partie gauche, en DFiDF- = {A -> B, A -> C, CD -> E, B -> D}
DF1- =
{A -> B, A -> C}
DF2- =
{CD -> E}
DF3- =
{B -> D}
Algorithme de Normalisation:
Exemple
3. Pour chaque DFi-, construire un schéma relationnel
Ri avec l’union des attributs de DFiDF1- = {A -> B, A -> C}
DF2- = {CD -> E}
DF3- = {B -> D}
R1 = {A, B, C}
R2 = {C, D, E}
R3 = {B, D}
Algorithme de Normalisation:
Exemple
4. Trouver les clés de DF-. Si aucune de ces
clés n’est contenue dans au moins un des Ri,
alors il faut rajouter un schéma relationnel Rk
= {Ki K->K} avec K un clé candidate.
Clés = seule candidate = A
A appartient à R1 => OK
R1 = {A, B, C}
R2 = {C, D, E}
R3 = {B, D}
Résultat: Toutes les Ri sont 3NF!
Processus global de conception de
base de données
On a supposé que le schéma R est donné
R pourrait avoir été généré pendant la
conversion du diagramme E-A en un ensemble
de tableaux.
R pourrait avoir été une seule relation contenant
tous les attributs ayant un intérêt.
La normalisation découpe R en des relations plus
petites.
R pourrait avoir été le résultat d'une conception
ad hoc de relations, qu'on teste/convertit alors
vers une forme normale.
Modèle ER et normalisation
Quand un diagramme E-A est conçu avec soin, identifiant
toutes les entités correctement, les tableaux générés à
partir du diagramme E-A ne devraient pas nécessiter de
plus de normalisation.
Cependant, dans une conception réelle (imparfaite), il
peut y avoir des dépendances fonctionnelles d'attributs
non-clé d'une entité vers d'autres attributs de l'entité
Exemple : une entité employé avec les attributs
numéro_département et adresse_département, et une
dépendance fonctionnelle numéro_département
adresse_département
Une bonne conception aurait fait du département une entité
Entre Fonctionnel et Opérationnel
Quelques conseils
Il ne faut jamais oublier qu’il y aura des utilisateurs de
la base. Il faut par conséquent être fonctionnel et
opérationnel.
Fonctionnel : une base avec beaucoup de tables est
difficile à gérer. Il faut optimiser les tables dans leur
structure (recherche de clefs étrangères).
Opérationnel : pour les traitements, les relations de
type CIF (contrainte d'intégrité référentielle) sont à
privilégier.
Dénormalisation
Dénormalisation
On appelle dénormalisation l'introduction volontaire de
redondance répondant principalement à des conditions
d'efficacité.
Exemple; Soit le schéma relationnel suivant:
Article(NumArt, desigArt, prixArt)
Commande(NumCom,DateCom, NumCli)
Ligne_Commande(NumCom,NumArt,Qtite)
Client(NumCli,NomCli,AdrCli)
Dénormalisation
Supposons que le marketing (pour l’émission de mailing)
soumet très fréquemment à la base des requêtes de la
forme:
Quels sont les adresses des clients ayant passé
commande de tel(s) article(s)
-> On doit à chaque fois vérifier dans 4 tables pour
donner la réponse
* Article(NumeroArticle2, designationArticle1, prixArticle)
* Commande(NumeroCommande5,DateCommande, NumeroClient6)
* Ligne_Commande(NumeroCommande4,NumeroArticle3,Qtite)
* Client(NumeroClient7,NomClient,AdresseClient8)
Dénormalisation
Si on met l'attribut designationArt dans
Commande on a besoin de deux tables
..Redondance mais efficacité
Article(NumeroArticle, designationArticle, prixArticle)
* Commande(NumeroCommande,DateCommande, NumeroClient2,
designationArticle1)
Ligne_Commande(NumeroCommande,NumeroArticle,Qtite)
* Client(NumeroClient3,NomClient,AdresseClient4)