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.