Aller au contenu

Construire le modèle logique

Aussi en 28 langues

English · Español · 日本語 · Português (Brasil) · Français · Deutsch · Italiano · 한국어 · 简体中文 · Português (Portugal) · 繁體中文 · Bahasa Indonesia · Türkçe · Polski · Tiếng Việt · ไทย · Nederlands · العربية · עברית · Українська · हिन्दी · Русский · Svenska · Dansk · Norsk bokmål · Suomi · Español (México) · Deutsch (Schweiz)

Five different dog collars on pegs by a home's front door, each with its own blank metal tag, beside a leash, a brush and a water bowl.
Image générée par IA

Module 3 sur 6 du chapitre Modéliser les données pour leur sens, chapitre 2 du cours Data Architect. Chaque module se suffit à lui-même. Précédent : Dessiner les relations · Suivant : Mettre les données à leur place

La question à laquelle répond ce module : comment transformer un modèle conceptuel en modèle de données logique ?

Le modèle conceptuel nous a dit ce qui existe chez Steve Trucking et comment c’est lié : les partenaires distributeurs et leurs centres de distribution, les manifestes et les livraisons, les destinataires, les tournées et les arrêts, les équipes, les camions et les affectations d’équipe. C’est assez pour une conversation très productive avec le métier. Mais il me faut tôt ou tard plus de détails. Que devons-nous savoir sur une livraison ? Qu’est-ce qui distingue un centre de distribution d’un autre ? Comment identifions-nous un destinataire ? Qu’est-ce qui appartient à une affectation d’équipe plutôt qu’à l’équipe ou au camion ? Ces questions nous font passer d’un modèle conceptuel à un modèle de données logique, et nous ne construisons toujours pas Salesforce.

D’abord, retour aux chiens. Nous avons les boîtes et les traits. Maintenant, deux nouvelles questions : que savons-nous de chaque chose, et comment distinguer l’une de l’autre ?

Qu’est-ce qui la décrit ? Un chien a un nom et une date de naissance. Un propriétaire a un nom, un numéro de téléphone et une adresse. Un tour a un nom et une difficulté. Chaque fait va sur la boîte qu’il décrit.

Puis la jonction. Le niveau de Bella sur « Assis », et la date à laquelle elle l’a appris : est-ce que cela décrit Bella ? Pas tout à fait ; elle est meilleure sur certains tours que sur d’autres. Est-ce que cela décrit « Assis » ? Non ; chaque chien fait « Assis » différemment. Cela décrit Bella et « Assis » ensemble, donc cela a sa place sur le Tour du chien : le niveau de maîtrise et la date d’apprentissage. C’est pour cela que la jonction existe : certains faits n’appartiennent qu’à la paire.

Quel chien est lequel ? Essayez d’abord le nom. Il y a beaucoup de chiens qui s’appellent Max, donc le nom n’est pas unique. Le numéro de téléphone du propriétaire ? Marcus a deux chiens sur le même téléphone, les gens changent de numéro, et ce sont les données personnelles de quelqu’un, qui seraient copiées dans chaque système qui pointe un jour vers un chien. Le numéro de puce électronique a l’air mieux : il est unique, et il ne change pas. Mais un chiot qui vient d’arriver n’est peut-être pas encore pucé, et une clé ne peut pas être vide. Donc la puce reste, comme quelque chose sous lequel le chien est aussi connu, et le chien reçoit son propre ID du chien : un numéro qui fait un seul travail ennuyeux, distinguer un chien d’un autre.

