2009-11-17 2 views
0

J'ai une application qui traite et stocke les commandes. Chaque commande est composée d'éléments de campagne comportant différents éléments tels que la tarification, le dimensionnement, les couleurs, etc. Ma question est de savoir comment conserver ces données au fil du temps sans les lier à des données sous-jacentes susceptibles d'être modifiées. Par exemple, quelqu'un commande quelque chose composé de 5 choses qui coûtent 1 $ chacune, pour un total de 5 $. Cependant, à un certain moment dans l'avenir, les coûts pour les choses individuelles changent à 0,50 $. Maintenant, quand j'apporte l'ancienne commande, le coût total est de 2,50 $ au lieu de 5 $. Initialement, je pensais simplement à ne pas permettre la mise à jour des tables enfants, mais ce n'est pas vraiment faisable car le prix est basé sur des grilles de prix énormes que le client veut seulement mettre à jour et ne pas en créer de nouveaux à chaque prix changements au moindre. Chaque grille de prix prend des heures à mettre en place et les prix changent tous les deux jours.Comment puis-je conserver les données dans le temps sans les rattacher aux données de tarification des produits sous-jacentes susceptibles d'être modifiées?

Une autre pensée est de sérialiser l'ensemble de la commande et de travailler à partir de cela. Cependant, cela rend difficile la mise à jour du système et tout changement. Les anciennes commandes ne s'afficheront plus correctement et pourraient même planter le système.

Ceci est un problème assez général et je suis à la recherche d'un point de vue des meilleures pratiques.

Répondre

1

Vous devez enregistrer les valeurs dans chaque commande et elles ne doivent pas être connectées à la grille de prix, mais copiées à partir de celle-ci.

0

Dani est correct. À des fins d'audit, vous créez des enregistrements avec des valeurs qui ne changent pas au fil du temps au lieu de créer des liens vers des valeurs susceptibles de changer avec le temps.

Vos éléments de campagne doivent donc avoir une copie de ce qui a été acheté et le décrire. Donc, si vous avez des informations sur les produits que vous devez conserver, enregistrez-les dans l'enregistrement de ligne avec les prix, les frais et les totaux.

6

Ne basez JAMAIS les totaux de votre commande sur le prix actuel du produit. Une structure de données typique pour les catalogues en ligne, etc. est d'avoir une table de commandes et une table de comptes. La table des commandes contient toutes les informations pertinentes pour les commandes (total de la commande, ID utilisateur, date/heure, etc.), tandis que la table des articles contient l'ID produit, le prix de l'article au moment de son introduction dans le panier, ainsi que infos fiscales, etc. et l'identifiant de la commande.

Fondamentalement, une relation un-à-plusieurs entre la table de commande et les éléments de ligne. Les éléments de campagne deviennent une représentation du prix du produit, etc. au moment de la commande.

+1

Ceci est correct. Une fois qu'une commande est postée, tout ce qui concerne cette commande devient inchangé: prix des articles, informations fiscales, informations sur les coupons, adresse de livraison, etc. Vous devriez pouvoir réimprimer la facture et obtenir exactement le même document qui a été imprimé auparavant. Cela ne crée pas de redondances dans le modèle relationnel, car le «prix actuel de X» est différent de «prix de ligne de commande Z», même si les valeurs sont identiques en ce moment. –

Questions connexes