Une erreur hélas très courante est de désigner par le terme relation un lien entre deux tables, comme par exemple une contrainte d’intégrité référentielle ou une jointure. Mais d’où vient cette confusion ?
Les bases de données relationnelles reposent sur l’algèbre relationnelle inventée dans les années 70 par Frank Edgar Codd alors chercheur chez IBM. L’algèbre relationnelle est une branche des mathématique proposant des objets porteurs de données dits « relation » associés à des opérations (union, intersection, différence, jointure…).
Une relation au sens mathématique du terme est un objet conteneur de données qui est caractérisé par :
– un nom, par exemple la relation « client », la relation « commande », la relation « automobile », la relation « employé »…
– un ensemble d’attributs ayant chacun un nom et un domaine, par exemple le nom de famille, la date de naissance, le matricule, le n° de sécurité sociale pour une relation « employé »
– une clef, c’est à dire un ensemble d’attributs dont les valeurs sont toujours distinctes de ligne en ligne afin de retrouver une ligne unique au sein de la relation. Par exemple le matricule pour la relation employé, la marque + le modèle pour la relation automobile.
Notons que le domaine exprime l’ensemble des valeurs que peut prendre un attribut. Par exemple de 0 à 100 pour un attribut exprimant un pourcentage, supérieur ou égal à 0 pour un prix, combinaison des lettres de A à Z pour un nom, etc…
Au niveau de la base de données, une relation est traduite en table.
Nous pouvons dire donc que :
RELATION = TABLE !
Une erreur commune est de penser que relation signifie lien entre une table et une autre.
En fait cette erreur très commune vient de la traduction du terme association. En effet dans les travaux de Peter Chen, père de la conception des modèles relationnels, on trouve un article fondateur intitulé : « The Entity Relationship Model – Toward A Unified View of Data » visible à http://www.csc.lsu.edu/~chen/pdf/erd-5-pages.pdf.
Chen propose de modéliser les bases de données relationnelles à l’aide d’association (qui est la traduction de relationship). C’est là que vient l’erreur, savamment entretenue depuis de nombreuses années par des articles plus ou moins corrects…
Et la plupart des jeunes développeurs parlent malheureusement de relations en lieu et place de la notion de contrainte d’intégrité référentielles qui renforce la notion de clef étrangère qui sont les outils pour lier les relations (tables) entres elles par des liens sémantiques.
Exemple : client (relation) |===| passe (association) |===| commande (relation).
Désormais, sachez causer relationnel !
—
Frédéric BROUARD, Spécialiste modélisation, bases de données, optimisation, langage SQL.
Le site sur le langage SQL et les S.G.B.D. relationnels : http://sqlpro.developpez.com/
Expert SQL Server http://www.sqlspot.com : audit, optimisation, tuning, formation
* * * * * Enseignant au CNAM PACA et à l’ISEN à Toulon * * * * *
Fred, du temps où tu utilisais toi-même le terme de relation à l’encontre du dogme, quels soucis techniques cela t’a-t-il causés ?
Une certaine confusion mentale de mes auditeurs, qu’ils soient étudiants ou bien professionnels !
A +
« Relation » a tout bêtement deux acceptions pertinentes en base de données : table, et lien. L’important, c’est de ne pas mélanger les concepts, d’utiliser le vocabulaire choisi de manière consistante et d’expliciter les conventions.
Sorti de là , tout le reste n’est qu’acribologie gratuite (traduire par « détruire le fondement des drosophiles »).
Si je choisis de désigner une table par le terme « relation » (sous-ensemble du produit cartésien des domaines concernés), il est bien évident que je dois consacrer un autre mot pour désigner les liens, d’où le choix de « association ».
Mais si j’appelle systématiquement une table « table », le mot « relation » est alors disponible pour désigner les liens, et c’est tout aussi compréhensible et correct.
Fred, du temps où tu utilisais toi-même le terme de relation à l’encontre du dogme, quels soucis techniques cela t’a-t-il causés ?
Et oui, même moi, je me suis laissé prendre au piège de la facilité qui consiste à nommer relation un lien alors que c’est sémantiquement vrai, mais mathématiquement faux !!!
Quant à la définition de la table elle garde tout son intérêt car il existe bien des tables dites « de jointure » notamment présent lors de cardinalité n:m entre deux entités…
A +
Bonjour sqlpro
Merci pour vos excellents tutoriaux.
A propos de ce poste.
Dans votre article du 26/08/2003 intitulé : « Voici quelques définitions en usage dans l’univers des SGBDR et du SQL ».
http://sqlpro.developpez.com/cours/definitions/
Votre définition de Relation est : « Lien logique entre deux entités, représenté dans l’univers des SGBDR par l’insertion d’une clef étrangère ou par l’utilisation d’une table de jointure. »
Et non pas comme vous le dite maintenant. Est-ce que la définition n’est plus valable ?
De même, vous définissez Table par : « Ensemble de données relatives à un même concept, ou permettant de lier d’autres tables ».
Même question ?
Merci encore pour vous excellents articles.
Zardoz4
Parler de schéma Entité Relation est encore un bel exemple de mauvaise traduction. Le terme anglais Entity-Relationship (voir l’article fondateur de Peter Chen sur cette technique) ne doit pas être traduit ainsi. En effet « relationship » signifie « lien » (de parenté) dans son étymologie la plus stricte… Rien à voir encore une fois avec une relation au sens de Codd !
En fait le terme « Entity Relationship Model » a été traduit en français par « Modèle Entité Association ».
Bonjour,
On parle souvent de schéma Entités-Relation pour le Modèle Conceptuel des Données.
Dans ce MCD, on décrit des entités et des relations entre ces entités.
Ensuite, lorsqu’on traduit le MCD en MLD (Modèle Logique des données), les « relations » du MCD soient « disparaissent » (migration de la clé pour les relations 1-n), soient sont transformés en table (relation n-m) … ce qu’exprime ton égalité.
Est-ce que la confusion ne viendrait pas également de là ? par abus de langage bien évidemment ? en parlant de relation à la fois pour ce qui relie « les blocs » des schémas (Entités dans le MCD et Tables dans le MLD)
Lorsqu’on prend le temps de s’arrêter sur le vocabulaire, il devient évident qu’il est abusif de parler de relation pour les liens entre tables alors que certaines expriment elle même une relation entre entités.