Pourquoi éviter les doublons dans une base de données ? 

Pour plusieurs raisons :

  • Nous sommes foncièrement fainéants, nous n'aimons pas effectuer plusieurs fois la même tâche ;
  • Cela prend du temps à saisir toutes ses informations ;
  • C'est source d'erreur ;
  • Le jour où il faut mettre à jour l'information, il faut la modifier à tous les endroits où elle est stockée.

Les liens relationnels, qui mettent en relation les tables d'une base de données, permettent de stocker l'information à un endroit et un seul. La réalisation d'une base de données relationnelles c'est l'art d'organiser l'information.

Si nous prenons l'exemple d'une base de contacts professionnels, où l'on souhaite par exemple avoir une fiche par société et une fiche par contact. Précisons un peu plus les choses : un contact est rattaché à une société et une seule, et une société peut avoir plusieurs contacts. Nous avons donc le schéma relationnel suivant :

Le lien relationnel entre la table SOCIÉTÉS et la table CONTACTS, permet, entre autres :

  • De connaître les coordonnées de la société pour laquelle travaille le contact ;
  • De mettre à jour simplement les coordonnées de la société, en un seul endroit (la table SOCIÉTÉS) et en une seule fois.

Qui n'a pas réalisé en son temps une base de données avec une seule table où chaque enregistrement correspond à un contact, comme ceci :

Ce qui pose problème dès lors que la société change de coordonnées. Il faut partir à la recherche de tous les contacts pour mettre à jour, enregistrement par enregistrement, les informations modifiées. Il faut en plus être très vigilant, éviter des erreurs à la saisie... Bref un travail titanesque. Voilà pourquoi les liens sont utiles, on crée une table regroupant toutes les informations propres à la SOCIÉTÉ, ce qui nous permet d'avoir un enregistrement par société, on réduit le nombre de rubriques dans la table CONTACTS et on obtient le schéma relationnel présenté plus haut.

Qu'est-ce que la référence externe vient faire là ?

La référence externe est une option d'entrée automatique de rubrique. Mais avant d'en parler, prenons un deuxième exemple : celui de la facturation.

Une FACTURE peut avoir plusieurs LIGNES DE FACTURATION. Sur une LIGNE DE FACTURATION, il ne peut y avoir qu'une seule référence de PRODUIT. Un PRODUIT (une référence de produit si vous préférez) peut se retrouver sur plusieurs LIGNES DE FACTURATION. Et une LIGNE DE FACTURATION appartient à une FACTURE et une seule. Nous obtenons le schéma relationnel classique suivant :

Et tout va pour le mieux dans le meilleur des mondes...

Que se passe-t-il lorsque nous souhaitons augmenter le prix des produits ? Dans le cas présent, une modification du PRIX UNITAIRE des PRODUITS modifie l'ensemble des LIGNES DE FACTURATION, donc par conséquence les FACTURES ! Il ne faut pas oublier qu'une fois la facture établie, elle ne doit plus être modifiable, c'est une pièce comptable !

Il faut donc pouvoir figer le prix unitaire des produits lors de leur saisie dans une facture. Pour pouvoir figer le prix unitaire, il faut donc stocker sa valeur lors de saisie de la facture. Pour cela nous n'avons pas d'autre moyen que de stocker le prix unitaire dans une rubrique de la table LIGNES DE FACTURATION.

La rubrique PRIX UNITAIRE de la table LIGNES DE FACTURE est de type nombre et a une option d'entrée automatique de type référence externe. Cette option permet la « récupération » d'une valeur de rubrique suivant un lien, ou plus simplement : elle permet de copier-coller une valeur. Voici d'ailleurs la définition de cette rubrique :

Les deux options, Démarrage par la table et Référence externe à partir d'une table liée, définissent le contexte, c'est-à-dire quel chemin doit prendre FileMaker Pro pour aller récupérer la valeur.

Une fois la valeur récupérée, elle est stockée dans la rubrique. Ce qui permet de la « figer », donc de figer la facture et d'éviter toute modification de cette dernière si l'on modifie le prix unitaire des produits. Cela permet aussi de modifier le prix unitaire sur une facture, sans que cela le modifie dans la table PRODUITS, si vous souhaitez appliquer un prix « à la tête du client » !

Si vous avez aussi besoin de figer la désignation du produit, il faut là encore créer une rubrique dans la table LIGNES DE FACTURES avec une référence externe.

Rappelez-vous de ceci : dès que vous avez besoin de figer une valeur à un instant t, utilisez l'option référence externe en entrée automatique.

Ce fonctionnement occasionne bien évidemment des doublons, mais ceci est nécessaire à l'exploitation des données.

Un petit souvenir de l'ancien temps...

Pour celles et ceux qui se souviennent des versions antérieures à FileMaker Pro 3, c'était, à l'époque, la seule option possible pour récupérer une valeur d'un autre fichier. Nous n'avions dans ces anciennes versions que la possibilité d'avoir 1 table par fichier et aucun lien relationnel... À la belle époque ;-)

Pour celles et ceux qui se souviennent des versions 3 à 6, la référence externe était une des possibilités qui nous permettait d'obtenir une valeur d'un fichier de troisième niveau. Car dans ces versions, si un fichier A était lié à un fichier B lui-même lié à un fichier C, si A devait voir ou utiliser une valeur de C, on utilisait une référence externe dans B... À la belle époque là encore ;-)

C'est tout pour aujourd'hui

Je vous laisse méditer sur le sujet, en attendant le prochain... Si vous souhaitez que j'aborde un point ou un sujet en particulier, n'hésitez pas en m'en faire part. En attendant, je vous souhaite une excellente fin de semaine.