Le modèle des chiens avec clés et attributs Le modèle des chiens en modèle de données détaillé. Chaque boîte liste son ID d'enregistrement et quelques champs. Propriétaire : ID du propriétaire, nom, téléphone, code postal, ville. Éleveur : ID de l'éleveur, nom, ville. Chien : ID du chien, aussi connu par son numéro de puce électronique, l'ID du propriétaire et l'ID de l'éleveur, nom, date de naissance. Race, pas encore reliée : ID de la race, nom, taille. Tour : ID du tour, nom, difficulté. Tour du chien, entre Chien et Tour : ID du tour du chien, l'ID du chien et l'ID du tour, niveau de maîtrise, date d'apprentissage. Évaluation de tour, sous Tour du chien : son ID, l'ID du tour du chien, date, niveau de maîtrise, évalué par. Les traits sont les mêmes qu'avant : un propriétaire possède des chiens, un éleveur élève des chiens (un chien a zéro ou un éleveur), un chien connaît des tours du chien, un tour est connu dans des tours du chien, et un tour du chien est évalué dans des évaluations de tour. possède élève connaît est connu dans est évalué dans Propriétaire ID du propriétaire ID D'ENREGISTREMENT Nom Téléphone ZIP Ville Éleveur ID de l'éleveur ID D'ENREGISTREMENT Nom Ville Chien ID du chien ID D'ENREGISTREMENT Numéro de puce électronique AUSSI APPELÉ ID du propriétaire ID de l'éleveur Nom Date de naissance Race ID de la race ID D'ENREGISTREMENT Nom Taille Tour du chien ID du tour du chien ID D'ENREGISTREMENT ID du chien ID du tour Niveau de maîtrise Date d'apprentissage Tour ID du tour ID D'ENREGISTREMENT Nom Difficulté Évaluation de tour ID de l'évaluation de tour ID D'ENREGISTREMENT ID du tour du chien Date Niveau de maîtrise Évalué par exactement un zéro ou un un ou plusieurs zéro ou plusieurs © 2026 Twinshark LLC · stevetecharc.com
Click to enlarge

Ce sont les mêmes questions que nous allons maintenant poser à Steve Trucking, et les raisons pour lesquelles le nom, le téléphone et la puce ne suffisent pas deviennent une règle que je tiens depuis des années.

Le conceptuel me dit ce qui existe ; le logique me dit ce que cela signifie en tant que données

Section intitulée « Le conceptuel me dit ce qui existe ; le logique me dit ce que cela signifie en tant que données »

Prenez le camion. Que dois-je savoir sur un camion ? Peut-être son numéro de parc, son numéro d’identification (VIN), sa marque, son modèle, son année, sa plaque d’immatriculation, son kilométrage actuel et son statut. Ce sont des attributs du camion.

Prenez maintenant la livraison. Peut-être le numéro de commande du partenaire distributeur, la date de livraison, le créneau promis, l’heure d’arrivée réelle, le statut, et si elle comprend une installation ou un enlèvement. Encore des attributs.

Le modèle conceptuel nous a dit que la livraison existe. Le modèle logique commence à nous dire ce qu’une livraison signifie en tant que données. Une boîte simple comme Camion ou Livraison peut représenter tout un ensemble de champs.

