Ich arbeite an einer neuen Verkaufsstelle für ein Unternehmen, das je nach Produktmix Produkte zu unterschiedlichen Preisen anbietet.
Alle Produkte haben einen Grundpreis.
Um mein Problem zu erklären, werde ich die folgenden Informationen verwenden:
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
Das Unternehmen hat Pakete, zum Beispiel Paket "Combo": Wenn Sie für Produkt A oder B 1 von Q oder R und 1 von X, Y oder Z wählen, erhalten Sie einen Rabatt von 20 USD.
Fall A: Manchmal fügen Kunden bei der Bestellung ein Basisprodukt hinzu, zum Beispiel: Sie gehören nicht zu Produkt A, und sie fügen Produkt Q und Produkt P hinzu, um ein Paket mit einem reduzierten Preis zu erstellen. Dann könnten sie hinzufügen, dass sie 1 von Produkt B mit 1 R und 1 Z wollen.
Fall B: Manchmal fügen Kunden 1 A und 2 B, 2 Q, 1 S, 2 X und 1 Z hinzu. Gemäß den im "Combo" -Paket festgelegten Regeln gelten nur 2 Combos, da S kein Combo-Element ist.
Andere Aktionen sind mengenabhängig. Wenn Sie also 2 von B kaufen, erhalten Sie 20% Rabatt und / oder Zeitabhängigkeit. Diese gilt nur nach 17.00 Uhr oder vor 10% Rabatt, wenn Sie vor 10 Uhr sind. Eine weitere Aktion hängt möglicherweise davon ab, wann Ihr letzter Einkauf getätigt wurde oder ob Sie in Y einen Zeitraum von mehr als X USD gekauft haben.
Meine Probleme:
1) Wie strukturiere ich die Tabellen, damit ich die verschiedenen Pakete oder Werbeaktionen auf eine Weise erstelle, die sehr flexibel ist, um verschiedene Arten von Werbeaktionen mit unterschiedlichen Anforderungen hinzuzufügen?
2) Wenn sie wie Fall B (oder eine Mischung aus Fall A und Fall B) bestellen, wie strukturiere ich meine Abfrage, damit ich testen kann, welche Produktmischungen in der Bestellung enthalten sind, und die Preise / Beschreibungen entsprechend aktualisieren kann ? Letztendlich würde das beste Ergebnis für diese Abfrage zurückgeben, welche Pakete und Werbeaktionen Anforderungen erfüllen, deren Reihenfolge dem Kunden den größten Nutzen bringt (dh möglicherweise erfüllt das, was sie bestellt haben, die Anforderungen für Werbeaktion 1 und 3, aber Werbeaktion 3 ist kostengünstiger muss mit mehreren Aktionen arbeiten).
Vielen Dank im Voraus für die Hilfe!
UPDATE # 1
Um die vorliegenden Probleme besser zu beschreiben und die bisher geleistete Arbeit zu aktualisieren, um sie zu lösen, füge ich eine ERD des Produktmodells hinzu, die auf die Entitäten und Attribute beschränkt ist, die das Problem betreffen (dh Inventar ist hier nicht im Spiel, also kein Inventar Entitäten sind vorhanden).
Ich füge auch Beispieldaten von den Entitäten und Attributen hinzu, die diese Frage betreffen (um das Lesen der Daten zu vereinfachen, gebe ich anstelle von Fremdschlüsseln Namen / Beschreibungen ein):
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
Mit den Recherchen und der Unterstützung durch die Community konnte ich das erste Problem lösen. Tatsächlich habe ich dies mit mehr Flexibilität getan, als ich bei der ersten Bereitstellung des Systems gedacht hatte.
Obwohl mit Problem 2 Fortschritte erzielt wurden, ist es nicht zufriedenstellend gelöst. Es gab einige Ideen, wie dies zu tun ist. Neil McGuilgan stellte eine großartige Frage, die zu einer möglichen Lösung mit Relational Division führte (dba.stackexchange.com/questions/45829/what-is-the-name-of-this-type- of-query-and-what-is-a-effizient-example) und dieses Buch (www.amazon.com/books/dp/0471380237) haben sehr geholfen. Derzeit funktioniert diese Lösung jedoch, so wie ich es verstehe, jeweils nur mit "einem" Datensatz (Combo). Wenn ein Kunde auftaucht und sagt, er möchte 2 Cheeseburger, 1 Hamburger, 1 kleinen Apfelsaft, 1 Cola, 1 Pommes Frites und 2 Zwiebelringe, muss ich feststellen, dass nur eine Kombination in der Mischung enthalten ist, und die andere hinzufügen Produkte zum Grundpreis. Wenn es mehrere Kombinationskombinationen gibt, I '
Eine Idee, die ich mir zur Lösung des zweiten Problems ausgedacht habe, ist das Hinzufügen und Zuordnen von PRODUCT COMPONENT zum Hauptprodukt für die Combo (dh Hamburger). Fragen Sie dann beim Ausführen des Preisfindungsprozesses ab, welche Produkte in der Bestellung die Hauptprodukte in einem "Paket" sind, und beziehen Sie die Abfrage auf den in der Tabelle PRICE COMPONENT angegebenen Rabatt und die Bestellung nach diesem Wert (absteigend). Überprüfen Sie in dieser Reihenfolge die Pakete um zu sehen, ob Sie mit einer Abfrage ein "Paket" mit den verbleibenden Nicht-Hauptprodukten erstellen und den Prozess wiederholen können, bis keine Hauptprodukte mehr vorhanden sind oder im Rest keine Nicht-Hauptprodukte mehr vorhanden sind.