2

我正在为一家公司开发一个新的销售点,该公司根据产品组合以不同的价格提供产品。

所有产品都有底价。

为了解释我的问题,我将使用以下信息:

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

该公司有套餐,例如套餐“Combo”:对于产品 A 或 B,如果您选择 Q 或 R 中的 1 个以及 X、Y 或 Z 中的 1 个,您将获得 20 美元的折扣。

案例 A:有时客户在下订单时会添加基本产品,例如:他们不想要产品 A,然后将产品 Q 和产品 P 添加到其中以创建具有折扣价的包装。然后他们可能会补充说他们想要产品 B 的 1 个具有 1 个 R 和 1 个 Z。

案例B:有时客户会添加1个A和2个B,2个Q,1个S,2个X和1个Z。根据“组合”套餐规定的规则,只有2个组合适用,因为S不是组合项目。

其他促销取决于数量,因此如果您购买 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 提出了一个很好的问题,导致了使用关系除法的可能解决方案这本书帮助了很多。然而,目前这个解决方案,据我所知,一次只能处理“一个”记录(组合)。如果顾客走上前说他想要 2 个芝士汉堡、1 个汉堡、1 个小苹果汁、1 个可乐、1 个炸薯条和 2 个洋葱圈,我需要一种方法来检测混合物中只有一个组合并添加另一个基本价格的产品。如果有多个组合组合,我正在寻找(理想情况下用于 sql 查询)可以通过最大节省来优先考虑组合组合。

我想出解决问题二的一个想法是添加并归因于 PRODUCT COMPONENT 标记组合的主要产品(即汉堡包)。然后在运行定价过程时,查询订单中的哪些产品是“包裹”中的主要产品,将查询与 PRICE COMPONENT 表给出的折扣相关联并按该值排序(降序),并按包裹顺序检查查看您是否可以通过查询创建包含剩余非主要产品的“包”并循环该过程,直到不再有主要产品或剩余部分中不再有非主要产品。

4

0 回答 0