我正在为一家公司提供新的销售点,该公司根据产品组合提供不同的价格。
所有产品都有底价。
为了解释我的问题,我将使用以下信息:
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
该公司有Packages,例如Package“ Combo”:对于产品A或B,如果选择Q或R中的1个以及X,Y或Z中的1个,则可享受$ 20的折扣。
案例A:有时客户在下订单时会添加基本产品,例如:他们不使用产品A,而是在其中添加产品Q和产品P以创建打折的包装。然后,他们可能会补充说,他们想要1个具有1 R和1 Z的乘积B。
情况B:有时客户会添加1 A和2 B,2 Q,1 S,2 X和1Z。根据“组合”程序包规定的规则,由于S不是组合项目,因此仅适用2个组合。
其他促销取决于数量,因此,如果您购买2件B,您将获得20%的折扣和/或取决于时间,该促销仅在下午5点之后有效,或者如果在上午10点之前折扣10%之前有效。另一个促销活动可能取决于您上次购买的时间或您在Y时间范围内的购买金额是否超过$ X。
我的问题:
1)如何构造表,以便以非常灵活的方式创建不同的包装或促销以添加具有不同要求的不同类型的促销?
2)当他们像案例B(或案例A和案例B的混合商品)那样订购时,如何构造查询,以便测试订单中有哪些商品组合,并相应地更新价格/说明?最终,此查询的最佳结果将返回满足要求的包装和促销,从而给客户带来最大的利益(即,他们订购的产品满足促销1和促销3的要求,但是促销3的价格更低。必须与多个促销一起使用)。
先谢谢您的帮助!
更新1
为了更好地描述手头的问题并更新迄今为止为解决这些问题而完成的工作,我将产品模型的ERD限于影响该问题的实体和属性(即,此处没有库存,因此没有库存)实体存在)。
我还将包括影响该问题的实体和属性的示例数据(为简化读取数据,我在名称/描述中代替了外键):
这是流程图的链接,提供了一个组合示例,该组合是一种快速而直观的方式来了解表格结构。
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
因此,有了社区的研究和支持,直到知道为止,我才能够解决问题1。实际上,我这样做的灵活性比我在系统的第一次部署中所能想象的更大。
尽管问题2有所进步,但仍不能令人满意地解决。关于如何执行此操作已有一些想法,尼尔·麦奎尔根(Neil McGuilgan)提出了一个重要问题,提出了使用关系部门的可行解决方案(dba.stackexchange.com/questions/45829/what-is-the-name-of-this-type-查询和什么是高效示例)和这本书(www.amazon.com/books/dp/0471380237)起到了很大的作用。但是,据我所知,目前这种解决方案一次只能使用“一个”记录(组合)。如果客户走上来说他要2个芝士汉堡,1个汉堡包,1个小苹果汁,1个可乐,1个炸薯条和2个洋葱圈,我需要一种方法来检测混合物中只有一个组合,然后添加另一个基本价格的产品。如果有多个组合组合,我会
我提出来解决第二个问题的一个想法是,将组合的主要产品(即汉堡包)添加到PRODUCT COMPONENT标志中。然后在执行定价过程时,查询订单中的哪些产品是“包装”中的主要产品,将查询与PRICE COMPONENT表给出的折扣相关联,并按该值排序(降序),然后按包装的顺序检查看看是否可以使用查询来创建包含其余非主要产品的“包装”,并循环执行该过程,直到不再有主要产品或其余非主要产品为止。