
Envoyé par
dba01
Je ne comprends pas ces complications pour désigner un compte bancaire. Il suffit d'utiliser simplement le RIB, qui contient déjà banque+guichet+compte : pas de doublon possible et tout en numérique.
Seul le RIB international, appelé IBAN, contient de l'alpha. Mais toujours sans doublon possible au niveau mondial.
Oui, mais... J’ai passé 25 ans de ma vie à expertiser et soigner des bases de données dont les tables étaient dotées de clés (primaires pour parler SQL) dont les éléments (colonnes) étaient composées d’attributs si-gni-fi-ca-tifs faisant qu’à un moment on se trouve coincé, au point d’avoir à tout remettre à plat : EAN8 dans la distribution, matricule des employés du genre les deux premiers caractères représentent le code du département dans l’entreprise, numéro SIREN des entreprises, numéro de téléphone (à 8 chiffres à l’époque) chez les opérateurs, l’ISBN des ouvrages, etc.
Imaginez une table des automobiles pour laquelle l’identifiant est constitué du numéro d’immatriculation selon l’ancien système : que faire en cas de changement de ce numéro (suite à un changement de propriétaire) répliqué dans plusieurs tables ? Sans parler du passage au nouveau système d’immatriculation...
Je répète ce qu’écrivait il y a 25 ans le grand Yves Tabourier (De l'autre côté de MERISE) :
« ... la fonction d'une propriété est de décrire les objets (et les rencontres), alors que l'identifiant ne décrit rien. Son rôle fondamental est d'être sûr de distinguer deux jumeaux parfaits, malgré des descriptions identiques.
L'expérience montre d'ailleurs que l'usage des « identifiants significatifs » (ou « codes significatifs ») a pu provoquer des dégâts tellement coûteux que la sagesse est d'éviter avec le plus grand soin de construire des identifiants décrivant les objets ou, pis encore, leurs liens avec d'autres objets... »
Il est capital d’utiliser des identifiants qui soient invariants et non significatifs, donc qui ne concernent en rien l’utilisateur : les attributs (colonnes) qui en seront dérivés au niveau SQL ne serviront essentiellement que pour les opérations relationnelles (jointure par exemple), toutes choses qui se passent sous le capot. Les données naturelles : à un seul endroit dans la base de données.
Je reprends l’exemple que j’utilise invariablement :
Les concepteurs d’un projet d’une grande banque avaient retenu le numéro SIREN des entreprises pour identifier celles-ci (attribut NoSiren de l’entité-type Entreprise). Au niveau SGBD, par le jeu des liens inter-tables (clé primaire - clé étrangère), le numéro Siren se propageait dans de nombreuses tables. Or, ce numéro est fourni par l’INSEE, lequel envoyait tous les mois les correctifs modifiant le Siren des nouvelles entreprises (10% d’entre elles à peu près). Les concepteurs en avaient tenu compte et me montrèrent le modèle correspondant à la mise à jour des tables impliquées : une usine à gaz ! J’avais fait observer que, vu le nombre de tables touchées et leur volumétrie (plusieurs millions de lignes chacune), cela pouvait faire exploser la production informatique (batchs de nuit), du fait d’une activité de mise à jour excessive et en plus, délicate à ordonnancer. Sans que j'ai eu à le leur demander, les concepteurs définirent une nouvelle propriété, non porteuse d’information, artificielle (non significative) et invariante, destinée à être l’attribut composant la clé primaire de la table Entreprise, propagé en conséquence dans les autres tables, en lieu et place de l’attribut NoSiren. A partir de là, modifier un numéro de Siren n’impactait plus que la seule table Entreprise, les utilisateurs ayant bien évidemment toujours accès au contenu de l’attribut NoSiren, devenu clé alternative (et n’ayant donc pas perdu sa propriété d’unicité).
Même si on admet que la structure du numéro SIREN a peu de chances d’évoluer en tant que tel, les corrections apportées avaient de quoi ficher la zoubia dans le système.
Pour les RIB et les IBAN, même punition, même motif : « Chef ! on s’est trompé pour le RIB d’untel ! » Résultat : n tables à mettre à jour, parce que le RIB sert pour la clé primaire, les clés étrangères et tout le toutim. Non et non. Le défi à nouveau : si une donnée change de valeur, une seule modification, dans une seule table.

Envoyé par
dba01
Ensuite, on a tout loisir d'attribuer un numéro d'ordre dans la compta de l'entreprise, un libellé alpha de la banque, du guichet, du type de compte, pour faire plus joli dans les restitutions, mais c'est une autre affaire.
Je note que seabs ne traite pas des comptes mais des banques. Mais peu importe, le problème de la « restitution » c’est effectivement une autre affaire, je dirais même que ça n’a aucun rapport avec ce qui nous concerne. Par exemple, une jointure naturelle de la table des comptes et de la table des banques pour récupérer le nom de celles-ci, c’est indépendant du système d’identification, sinon que l’identifiant de la table des banques lui aussi doit être non significatif et invariant.
Partager