Le but des dépendances fonctionnelles et de la théorie de la normalisation est de s'assurer que le schéma relationnel défini pour une base de données est correctement construit. Un mauvais schéma relationnel peut en effet entrainer des anomalies lors des manipulations.
Considérons la relation Approvisionnement suivante :
Produit | Quantité | Couleur | Fournisseur | Adresse |
parapluie | 110 | rouge | Labaleine | Paris |
chapeau | 50 | vert | Lemelon | Lyon |
sac à main | 65 | noir | Toutcuir | Lyon |
parasol | 15 | jeune | Labaleine | Paris |
ombrelle | 5 | rouge | Labaleine | Paris |
ceinture | 25 | vert | Letour | Nantes |
sac à main | 65 | noir | Legrand | Paris |
Cette relation est mal construite : les informations concernant les fournisseurs sont redondantes. S'il faut mettre à jour l'adresse du fournisseur "Labaleine", il faut absolument vérifier que toute les adresses de Labaleine sont mises à jour. Cette solution n'est pas raisonnable. La base de données va trsè rapidement devenir incohérente.
La solution est dont d'éviter toute redondance dans la base de données. Ceci exige que le schéma de la base de données soit bien construit. La méthode pour cela se décompose en deux étapes :
Soit R(X,Y,Z) un schéma de relation, avec X, Y, Z des ensembles d'attributs, Z pouvant être éventuellement vide
On dit qu'il existe une dépendance fonctionnelle entre X ete Y si la connaissance d'une valeur de X détermine au plus une valeur de Y. La notation adoptée est la suivante :
X -> Y
Cette propriété est définie sur l'intension du schéma et non son extension (elle est donc invariante dans le temps et ne peut être extraite à partir d'exemples). C'est une propriété qui doit être extraite de la connaissance que l'on a de l'application à modéliser.
R(X,Y,Z) ET X -> Y => R(X,Y,Z) = R[X,Y] * R[X, Z]
Règles:
Ce principe de décomposition binaire d'une relation est à la base de l'algorithme de décomposition
Soit R(X,Y,Z) schéma de relation où X, Y, Z ensemble d'attributs avec Z éventuellement vide
Soit A un attribut quelconque.
X est une clé de R ssi X -> Y,Z DFE (une relation peut avoir plusieurs clés)
A est attribut clé s'il appartient à au moins une clé de R
A est attribut non clé s'il n'appartient pas à une clé de R
A est transitivement dépendant de X s'il existe Y, Y ne contenant pas A tel que
X -> Y, Y -> A, ~(Y-> X), Y n'est pas inclus dans X
A est directement dépendant de X s'il n'est pas transitivement dépendant
A est pleinement dépendant de X si X -> A est une DFE
A est partiellement dépendant de X si X -> A n'est pas une DFELa fermeture transitive F+ d'un ensemble F de dépendances fonctionnelles est l'ensemble des DFE qui peuvent être produites par application des axiomes d'Amstrong sur l'ensemble F.
Objectifs :
On ne présente ici que les formes normales dont la définition utilise exclusivement les dépendances fonctionnelles. Si on prend en compte d'autres dépendances entre données comme les dépendances multivaluées on obtient alors les 4FN et 5FN. La 3FN reste cependant l'objectif de normalisation le plus "classique".
1FN : une relation est en première forme normale ssi tout attribut a une valeur atomique (vrai par définition du modèle relationnel)2FN : une relation est en deuxième forme normale ssi elle est en 1FN et si tous les attributs non clés sont pleinement dépendants des clés (toutes les dépendance entre une clé et un attribut non clé sont élémentaires)
3FN : une relation est en troisième forme normale ssi elle est en 2FN et si tous les attributs non clés sont directement et pleinement dépendants des clés (si tout attribut non clé ne dépend pas d'un autre attribut non clé)
3FNBCK (Boyce-Codd-Kent) : une relation est en 3FNBCK ssi elle est en 3FN et si les seules DFE sont celles de la forme C -> X avec C clé (seules les clés sont en partie gauche de DF).
Une manière de concevoir un schéma relationnel en troisième forme normale est de partir du schéma complet (ensemble de tous les attributs) et de décomposer cette "grosse" relation (appelée également relation universelle) suivant les dépendances fonctionnelles. Cette approche est appelée approche par décomposition. Le problème est d'ordonner l'ordre des décompositions de manière à obtenir un schéma en 3ème forme normale. En effet, chaque relation produite ne conserve qu'un certain nombre de DF (celles définies sur ses attributs propres) et n'est donc pas forcément en 3ème forme normale. De plus, l'ensemble des DF du schéma complet n'est pas forcément préservé.
Algorithme de décomposition :
Problèmes : la solution dépend du choix des DF selon lesquelles on choisit de décomposer et il ne préserve pas nécessairement les DF.
On sait néanmoins que toute relation admet une décomposition en 3FN qui préserve les DF.
Il existe un algorithme dit de synthèse qui permet d'obtenir une décomposition 3FN qui préserve les DF. Il est basé sur le calcul de la couverture minimale (ou irredondante) d'un ensemble de DF.
Exemple sur les formes normales :
Soit le schéma R = <{P, H, N, Y, T}, {P -> T; P, H -> Y; H, N -> P; H, Y -> N}>
Ensemble des DFE engendrées :
On a donc trois clés potentielles (H, N; P, H; H, Y) :
Les attributs clés sont donc : H, N, P, Y et les attributs non clés sont : T
Par définition le schéma est en 1ère forme normale. Est il en 2ème forme normale ?
Non, car P, H -> T n'est pas une DFE (on a P -> T)
R est donc en 1ère forme normale. N'ayant pas une relation en 3FN, nous décomposons le schéma en applicant l'algorithme de décomposition :
ou bien :