2010-09-16 10 views
1

Dois-je cloner l'ensemble du produit et toutes les données connexes dans un autre tableau pour la postérité, en enregistrant de manière effective l'état actuel du produit, comme c'était le cas lorsque l'utilisateur l'a acheté?Codage d'un panier: Lorsque l'utilisateur extrait, dois-je copier chaque donnée produit dans un tableau "commander le produit" pour sauvegarder son état?

Plus:

  • est tenu pour la postérité et n'a jamais changé le produit (comme l'utilisateur a vu quand il a été acheté). Si les données du produit changent au fil du temps, les informations de commande d'origine ne seront pas modifiées.

Moins:

  • Beaucoup de complexité supplémentaire:
    • Plusieurs autres tables requises dans la base de données.
    • Schéma similaire pour garder une trace de.
  • Plus d'espace disque utilisé.

Quelqu'un at-il une solution intelligente à cette énigme?

Répondre

2

Je suggère de cloner les attributs du produit qui sont pertinents pour la commande. Par exemple, le prix unitaire. La plupart des attributs du produit ne font pas partie de la commande. Les attributs qui sont pertinents pour la commande dépendent de la manière dont l'entreprise fonctionne.

Si vous ne disposez que de quelques attributs, vous pouvez les cloner directement dans l'enregistrement de détail de la commande (ligne) et ne pas créer une autre table pour stocker ces données. La complexité ajoutée est minime.

C'est ma suggestion pour le traitement des transactions. Si, par contre, vous construisez un entrepôt de données pour une analyse à long terme, alors conserver une version sur le tableau des dimensions du produit est la bonne solution.

Ensuite, vous ne feriez jamais une mise à jour de la dimension du produit. Au lieu de cela, lorsqu'un attribut de produit change, vous devez insérer une nouvelle ligne dans la dimension du produit pour contenir les nouvelles valeurs. La nouvelle ligne aurait la même clé de produit, mais un numéro de version différent.

+0

Je voudrais inclure, le prix du numéro de pièce et le nom et les unités. Vous devriez également faire la même chose concernant les informations du client, vous avez expédié la commande à l'adresse que vous aviez à ce moment-là et devriez stocker à la fois le nom et l'adresse. Vous ne voulez pas que les mises à jour de ces informations modifient les détails historiques d'une commande. – HLGEM

+0

Merci pour la bonne réponse. Je vais faire ça. Aussi, je vais stocker un objet JSON dans l'enregistrement de commande qui inclut toutes les données pertinentes, juste au cas où. – mattalxndr

0

Je suggère d'ajouter un 'numéro de version' aux données du produit et de conserver les anciennes versions. De cette façon, vous gérez les données produit, n'ajoutez pas de tables supplémentaires et avez la possibilité d'éliminer les anciens produits et plus tard si vous utilisez trop d'espace.

+0

Merci pour la réponse. C'est génial en théorie mais je devrais trop modifier mon CMS pour le faire fonctionner dans la réalité. – mattalxndr