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.
Antworten:
Das könnte kompliziert werden ...
Sie können mit einer
packaged_with
Tabelle beginnen, um zu bestimmen, welche Produkte gruppiert und verpackt werden können:package_group
bezieht sich auf apackage
.packaged_with
bezieht sich aufproducts
undpackage_groups
, sodass eine Zeile inpackaged_with
zeigt, mit welchen Produkten ein Produkt verpackt werden kann, und eine Verpackung aus mehreren Gruppen bestehen kann.Die Daten würden folgendermaßen aussehen:
Dies hilft Ihnen bei den Produktpaketen selbst. Ich habe einige Ideen für den Rest Ihrer Frage, aber ich habe momentan keine Zeit, diese Antwort zu beenden ...
Promotions
Sie listen viele Arten von Werbeaktionen auf. Vielleicht möchten Sie sich eine Art Regel-Engine ansehen, aber ich werde versuchen, die Dinge einfacher zu halten, aber trotzdem ... Das wird kompliziert.
Beginnen wir mit einfachen Werbeaktionen, bei denen ein Preis um einen bestimmten Prozentsatz reduziert wird:
Hier haben wir eine Tabelle, in der gespeichert ist, wie viel Prozent Sie für das Produkt erhalten. Eine andere Tabelle verknüpft Produkte tatsächlich mit dem Abzinsungssatz und enthält auch ein Start- und Enddatum, damit Sie wissen, ob der Abschlag an einem bestimmten Datum gilt.
Ideen für die anderen Aktionen kommen später ...
quelle
Obwohl es ein 3 Jahre alter Thread ist, antworte ich immer noch und denke, dass es für jemanden hilfreich sein könnte.
OfferDetails ------------
Um ein OfferDetails zu erstellen, müssen Sie ein obligatorisches, ein mixgropu1 und ein amixGropu2 angeben. Also hat caseB nur 2 Angebote wie folgt:
Andere Angebote basieren auf Geschäftslogik: Für Mengenangebotsrabatt: Erstellen Sie eine Abfrage, um die Anzahl von B in einem Angebot für einen Kunden zu ermitteln. Nennen wir es QTYB. Finden Sie QTYB% 2 und multiplizieren Sie es mit dem Wert von QuantityOffer ($ 20).
Fügen Sie für ein Statistikangebot einfach ein weiteres Bit namens EarnedPoint für den Kauf eines Kunden hinzu. und setzen Sie dem EarnedPoint ein Ablaufdatum. Der verdiente Punkt kann dem gekauften Betrag entsprechen. Überprüfen Sie, ob der gekaufte Betrag> = $ X ist. Sie gewähren einen Rabatt gemäß den Richtlinien.
Ähnlich ist der Vergleich der Bestellzeit, wenn vor 17 Uhr und nach 10 Uhr 5% ausgegeben werden, andernfalls 10% Rabatt.
quelle