您可能需要构建某种“折扣”表,其中包含有关折扣的基本信息 - 例如唯一标识符和描述(这也可能与触发此折扣所需的资格规则相关联 - 例如促销代码)。
该表还需要保存为您的示例创建折扣捆绑包的规则,例如“触发折扣所需的产品数量”和“捆绑包值” - 为了灵活起见,这些字段应该是 NULLable,这样您就不会必须使用捆绑包;您可以使用“产品折扣”表中确定的单个价格。
作为一个基本示例,您可能有一个折扣表,例如:
+----+-------------+----------------+--------------+------------+----------+
| id | description | units_required | bundle_price | start_date | end_date |
+----+-------------+----------------+--------------+------------+----------+
| .. + ... | ... | ... | ... | ... |
...和 product_to_discount 链接表,如:
+----+------------+-------------+----------------+------------+
| id | product_id | discount_id | units_required | unit_price |
+----+------------+-------------+----------------+------------+
| .. | ... | ... | ... | ... |
然后,您将产品链接到折扣,因此如果您有类似“只需 10 英镑购买此范围内的任意 3 件商品”之类的内容,则需要将所有可能的合格产品链接到折扣并将其设置units_required
为 3 -那么如果这些项目中的任何 3 个在“篮子”中,则应用bundle_price
.
如果有多种可能性(可能通过计算哪个提供最大折扣),您可能需要进行一些过滤以找出哪个捆绑包优先。
像这样设置的另一种可能性是,它还允许您进行更简单的折扣。您可以简单地离开units_required
,然后bundle_price
将NULL
单个产品链接到折扣;可能多次以不同的价格中断不同的价格product_to_discount.units_required
- 因此您可以为单个产品设置折扣值,或者为更大数量的每件商品设置更大的折扣。
您还可以添加一个字段,例如product_to_discount.product_is_discount
您想做“购买 X、Y 或 Z 并免费获得 Q”之类的操作。
这是相当模糊的大纲,但我希望它可以帮助您指出“正确”的方向......
哦,还有一件事要记住,如果你的系统正在做任何会计,你需要传递一条“折扣线”来解释预期产品价格和折扣价格之间的差异。