Bonjour tout le monde.
On m’a demandé de réécrire un logiciel sur base d’un vieux truc qui a été développé en Access et je me pose une question de conception pour la DB car j’ai moins d’expérience dans ce domaine.
Dans le vieux logiciel, une commande porte un numéro L + 1 lettre selon le type de commande + 5 chiffres. Cela donne un numéro de commande unique.
De même un client est identifié par un numéro unique qui commence par 7 et qui est suivi de 6 chiffres.
Pour moi, ces informations peuvent servir d’ID et devenir une PK.
Néanmoins l’ancien concepteur a créé dans chacune des tables une colonne d’ID auto incrémenté et en a fait la PK et il fait ses relations sur base de cet ID.
De mon point de vue, ce qu'il fait est inutile vu que les 2 autres informations existent mais j’en ai parlé avec un ami et il n’est pas d’accord avec moi. Pour lui, je le cite : « ne jamais utiliser un ID externe a la db pour identifier un reccord, de plus pour mettre tes indexs c'est mieux sur des id gérés par la DB, j'aurais fait pareil sans hésiter ».
Donc voilà, j’aurais souhaité avoir l’avis d’autres personnes sur le sujet.
Une chose que je vois quand même qui pourrait justifier le fait de créer l’ID en plus. Ça serait pour optimiser la taille de la base. En effet, au vu de ce que j’ai comme identifiant de colonne, j’aurais :
- une colonne char(7) pour les commandes stockée sur 7 bytes si je ne me trompe pas
- une colonne int pour les clients stockée sur 4 bytes si je ne me trompe pas
Alors qu’avec un id auto incrémenté, je pourrais stocker ça dans des small int, stockés sur 2 bytes.
Ça permettrait de gagner un peu de place mais je pense que l’on est pas en train de parler de gagner des Go mais plutôt quelques Mo au vu de la masse de données (4000 commandes et 2500 clients en 20 ans).
Merci pour vos avis 😊
Philippe
Partager