Des boîtes aux entités avec attributs Trois boîtes conceptuelles à gauche (Camion, Livraison, Centre de distribution), chacune reliée par un trait « devient » à une entité logique à droite qui liste ses attributs. Camion : numéro de parc, VIN, marque, modèle, année du modèle, plaque d'immatriculation, kilométrage actuel, statut. Livraison : numéro de commande du partenaire, date de livraison, créneau promis, arrivée réelle, statut, avec installation, avec enlèvement. Centre de distribution : nom, adresse, marché, téléphone. CONCEPTUEL : CE QUI EXISTE LOGIQUE : CE QUE C'EST EN DONNÉES devient devient devient Camion le véhicule Camion Numéro de parc VIN Marque Modèle Année du modèle Plaque d'immatriculation Kilométrage actuel Statut Livraison une commande pour un destinataire Livraison Numéro de commande du partenaire Date de livraison Créneau promis Arrivée réelle Statut Avec installation Avec enlèvement Centre de distribution d'où partent les livraisons Centre de distribution Nom Adresse Marché Téléphone La plupart de nos schémas gardent la simple boîte : les champs se multiplient, vieillissent et portent des détails (nom d'API, étiquette, type, longueur). © 2026 Twinshark LLC · stevetecharc.com
Click to enlarge

Malgré tout, dans la plupart de nos schémas, les boîtes restent simples, pour trois raisons. Le nombre de champs augmente. Les champs deviennent vite obsolètes. Et chaque champ a des détails difficiles à montrer dans un modèle d’objets : son nom d’API, son étiquette, son type de données et sa longueur. Ces détails seront bien sûr consignés, mais pas dans le premier modèle de données. Quand montrer quelques champs clés aide vraiment à raconter l’histoire, je dessine un modèle de données détaillé : une tranche ciblée, avec seulement les champs qui comptent pour le propos.

Voici une question simple que j’utilise quand je regarde un attribut : qu’est-ce que cela décrit ? La marque du camion décrit clairement le camion. Mais qu’en est-il du nom des membres de l’équipe sur une livraison ? Décrivent-ils la livraison ? Ou décrivent-ils une équipe, qui avait une affectation, qui couvrait la tournée, qui comprenait cet arrêt ?

C’est là qu’un modèle de données commence à révéler des choses qui paraissent parfaitement raisonnables à l’écran. Un coordinateur dit : « Je veux voir le nom de l’équipe sur la livraison. » C’est une exigence d’expérience utilisateur valable. Ce n’est pas forcément une exigence de stocker le nom de l’équipe sur la livraison. Ce sont deux choses différentes, et nous y reviendrons avec la normalisation. Pour l’instant, prenez l’habitude de demander quelle chose ce fait décrit réellement. Cette question vous évitera bien des problèmes.

Ensuite, il faut parler des identifiants uniques

Section intitulée « Ensuite, il faut parler des identifiants uniques »

Les attributs décrivent les choses. Mais il y a un autre problème à résoudre : comment savoir quelle chose est laquelle ?

Deux destinataires s’appellent John Smith. Est-ce la même personne ? Peut-être, peut-être pas. Un nom ne suffit pas. Une adresse ? Les gens déménagent. Les numéros de téléphone changent. Les adresses courriel changent. Même le nom d’un partenaire distributeur peut changer.

Cela nous amène aux clés : ce qui nous permet d’identifier de façon unique quelque chose dans notre modèle. C’est un domaine sur lequel je me suis forgé une opinion assez tranchée au fil des ans. Pour un identifiant, je veux quatre choses :

Unique. Immuable. Sans signification. Jamais une donnée personnelle.

Unique. Un identifiant doit identifier exactement une chose. Si deux livraisons peuvent avoir la même valeur, ce n’est pas un identifiant de livraison fiable. Les noms ne sont généralement pas uniques, les adresses pas forcément, et les numéros de téléphone sont partagés. Même des valeurs qui paraissent uniques aujourd’hui peuvent ne plus l’être une fois qu’on a assez de données. Alors demandez : deux de ces choses peuvent-elles jamais avoir la même valeur ? Si la réponse est oui, soyez très prudent avant de l’utiliser comme ID unique de l’enregistrement.

Immuable. Celle-ci est souvent oubliée. Si nous identifions un partenaire distributeur par son nom et qu’il change de nom, avons-nous un nouveau partenaire ? Non. L’entité métier est restée la même ; l’un de ses attributs a changé. L’ID unique d’un enregistrement doit survivre aux changements de la chose qu’il identifie, ce qui exclut les noms, les adresses courriel, les numéros de téléphone, les adresses et les noms d’utilisateur, aussi pratiques qu’ils paraissent quand on commence à construire un système.

Sans signification. Cela paraît étrange la première fois qu’on l’entend. Pourquoi voudrais-je qu’un identifiant n’ait pas de sens ? Parce que le sens change. Imaginez que quelqu’un construise un ID de livraison qui encode le centre, le partenaire distributeur, la date de livraison et un numéro de séquence : PHX-KEY-20261002-0042. Ça a l’air astucieux. Puis le destinataire reporte au vendredi. Changeons-nous l’identifiant ? Si non, il nous ment. Si oui, nous avons changé l’ID unique de la livraison parce que l’un de ses attributs a changé, et chaque système qui avait stocké l’ancien ID vient de la perdre de vue. L’identifiant essayait de faire deux métiers : identifier la livraison et la décrire. Je préfère laisser les attributs la décrire et laisser l’identifiant faire un seul métier ennuyeux : l’identifier. Les identifiants ennuyeux sont de bons identifiants.

Jamais une donnée personnelle. Celle-ci est assez importante pour que je la garde à part. N’utilisez pas d’informations personnelles identifiantes comme identifiant juste parce qu’elles paraissent uniques. Chez Steve Trucking, il est tentant de reconnaître un destinataire à son numéro de téléphone. Mais une clé est copiée partout où des systèmes doivent relier des enregistrements : intégrations, exports, journaux, fichiers de statut renvoyés aux partenaires distributeurs, entrepôt de données, données de test. Faites d’un numéro de téléphone la clé, et vous avez répandu les données personnelles d’un destinataire dans toute l’architecture.

Une clé doit aussi être présente sur chaque enregistrement : jamais nulle ni vide. Si certaines personnes ne veulent pas, ou ne devraient pas avoir à, vous donner une valeur, cette valeur ne peut pas être la clé. C’est pourquoi les systèmes émettent leurs propres identifiants internes, et les données personnelles, si vous en avez besoin, deviennent un attribut protégé.

Ma règle est donc : unique, immuable, sans signification, jamais une donnée personnelle.

Les spécialistes des bases de données ont des noms pour une partie de tout cela. Une clé naturelle existe déjà dans les données métier : le VIN d’un camion en est un bon exemple. Notre application ne l’a pas inventée, et elle a déjà un sens. Une clé de substitution est créée spécifiquement pour identifier l’enregistrement ; elle ne décrit rien, elle identifie, c’est tout.

Dans la plupart des architectures, je préfère une clé de substitution comme ID interne de l’enregistrement, et je garde les identifiants naturels importants comme attributs. Cela ne rend pas les identifiants naturels mauvais ; ils sont souvent extrêmement importants. Simplement, je n’en fais pas automatiquement l’ID unique de l’enregistrement. Demandez ce qui se passe si la valeur est corrigée, reformatée, remplacée, réutilisée, manquante, ou si elle arrive de plusieurs systèmes sources. C’est là qu’une décision d’apparence simple devient une décision d’architecture.

Une chose peut avoir plusieurs identifiants utiles

Section intitulée « Une chose peut avoir plusieurs identifiants utiles »

L’ID interne de l’enregistrement n’est pas forcément l’identifiant que tous les autres systèmes utilisent. Steve Trucking peut identifier une livraison en interne avec un ID généré. Chaque partenaire distributeur connaît la même livraison par son propre numéro de commande : Keystone dans son manifeste CSV, Redrock dans son API, Brightwave dans ses messages EDI. Et les huit ans d’historique de RouteDesk, l’ancien outil de répartition, utilisent les propres ID de livraison de RouteDesk.

Ces identifiants comptent. Nous devons les conserver et les faire correspondre correctement, car une mise à jour de statut doit repartir vers chaque partenaire sous son numéro. Mais ils n’ont pas tous à devenir l’ID unique de la livraison. « Quel est son ID ? » peut avoir plus d’une réponse, et l’architecte doit savoir quel ID fait foi dans quel contexte. Nous y reviendrons avec les données de référence et l’intégration.

Les relations dépendent des identifiants uniques

Section intitulée « Les relations dépendent des identifiants uniques »

Revenez maintenant aux traits que nous avons dessinés. Un manifeste liste des livraisons. Un destinataire reçoit des livraisons. Une équipe a des affectations d’équipe. Ces relations ne fonctionnent que parce que nous pouvons identifier de façon fiable les choses aux deux extrémités.

Voici où cela fait mal chez Steve Trucking. Un partenaire distributeur révise son manifeste le jour même : une commande annulée, un article remplacé, une nouvelle adresse. Si nous ne pouvons pas faire correspondre la ligne révisée à la livraison que nous avons déjà, par le numéro de commande du partenaire, nous créons une deuxième livraison pour le même réfrigérateur, et une équipe risque de se présenter deux fois. Boîtes, attributs, clés et relations ne sont pas des idées séparées. Ce sont toutes des parties du même modèle.

Un modèle de données détaillé et ciblé Un modèle de données détaillé et ciblé pour Steve Trucking, en trois groupes. Chaque entité liste son ID d'enregistrement (un ID unique interne généré), tout autre ID sous lequel elle est connue, et quelques champs clés. Le partenaire distributeur (nom, adresse de facturation, statut) exploite des centres de distribution et envoie des livraisons. Une livraison est aussi connue par le numéro de commande du partenaire et l'ID de livraison RouteDesk ; elle est livrée à un destinataire (nom, adresse, téléphone, courriel), part d'un centre de distribution (nom, adresse, marché) et contient des articles de livraison (produit, quantité, avec installation). Une équipe assure des affectations d'équipe, et un camion (aussi connu par son VIN et son numéro de parc) est utilisé dans des affectations d'équipe, qui ont une date de début et une date de fin. DONNÉES CLIENT DONNÉES TRANSACTIONNELLES DONNÉES DE RÉFÉRENCE exploite envoie livrée à part de contient assure utilisé dans Partenaire distributeur ID du partenaire distributeur ID D'ENREGISTREMENT Nom Adresse de facturation Statut Destinataire ID du destinataire ID D'ENREGISTREMENT Nom Adresse Téléphone E-mail Livraison ID de la livraison ID D'ENREGISTREMENT Numéro de commande du partenaire AUSSI APPELÉ ID de livraison RouteDesk AUSSI APPELÉ Date de livraison Créneau promis Statut Article de livraison ID de l'article de livraison ID D'ENREGISTREMENT Produit Quantité Avec installation Affectation d'équipe ID de l'affectation d'équipe ID D'ENREGISTREMENT Date de début Date de fin Centre de distribution ID du centre de distribution ID D'ENREGISTREMENT Nom Adresse Marché Équipe ID de l'équipe ID D'ENREGISTREMENT Nom Statut Camion ID du camion ID D'ENREGISTREMENT VIN AUSSI APPELÉ Numéro de parc AUSSI APPELÉ Marque Modèle Plaque d'immatriculation Statut exactement un zéro ou un un ou plusieurs zéro ou plusieurs © 2026 Twinshark LLC · stevetecharc.com
Click to enlarge

À ce stade, vous pensez peut-être : « Salesforce donne un ID à chaque enregistrement. » C’est exact, et nous y viendrons. Si les données vivent dans Salesforce, chaque enregistrement reçoit un ID généré par Salesforce. Il est cryptique et difficile à lire, donc nous exposons généralement aussi un champ d’ID utilisable par les gens, comme un numéro de livraison D-000184227, un champ à numérotation automatique. Les gens pensent souvent que ce numéro est l’ID de l’enregistrement, mais ce n’est pas le cas : l’ID Salesforce est toujours là en dessous. Un système externe ou une base de données, Oracle ou SQL Server, a aussi ses propres ID uniques. Mais l’architecture peut finir par inclure Salesforce, l’ERP financier, Snowflake, Data 360, les systèmes des partenaires et des systèmes qui n’existent pas encore. Le modèle logique décrit les données métier sans faire dépendre chaque décision d’une seule technologie. La façon dont Salesforce le met en œuvre physiquement est une étape ultérieure.

Quand je transforme un modèle conceptuel en modèle logique, je décide :

  • Quels attributs décrivent réellement chaque entité.
  • Comment chaque entité est identifiée de façon unique, et si cet identifiant est assez stable pour être son ID unique.
  • Quels identifiants métier (numéros de commande des partenaires, anciens ID) doivent être conservés et mis en correspondance.
  • Si des informations sensibles sont utilisées comme clé.
  • Si les relations relient les entités par des ID uniques fiables.

Nous avons maintenant des entités, des relations, des attributs et des ID uniques : les débuts d’un vrai modèle de données logique. Mais il reste un problème. Il est très facile de mettre des données parfaitement valides au mauvais endroit. C’est là qu’intervient la normalisation.