RECHERCHE :
Bienvenue sur le site de Michel VOLLE
Powered by picosearch  


Vous êtes libre de copier, distribuer et/ou modifier les documents de ce site, à la seule condition de citer la source.
 GNU Free Documentation License.

A propos des bases de données

13 décembre 2005


Pour lire un peu plus :

- Informatique, normes et temps

La construction des applications informatiques a été grandement facilitée par la mise au point de deux techniques : les systèmes de gestion de bases de données (SGBD[1]), qui ont mis de l’ordre dans le stockage et la recherche des données, et les moniteurs transactionnels, qui pilotent la communication entre le système et ses utilisateurs.

Les bases de données sont ainsi aujourd’hui l’un des piliers de l’informatique. Si la réalisation d’un SGBD est une affaire hautement technique, les principes selon lesquels il est construit devraient, eux, pouvoir être aisément compris. Or le vocabulaire qu'utilise la profession gêne leur compréhension. On peut même juger dangereuse la façon dont les bases de données sont présentées. Certes, quelqu'un de rigoureux et d'intelligent pourra toujours s'en sortir sans dommage, de même qu'un funambule bien exercé marche naturellement sur un fil. Mais les autres risquent de se casser la figure. Voici les points que je crois périlleux[2].

Choix des populations à observer

Lorsque l'on considère le monde de la nature, et que l'on veut en bâtir une représentation, il faut choisir les populations que l'on veut y voir figurer (« les clients», « les produits », « les salariés » etc.), et le monde comporte bien d'autres populations dont on fera abstraction.

Or dans le langage des bases de données on ne voit pas apparaître de terme qui désignerait ces « populations » et leur théorie n’évoque pas la façon dont il convient de choisir les populations que l'on observera. Elle suppose que ce choix a été fait avant que l'on n'entreprenne de construire la base de données. Pourtant il ne va pas de soi, et il peut être erroné. L'étude des systèmes d'information montre que nombre d'entreprises ont longtemps été réticentes à considérer la population que forment leurs clients, et cela se révèle si l'on examine les identifiants : souvent les clients ne sont pas identifiés.

En fait la méthode la plus courante de conception d'une base de données considère essentiellement les contraintes formelles auxquelles toute base doit obéir, et elle omet « implicitement » les questions sémantiques
[3]. Une telle omission n’a en principe rien de critiquable, puisque cette méthode ne prétend pas plus s’intéresser à la sémantique qu'un langage de programmation ne s’intéresse à l’adéquation des applications aux besoins des utilisateurs. Le problème, c’est qu’ici l’omission est implicite. La théorie en matière de conception de base de donnée doit donc être complétée par des études sur la qualité des données, l'architecture des processus, la culture d'entreprise etc.

Choix des données

Elmasri et Navathe définissent ainsi les données (p. 4) : « known facts that can be recorded and that have implicit meaning ». Certes, il ne faut pas se battre sur la définition d'un terme aussi général et d'ailleurs, comme l’a dit Aristote lui-même, « il ne faut pas chercher à tout définir[4]». Cependant quand une définition est énoncée on peut tenter de voir l'orientation qu'elle indique.

Ici, la définition ignore que (1) la liste des attributs résulte d'un choix qui ne va pas plus de soi que celui des populations que l'on observera, et qui peut lui aussi être erroné (on observe des attributs inutiles, et on n'observe pas ceux dont on aurait besoin) ; (2) la façon dont on code les attributs que l'on a sélectionnés résulte d'un autre choix (pour un attribut qualitatif comme l'activité économique d'une entreprise, ou la catégorie sociale d'une personne il faut définir une classification, et les critères formels ne suffisent pas à définir ce qu'est une « bonne » classification) ; là encore le choix peut être erroné (la classification, ou nomenclature, peut ne pas permettre le discernement que le raisonnement, ou l'action, réclament) ; (3) la donnée elle-même, telle qu'elle est notée dans la base de données, résulte d'une observation dont elle enregistre le résultat (et qui peut être exacte ou erronée).

Il faut enfin distinguer parmi les données : (1) les identifiants, (2) les données observées, entrées du système d'information, (3) les données que le SI produit en appliquant des calculs aux données observées. Chacune de ces catégories de données relève d'une gestion spécifique. Certes la théorie des bases de données reconnaît cette distinction
[5], mais souvent les informaticiens ont, en pratique, tendance à considérer les données comme une matière pondéreuse indifférenciée analogue à du charbon et que l’on traite au volume, ce qui les empêche de bien distinguer les catégories de données pour les traiter différemment selon leur importance et leur éventuelle fragilité.

Derrière la définition de la « donnée » par Elmasri et Navathe se devine une priorité : il s'agit de construire et gérer une base de données en supposant déjà réalisé le choix des populations, des attributs, des classifications, ainsi que des méthodes qui garantissent la qualité des observations. On ne se pose donc plus de questions sur la pertinence sémantique, sur le sens ou l'utilité pratique des données ; on ne considère que les questions de physique, de cohérence formelle que suppose la maîtrise des traitements et des performances ainsi que celle des « couches basses » de la plate-forme technique.

Ce sont là des questions importantes et intéressantes, mais une base de données, aussi bien gérée et formellement correcte qu'elle soit, sera de peu d'utilité si les populations et les attributs ont été mal choisis. Or cela se produit souvent : comme on croit que ces choix vont de soi, on les fait à la va-vite.

Homonymies

Le langage des bases de données comporte des termes pour désigner la façon dont on décrit l'individu type d'une population ; mais ces termes varient selon le modèle considéré. Ce sera « type d'entité » dans le modèle entité-association, « classe » dans le modèle objet, « relation » dans la base de donnée relationnelle ; dans ces trois modèles, l'individu lui-même sera représenté respectivement par une « entité », un « objet » et un « tuple ».

