Je travaille sur un nouveau point de vente pour une entreprise qui produit à des prix différents selon le mix produit.
Tous les produits ont un prix de base.
Pour expliquer mon problème, j'utiliserai les informations suivantes:
Product Category Price
A 1 45
B 1 70
Q 2 20
R 2 27
S 2 15
X 3 17
Y 3 22
Z 3 16
La société propose des packages, par exemple le package "Combo": pour le produit A ou B, si vous choisissez 1 de Q ou R et 1 de X, Y ou Z, vous bénéficiez d'une remise de 20 $.
Cas A: Parfois, les clients ajoutent un produit de base lors de la commande, par exemple: ils ne font pas partie du produit A, et ils y ajoutent le produit Q et le produit P pour créer un package à prix réduit. Ensuite, ils pourraient ajouter qu'ils veulent 1 produit B avec 1 R et 1 Z.
Cas B: Parfois, les clients ajoutent 1 A et 2 B, 2 Q, 1 S, 2 X et 1 Z. Selon les règles énoncées dans le package "Combo", seuls 2 combos s'appliqueraient car S n'est pas un élément combo.
Les autres promotions dépendent de la quantité, donc si vous achetez 2 de B vous obtenez 20% de réduction et / ou en fonction du temps, elle n'est valable qu'après 17 h ou avant 10% si avant 10 h. Une autre promotion peut dépendre du moment où votre dernier achat a eu lieu ou si vous avez acheté plus de X $ sur une période Y.
Mes problèmes:
1) Comment puis-je structurer les tableaux afin que je puisse créer les différents packages ou promotions d'une manière très flexible pour ajouter différents types de promotions avec des exigences différentes?
2) Quand ils commandent comme le cas B (ou un mélange de cas A et de cas B), comment puis-je structurer ma requête afin de pouvoir tester pour voir quel (s) mix produit (s) sont dans la commande et mettre à jour les prix / descriptions en conséquence ? En fin de compte, le meilleur résultat pour cette requête retournerait quels packages et promotions ont des exigences remplies dans l'ordre qui donne le plus d'avantages au client (c'est-à-dire que ce qu'ils ont commandé répond aux exigences des promotions 1 et 3, mais la promotion 3 est moins chère. doit fonctionner avec plusieurs promotions).
Merci d'avance pour l'aide!
MISE À JOUR # 1
Pour mieux décrire les problèmes et mettre à jour le travail effectué jusqu'à présent pour les résoudre, j'inclus une ERD du modèle de produit limitée aux entités et aux attributs qui affectent le problème (c'est-à-dire que l'inventaire n'est pas en jeu ici, donc pas d'inventaire) sont présentes).
J'inclus également des exemples de données des entités et des attributs qui affectent cette question (pour simplifier la lecture des données, je mets le nom / les descriptions à la place des clés étrangères):
PRODUCT
---------
ID Name
================================
1 Hamburger
2 Cheeseburger
3 Bacon Hamburger
4 Bacon Cheeseburger
5 Orange Juice
6 Apple Juice
7 Coffee
8 Coke
9 French Fries
10 Onion Rings
11 Soup du Jour
12 Hamburger Combo
13 CheeseBurger Combo
14 Bacon Hamburger Combo
15 Bacon Cheeseburger Combo
16 Combo Side
17 Combo Beverage
18 Small Orange Juice
19 Large Orange Juice
20 Small Apple Juice
21 Large Apple Juice
22 Add Extra Patty
23 Add Avocado
PRODUCT COMPONENT
------------------
productFrom productTo
===================================================
Hamburger Combo Hamburger
Hamburger Combo Combo Side
Hamburger Combo Combo Beverage
CheeseBurger Combo Cheeseburger
CheeseBurger Combo Combo Side
CheeseBurger Combo Combo Beverage
Bacon Hamburger Combo Bacon Hamburger
Bacon Hamburger Combo Combo Side
Bacon Hamburger Combo Combo Beverage
Bacon Cheeseburger Combo Bacon Cheeseburger
Bacon Cheeseburger Combo Combo Side
Bacon Cheeseburger Combo Combo Beverage
PRODUCT FEATURE
----------------
ID Description
=======================
1 Combo Side Option
2 Combo Beverage
3 Juice
4 Orange Juice Size
5 Apple Juice Size
6 Extras
PRODUCT FEATURE APPLICABILITY
------------------------------
product productFeature ProductFeatureApplicabilityType
============================================================================
Hamburger Combo Combo Side Required
Hamburger Combo Juice Flavor Required
Cheeseburger Combo Combo Side Required
Cheeseburger Combo Juice Flavor Required
Bacon Hamburger Combo Combo Side Required
Bacon Hamburger Combo Juice Flavor Required
Bacon Cheeseburger Combo Combo Side Required
Bacon Cheeseburger Combo Juice Flavor Required
PRODUCT FEATURE APPLICABILITY
------------------------------
productFeature product ProductFeatureApplicabilityType
============================================================================
Combo Side Hamburger Combo Required
Combo Beverage Hamburger Combo Required
Extras Hamburger Combo Optional
Combo Side Cheeseburger Combo Required
Combo Beverage Cheeseburger Combo Required
Extras Cheeseburger Combo Optional
Combo Side Bacon Hamburger Combo Required
Combo Beverage Bacon Hamburger Combo Required
Extras Bacon Hamburger Combo Optional
Combo Side Bacon Cheeseburger Combo Required
Combo Beverage Bacon Cheeseburger Combo Required
Extras Bacon Cheeseburger Combo Optional
OPTIONAL FEATURE
------------------
productFeatureFrom Product ProductFeatureTo
=============================================================
Combo Side Option French Fries
Combo Side Option Onion Rings
Combo Side Option Soup du Jour
Combo Beverage Juice
Combo Beverage Coffee
Juice Orange Juice Size
Juice Apple Juice Size
Orange Juice Size Orange Apple Juice
Orange Juice Size Orange Apple Juice
Apple Juice Size Small Apple Juice
Apple Juice Size Large Apple Juice
Extras Add Extra Patty
Extras Add Avocado
Ainsi, grâce à la recherche et au soutien fournis par la communauté jusqu'à ce que je sache, j'ai pu résoudre le problème n ° 1. En fait, je l'ai fait avec plus de flexibilité que je ne le pensais dans le premier déploiement du système.
Bien qu'il y ait eu des progrès avec le problème 2, il n'est pas résolu à la satisfaction. Il y a eu quelques idées sur la façon de le faire, Neil McGuilgan a posé une grande question menant à une solution possible en utilisant la division relationnelle (dba.stackexchange.com/questions/45829/what-is-the-name-of-this-type- of-query-and-what-is-an-efficient-example) et ce livre (www.amazon.com/books/dp/0471380237) ont beaucoup aidé. Cependant, cette solution à l'heure actuelle, et si je comprends bien, ne fonctionne qu'avec "un" enregistrement (combo) à la fois. Si un client se rapproche et dit qu'il veut 2 hamburgers au fromage, 1 hamburger, 1 petit jus de pomme, 1 coca, 1 frite et 2 rondelles d'oignon, j'ai besoin d'un moyen pour détecter qu'il n'y a qu'un seul combo dans le mélange et ajouter l'autre produits au prix de base. S'il y a plusieurs combinaisons de combos, je '
Une idée que j'ai trouvée pour résoudre le problème deux est d'ajouter et d'attribuer au marqueur COMPOSANT PRODUIT le produit principal du combo (c.-à-d. Hamburger). Ensuite, lors de l'exécution du processus de tarification, recherchez les produits de la commande qui sont les produits principaux d'un "package", en reliant la requête à la remise accordée par la table PRICE COMPONENT et la commande par cette valeur (décroissante), et dans cet ordre de packages, vérifiez pour voir si vous pouvez créer un "package" avec les produits non principaux restants avec une requête et boucler le processus jusqu'à ce qu'il n'y ait plus de produits principaux ou qu'il n'y ait plus de produits non principaux dans le reste.
Réponses:
Cela pourrait se compliquer ...
Vous pouvez commencer par un
packaged_with
tableau pour déterminer quels produits peuvent être regroupés et emballés ensemble:package_group
fait référence à apackage
.packaged_with
fait référence àproducts
etpackage_groups
, de sorte qu'une ligne danspackaged_with
indique les produits avec lesquels un produit peut être conditionné et un package peut être composé de plusieurs groupes.Les données ressembleraient à ceci:
Cela vous aidera avec les packages de produits eux-mêmes. J'ai quelques idées pour le reste de votre question, mais je n'ai pas le temps de terminer cette réponse tout de suite ...
Les promotions
Vous listez de nombreux types de promotions. Vous voudrez peut-être examiner une sorte de moteur de règles, mais je vais essayer de garder les choses plus simples que cela, mais quand même ... Cela deviendra compliqué ..
Commençons par des promotions simples où un prix est réduit d'un certain pourcentage:
Ici, nous avons un tableau qui stocke le pourcentage que vous obtenez pour le produit. Un autre tableau relie en fait les produits au taux d'actualisation et comprend également une date de début et de fin afin que vous sachiez si la remise est applicable à une date donnée.
Idées pour les autres promotions à venir plus tard ...
la source
Bien que ce soit un fil de 3 ans, je réponds toujours en pensant que cela pourrait être utile à quelqu'un.
OffreDétails ------------
Pour construire une offreDétails, vous devez fournir un obligatoire, un mixgropu1 et un amixGropu2. Donc caseB, n'a que 2 offres comme suit:
Les autres offres sont basées sur la logique métier: Pour la remise sur l'offre de quantité: créez une requête pour trouver le nombre de B dans une offre pour un client. appelons-le QTYB. trouver QTYB% 2 et le multiplier par la valeur quantityOffer (qui est de 20 $)
Pour l'offre de statistiques, ajoutez simplement un autre bit appelé wonPoint pour l'achat d'un client. et définissez le point gagné une date d'expiration. le point gagné peut être le même que le montant acheté. Vérifiez si le montant acheté> = $ X, émettez une remise conformément à la politique.
La comparaison du temps de commande est similaire si c'est avant 17 heures et après 10 heures, puis émettez 5% sinon émettez 10% de réduction.
la source