La normalisation des tables (plus formellement relations) composant une base de données relationnelle est incontournable
si l'on veut garantir à celle-ci :
— une
structure la plus fiable et robuste qui soit, d'évolution facilitée quand les règles du jeu
de l'entreprise changent ;
— Un contenu valide, par l'élimination de la
redondance de l'information au sein de chaque table, redondance pouvant
être la cause d'incohérences consécutives aux opérations de
mise à jour de la base de données, ce que l'on oublie trop souvent.
Certes, la normalisation n'est pas la panacée, on pourra toujours injecter des redondances échappant à son contrôle,
mais elle joue en tout cas un rôle décisif ne serait-ce qu'en matière d'architecture ; nous avons pu en
juger pendant de très nombreuses années, sur le terrain et pour de très gros projets,
que les bases de données soient relationnelles ou non.
La normalisation est un sujet dont l'étude n'est pas toujours simple, car elle a fait l'objet d'une théorie élaborée
par des mathématiciens, pourvoyeurs en l'occurrence de bien des théorèmes, dont certains incontournables pour
s'assurer de la structure correcte des bases de données. L'objet de cet article est de chercher à rendre le sujet
abordable, l'expliquer sans employer pour autant le langage parfois hermétique de nos chers théoriciens, aussi suivrons-nous
les guides les plus sûrs, à savoir C. J. Date & H. Darwen. Les informaticiens emboîtèrent le pas des théoriciens et
le sujet — fort en vogue dans les années soixante-quinze / quatre-vingts — fit alors l'objet d'une vulgarisation
pour le moins sujette à caution, et cela continue aujourd'hui. Aussi, nous ne pouvons ni ne voulons nous contenter des
définitions incomplètes, fantaisistes ou fausses — touchant notamment aux formes normales — qui abondent dans de
nombreux ouvrages et sur la Toile : rigueur et pertinence sont de mise, il y va de la validité et de la
crédibilité des bases de données.
Suite aux discussions que nous avons eues sur les forums Developpez.com, nous avons tiré nombre d'enseignements
quant aux questions que se posent certains qui découvrent la normalisation,
ou d'autres qui ne l'ont pas abordée par le bon côté (et pensent parfois qu'elle relève de la norme ISO...)
Nous tentons ici de répondre au mieux à leurs attentes tout en formalisant un peu plus et en les creusant, certains points
en général juste effleurés (données temporelles par exemple, en relation avec la sixième forme normale).
Bonne et fructueuse lecture.
N.B. Dans cet article nous étudions la normalisation dite par
projection/jointure, donnant lieu aux formes normales
connues sous le nom de première, deuxième, ..., sixième forme normale (sans oublier l'incontournable et particulièrement
importante forme normale de Boyce-Codd). En revanche nous ne traitons pas d'autres formes normales, relevant par exemple
de la normalisation par restriction/union, ou de la normalisation par contraintes clés/domaines.
Et merci aux relecteurs chez DVP : TheLeadingEdge (qui m'a suggéré d'écrire cet article), mikedavem, qi130, CinePhil, SQLpro,
Luc Orient, ypicot, et tout particulièrement Antoun qui n'a pas ménagé sa peine (la mienne non plus d'ailleurs...),
et merci à Oishiiii, ardent défenseur du modèle relationnel de données, ainsi qu'à f-leb, toujours disponible dans les moments difficiles.
Questions et commentaires à propos de cet article sont les bienvenus.
Rendez-vous autour de la discussion ad-hoc :
56 commentaires