Il vaut mieux dire « modèle entité-association » plutôt que « modèle entité-relation ». Lorsque les auteurs de la méthode Merise ont traduit « entity-relationship model » par « modèle entité-relation », ils ont pris le risque d’une confusion avec la « relation » du SGBD relationnel qui est tout autre chose.

Dans un modèle entité-association en effet, l'association est comme dans le langage courant ce qui relie deux individus [par exemple : « Jean-Pierre Martin » (individu) « possède » (association) « le piano Pleyel n° 134878-80 » (individu)].

Par contre dans la base de données relationnelle le mot relation est pris dans le sens qu'il a paraît-il en théorie des ensembles : il désigne un tableau contenant, pour une liste d'individus appartenant à une même population, les valeurs des attributs que l'on a choisi d'observer sur cette population. Il peut aussi désigner un tableau contenant la description d'un ensemble d’associations : par exemple, un tableau intitulé « possession » dans lequel on trouverait les attributs « possédant », « possédé », « date de début » et éventuellement « date de fin », pour décrire l’association entre les propriétaires et les biens qu'ils possèdent.

Tout cela se classe à peu près bien dans la tête une fois que l'on a compris, mais le fait que le mot « relation » joue deux rôles différents selon le modèle que l'on utilise ne facilite pas la communication avec les personnes inexpertes.

L'individu passe après l'attribut

L'algèbre relationnelle, utilisée pour mettre en forme les calculs que l'on réalise sur une base de données relationnelle, comporte beaucoup plus d'instructions applicables aux attributs que d'instructions applicables aux individus. Il en est de même des « formes normales » qui condensent les contraintes formelles auxquelles une base de données doit obéir. On ne mentionne qu'en passant le fait que les données rassemblées dans un « tuple » (i. e. dans une ligne de la relation) sont relatives au même individu.

Si l'on avait suivi la démarche qui part de la population pour aller vers l'individu, puis ensuite seulement vers les attributs, on aurait abordé la relation non pas par colonne (par attribut) mais par ligne (par individu).

La qualité du codage se vérifie d'abord, il est vrai, attribut par attribut (un codage doit être conforme au type requis pour l'attribut). Mais il faut aussi vérifier la cohérence de certaines données individu par individu (exemple : exactitude des additions), et pour calculer les intervalles de vraisemblance nécessaires au repérage des anomalies il faut évaluer des corrélations, ce qui nécessite de considérer la co-occurrence des valeurs prises par les divers attributs dans chaque individu.

Faiblesse de l'identification

Le fait que l'on accorde plus d'importance aux attributs qu'aux individus se manifeste clairement lorsque l'on parle des identifiants, ou « clés ». On dit que dans chaque relation il doit exister un attribut, ou une combinaison d'attributs, qui permette d'identifier chaque tuple de façon univoque.

Cela peut marcher, et cela marche si c'est bien fait, mais une telle formulation invite à l'erreur. Certes l'identifiant n'est, formellement, qu'un attribut parmi les autres ; mais il joue en pratique un rôle tellement important que l'on ferait mieux de l'isoler pour le traiter d'une façon particulière. Par ailleurs, il est périlleux de prendre pour identifiant un attribut existant ou une combinaison d'attributs, même s'ils permettent d'identifier chaque tuple de façon univoque : qui sait si, la population évoluant, le caractère univoque de l'identification pourra être conservé avec ces attributs-là ?

On peut tolérer que des attributs soient pris comme identifiants lors de la discussion entre les informaticiens et les utilisateurs, car c'est plus intuitif. Mais lorsque l'on passera au modèle logique puis au modèle physique, il sera impératif de prendre un identifiant dépourvu de signification et construit de façon aléatoire.

Ambiguïté du « null »

On note « null » un attribut quand (1) l'attribut n'aurait pas de sens pour l'individu considéré (une personne qui n'a pas d'emploi ne peut pas avoir de téléphone professionnel) ; (2) il aurait un sens mais on ne sait pas s'il existe (cette personne a un emploi mais on ignore si elle a un téléphone professionnel) ; (3) il aurait un sens mais il n'existe pas (elle a un emploi mais elle n'a pas de téléphone professionnel) ; (4) il existe, mais on ignore sa valeur (elle a un téléphone professionnel, mais on ne connaît pas le numéro).  Je ne suis pas sûr d'avoir fini la liste des significations possibles du code  « null ».

Elmasri et Navathe disent (p. 343) que l'on a tenté de construire des SGBD qui distingueraient les diverses acceptions de « null », mais comme c'était compliqué on y a finalement renoncé. C'est une faiblesse des SGBD relationnels, car à chacune de ces acceptions correspondent des contraintes de gestion différentes. Certaines bases de données sont aussi désertes qu'une plage anglaise en plein hiver, remplies (si l'on peut dire) de champs vides que l'on ne sait comment interpréter. Il s'agit là d'un point technique, moins important que les précédents – et rien n'est d'ailleurs sorti des nombreuses thèses de doctorat consacrées à ce sujet, modèles probabilistes à l'appui.


[1] On trouvera une description claire des SGBD dans Ramez Elmasri et Shamkant B. Navathe, Fundamentals of Database Systems, Addison Wesley 2003

[2] Pour les explorer j’ai bénéficié des remarques d’Isabelle Boydens.

[3] Voir W. Kent, Data and Reality. Basic Assumption in Data Processing Reconsidered, Elsevier North-Holland 1981.

[4] Dans sa Métaphysique, Aristote a renoncé à définir ce qu'est un acte et pour s'en expliquer il a préféré recourir à une liste d'exemples.

[5] Elle parle d’identifiant unique, d’attribut observé, d’attribut dérivé etc.