定价产品的数据库架构(包,促销,基于数量,限时优惠......)

时间:2013-07-04 21:18:36

标签: database web-applications database-design schema

我正在为一家公司的新销售点工作,该公司的产品价格取决于产品组合。

所有产品都有基价。

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

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

公司有包裹,例如Package" Combo":对于产品A或B,如果您选择Q或R中的1和X,Y或Z中的1,您将获得20美元的折扣。

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

案例B 有时客户会添加1 A和2 B,2 Q,1 S,2 X和1 Z.根据" Combo"包装,只适用2个组合,因为S不是组合项目。

其他促销活动取决于数量,因此如果您购买B中的2个,您将获得20%的折扣和/或取决于时间,它仅在下午5点之后或在10点之前10%之前有效。另一次促销可能取决于您上次购买的时间,或者您是否在Y时间段内购买了超过$ X.

我的问题:

1)如何构建表格以便我以非常灵活的方式创建不同的包裹或促销,以添加具有不同要求的不同类型的促销?

2)当他们像案例B(或案例A和案例B的混合)一样订购时,如何构建我的查询以便我可以测试以查看订单中的产品组合,并更新价格/描述相应?最终,此查询的最佳结果将返回哪些包裹和促销活动满足要求,从而为客户带来最大利益(即,他们所订购的商品可满足促销1和3的要求,但促销3更便宜。必须使用多个促销活动。)

提前感谢您的帮助!

更新#1

为了更好地描述手头的问题并更新迄今为止所做的工作以解决它们I'm incluiding an ERD of the Product Model limited to the entities and attributes that affect the issue(即库存不在这里,因此没有库存实体)。

我还包括影响此问题的实体和属性的样本数据(为了简化数据读取,我将名称/描述放在外键中):

Here is a link to a flow chart giving an example of a combo, a fast and visual way to understand the table structure.

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 asked a great question leading towards a possible solution using Relational Divisionthis book帮了很多忙。然而,目前这个解决方案,据我所知,只适用于"一个"一次记录(组合)。如果顾客走路并说他想要2个芝士汉堡,1个汉堡包,1个小苹果汁,1个可乐,1个炸薯条和2个洋葱圈,我需要一种方法来检测混合物中只有一种组合并加入另一种产品基价。如果有多个组合组合,我正在查找(理想情况下是一个sql查询),它可以通过最大的节省来优先考虑组合组合。

我提出解决问题二的一个想法是将PRODUCT COMPONENT flaggin添加到属于组合的主要产品(即汉堡包)。然后在运行定价过程时,查询订单中的主要产品中的哪些产品是"包",将查询与PRICE COMPONENT表给出的折扣相关联,并按该值排序(降序),并在包的顺序检查你是否可以创建一个"包"对剩余的非主要产品进行查询并循环流程,直到没有更多的主要产品或剩余的非主要产品为止。

0 个答案:

没有答案