Oui. N’oubliez pas qu’au niveau opérationnel, disons SQL, la clé primaire de la table DOCUMENT sera recopiée dans la table OPERATION. Au-delà du problème de l’invariance du nom (ce que nous ne maîtrisons pas), il n’est pas mauvais de penser à la performance du système opérationnel, même si ça n’est pas une préoccupation conceptuelle.
Vous me direz que vous ne gérez pas cent millions de documents, mais un jour vous aurez peut-être affaire à des trames téléphoniques et autres et alors vous vous souviendrez probablement de cet échange...
Pour mémoire, si vous aviez cent millions de trames à gérer, avec disons la structure de votre table DOCUMENT, avec le SGBD DB2, celle-ci occuperait environ 16,3 GO (Gigaoctets), ce à quoi on ajoutera 15,9 GO pour l’index primaire sur le nom, mais il faut voir que chaque accès physique à un enregistrement de la table représentera 6 accès au disque, au lieu de 4 si la clé l’index primaire était un INTEGER (au lieu d’une quarantaine d’octets en moyenne) et un accès au disque c’est gourmand. Et comme il faut voir un peu plus loin, le cas de la table DOCUMENT_SOURCE est encore plus préoccupant : en supposant qu’en moyenne on ait 3 occurrences par document, la table occuperait 16,9 GO (40 octets pour NomDocument + 4 octets pour NumOperation) (au lieu de 5 GO en remplaçant les 40 octets par 4 octets). Quant à l’index primaire de cette table, n’en parlons pas, ou plutôt si : 45,8 GO sur 6 niveaux au lieu de 5 GO sur 4 niveaux.
Vous me rétorquerez qu’aujourd’hui le stockage sur disque n’est pas aussi onéreux qu’hier, mais il y a quand même l’encombrement de la mémoire à l’occasion des entrées/sorties, et si en plus vous avez 1000 tables, ça deviendra un problème terrible, pendant que le marchand de disques, de mémoire et de serveurs se frottera les mains...
Autrement dit, il est des principes qu’il vaut mieux ne pas oublier, notamment l’invariance des clés primaires et la parcimonie.
Partager