Attention à bien distinguer ce que tu penses que l'utilisateur va faire et ce qu'il va faire réellement.
Le taux de TVA est un exemple parfait. Tu crées une page où tu permets que l'utilisateur crée de nouveaux taux ou les modifie ... Mais s'il s'amuse à modifier le taux n°4 de 19.6 à 20.6, eh bien, c'est le souk dans ta comptabilité.
Le taux de TVA est le cas par excellence où il faut stocker la valeur avec la facture et surtout pas l'id. Si jamais le taux change (ce sont des taux imposés par la loi) et qu'il y a des avoirs à faire, des calculs de TVA à reverser ou à recevoir, ... il est IMPERATIF d'avoir le taux au moment où la facture a été établie. Il est inimaginable qu'il puisse y avoir le moindre soupçon que l'utilisateur ait pu modifier le taux. Donc laisser la possibilité à l'utilisateur de pouvoir modifier le taux (même s'il te jure qu'il ne le fera jamais) est une faille majeure de l'application (sauf si tu emploies la solution décrite un peu plus bas).
Je dirais même que nul administrateur de base n'est à l'abri d'une mauvaise manipulation : un moment d'inattention et hop ! effacée la table des taux de TVA. A priori, elle n'est pas difficile à reconstituer, et puis il y a des sauvegardes, ... Oui, mais c'est TOUJOURS dans ces cas là que la bande est illisible, qu'il faut sortir les comptes pour dans 2 heures et qu'on se pose des questions si le taux n°4, c'est 19.6 ou 20.6 qui a été modifié en 2012 ? et le taux n°3, ce n'était pas un taux transitoire qui n'a existé que pendant 3 mois en 2007 ? ... Bref, l'horreur !
Truc employé par beaucoup de personnes qui font des applis de gestion commerciale, de facturation, ... On crée une table de taux de TVA (id, taux), mais avec un id saisi à la main par l'utilisateur (pas de champ autoincrément) ou, encore mieux, calculé par le programme : l'id est la valeur rendue entière du taux décimal ! exemple : id=196 pour taux 19.6 ; id 55 pour taux 5.5 ... Il n'y a pas de modification ni de suppression de cette table, il n'y a que des ajouts. Si l'utilisateur veut modifier le 19.6 en 20.6, cela ajoute un taux id 206. Et on résoud tout les problèmes évoqués plus haut puisqu'on stocke l'id, mais que cet id indique la valeur. Il reste bien le cas où tu aurais un taux à 1.96% et un taux à 19.6%, mais je te laisse trouver une solution
Concernant l'historique des devis, si tu veux savoir 3 mois après que c'est jacques durand qui a établi le devis, tu n'as pas d'autre choix que de stocker le nom+prénom (ou à la rigueur des initiales). De la même manière que ci-dessus, il y a ce que tu penses que les utilisateurs feront (un nouveau commercial arrive, on crée un nouveau compte) et il y a ce qu'ils feront (l'ancien commercial file ses codes d'accès au nouveau et celui-ci fait juste la modif de ses noms et prénoms). Question : et pourquoi pas stocker les deux ?
- l'id permettra au commercial de retrouver ses devis (et d'ignorer ceux du voisin)
- le nom+prénom permettra de savoir qui a signé le devis ?
Restent les contraintes techniques : problème de place, d'indexation, ... sans vouloir être "dépensier" en ressources, est-ce que c'est un VRAI problème ou est-ce que c'est juste pour la satisfaction intellectuelle ?
Est-ce qu'il y a des centaines de milliers de devis ? des milliers de commerciaux ? Est-ce que tu as disque dur si petit que ça ?
Tu parles d'intégrité de la base : c'est vrai que c'est un des principes de base de SQL : l'intégrité de la base, la non-redondance de l'information, ... Mais il y a des moments où il faut savoir ne pas suivre les règles théoriques à condition de savoir qu'on fait un truc "interdit" et à condition de savoir pourquoi on le fait. Si ton appli est codée, testée et documentée correctement, il n'y aura pas de problème.
Encore une fois, oui, en théorie, il faut stocker l'id du commercial et gérer une table des commerciaux avec des valeurs actifs/inactifs et compter sur la discipline des gens pour gérer proprement ces comptes d'accès. Mais ça, c'est la théorie et en matière de gestion de sécurité (code, mots de passe, comptes d'accès) l'expérience montre malheureusement que les gens vont au plus court. Donc, il ne faut absolument pas compter sur une auto-discipline qui fera que le compte Dupont sera désactivé, puis le compte Durant créé. Avec beaucoup de bol, le nouveau commercial changera le mot de passe que lui a filé l'ancien ; dans la plupart des cas, il ne le fera pas et l'ancien commercial pourra encore pendant des mois accéder aux devis via Internet (là aussi, je parle hélas d'expérience).