Logique formelle et fer à souder
Citation:
Envoyé par
Waldar
Sortons des concepts logiciens et soyons pragmatiques avec une situation réelle.
Un de vos fournisseurs vous envoie ses ventes facturées et un jour, pour une raison X ou Y, erreur de batch, erreur d'applicatif en amont, il ne vous envoie pas de code client associé.
Que faites-vous ?
Si cela ne vous ennuie pas, ne faisons pas d’amalgame, restons au niveau (formel) du sujet traité, à savoir celui de l’intégrité référentielle. Je ne bricolerai en aucune façon la structure de la base de données (et a fortiori le MCD ou le DC) pour des aspects contingents, qui concernent la Production informatique (erreur dans l’enchaînement des batchs) et les Études (erreur de l’applicatif). Le principe est de rejeter les anomalies et d’utiliser les circuits et mécanismes prévus de correction des erreurs, toutes choses définies et décrites dans les dossiers de conception et de production. Ça n’est quand même pas a posteriori que je vais inventer une procédure de rattrapage du genre absence du code client associé aux factures du jour. Tant pis si les tableaux de bord arrivent en retard sur le bureau de ces messieurs et si les informaticiens se font taper sur les doigts (ça m'est arrivé...)
l'intégrité référentielle sur le terrain
Défense et illustration de l'intégrité référentielle.
Quitte à me répéter, je reprends une fois encore un échantillon d'expériences que j'ai vécues chez ceux qu'on appelle les "grands comptes".
Peut-on faire l'impasse sur le contrôle de l'intégrité référentielle par le SGBD ? Demander à l’application de garantir l’intégrité des données suffit-il ?
Dans le cas des applications traditionnelles de gestion, mais néanmoins centrales, vitales, dans le monde des entreprises telles que les banques, les sociétés d’assurance, les caisses de retraite, dans la distribution, l’industrie, les administrations, etc., la réponse est non, car il peut en résulter de très sérieux dommages. A suivre, quelques péripéties dans lesquelles j’ai trempé, dépêché par mon entreprise (une SSII).
Il était une banque où je fus appelé pour tenter de rétablir les liens entre les tables des comptes, des contrats, des clients, etc. La cata. J’ai tout tenté pour remettre les choses d’aplomb. Le Président lui-même me posait tous les matins la même question dans laquelle l’angoisse était à peine voilée : « Alors ? mes en-cours ? » Peine perdue. La banque n’existe plus.
Une société d’assurance. Pour le DSI, la base de données Clients c’était du béton : « Je n’ai jamais entendu parler de quelque problème que ce soit, tout baigne ». J’étais alors chargé de valider un modèle conceptuel de données et le modèle logique dérivé, ceci pour une autre base, alimentée à partir des données de production. Ayant mis en œuvre l’intégrité référentielle pour la nouvelle base, ce qui devait arriver arriva, ce fut un révélateur : 30% de données rejetées lors de la « remontée » dans la base toute neuve. Le DSI verdit et il fallut plus d’un an pour arriver à remettre la base Clients à peu près d’équerre.
Une société de crédit automobile. Pour valider une application en cour de refonte, j’avais été autorisé à copier les données de production. Je fus obligé de porter le pet au plus vite, car il y avait quelques milliers de contrats faisant référence à des clients inconnus au bataillon. Panique à bord, tout le monde sur le pont... Après enquête, il s’est avéré que, suite à un incident matériel en production, il y avait eu une restauration des données Clients/Contrats, mais à partir d’une sauvegarde des clients ayant eu lieu à une date n’ayant rien à voir avec la date de sauvegarde des contrats. Heureusement, il y avait un an de backup en magasin et le coup put être rattrapé. (Le SGBD n’était pas relationnel. Il a par la suite été remplacé par DB2, lequel aurait tout de suite détecté le décalage des sauvegardes.)
Une caisse de retraite. Un décideur (fonctionnel) décide de faire débrancher l’intégrité référentielle pour une partie de la base de données. Prudent, je recopie les tables de production dans un environnement qu’on m’a affecté, j’écris toutes les requêtes SQL pour vérifier (de nuit, car il est hors de question de pomper du temps machine pendant la journée) que les tables impliquées sont restées cohérentes suite à traitement diurne. Au résultat, ça n’a pas traîné : je constate que 780000 périodes passées par les cotisants dans les entreprises se sont envolées (peut-être étaient-ce les vôtres ?) Traitements à refaire, avec ordre cette fois-ci du décideur de brancher l’intégrité référentielle. Qu’est-ce qu’il ne faut pas faire pour que les gens comprennent...
Et j’en ai bien d’autres...
Il faut être vraiment naïf pour croire que les contrôles d’intégrité assurés par programme permettent de dormir sur ses deux oreilles. Après tout, dans la série « ceinture, bretelles et épingle à nourrice », si vous avez un DBA sous la main, tout en laissant l’application consciencieusement contrôler ce qu’elle à a à contrôler, demandez donc à ce spécialiste de mettre en œuvre l’intégrité référentielle, au moins pour les tables les plus sensibles, ou (si le chef refuse), de développer et exécuter les requêtes permettant d’auditer le contenu des tables.
Par référence aux trois petits cochons, il faut préférer construire une maison en briques plutôt qu’en paille et implanter l’intégrité référentielle. Attention au loup.