db设计问题(如何处理产品组)

时间:2010-10-28 14:45:52

标签: database database-design

如果有人能帮我找到这个数据库设计问题的优雅解决方案,我将不胜感激。有一家公司有很多不同的产品(P1,P2,P3,P4)和很多客户(C1,C2,C3,C4)。现在他们有一个简单的数据库表来处理订单,比如说 20101027 C2 P1数量状态 20101028 C1 P2数量状态

现在我想创建一组产品(例如(P1 + P3 + p4)和(P2 + P3)),这些产品可以一起购买以降低价格。在数据库系统中表示此类组的最佳方法是什么?将这些组作为单个产品处理不起作用,因为我需要替换,添加或删除组中的产品的功能。所以我需要保留当前给定的产品表。

感谢阅读。我希望我会得到一些帮助。

3 个答案:

答案 0 :(得分:4)

添加新表product_group_promotions,其中包含ID,名称和折扣价格。然后创建一个表格product_group_promotions_products,将产品与产品组促销相关联。这将包含产品组ID和产品ID。这样,您可以将一个产品放在多个组中,并让组包含多个产品(当然)。

答案 1 :(得分:2)

Jan的回答是正确但不完整。

您还需要促销的开始和结束日期。您可能希望输入下周的促销活动,以便他们准备就绪,但在适当之前不会应用它们。

折扣价也可能不够。您还需要获得业务人员关于如何应用折扣的业务规则。它可以是百分比或免费物品或固定数量。如果百分比是按比例分配,在最便宜的产品上按比例分配,最贵的?如果是免费物品,则该物品中的哪一个是免费的。如果您购买x,y和z,它也可以是固定金额,减$ 10。折扣是否适用不止一次。如果有人购买了5倍的P2和P3,他们就可以获得所有这些或第一个的折扣。一段时间内是否有限制。和过去的例子一样,如果你不给我所有5的折扣,我只会填写5个订单,每个1,并获得你试图阻止的折扣。如果是这样,您必须返回该客户之前的购买,看看他们是否已收到该折扣。

你可以看到这有多丑。我会准确地向业务部门澄清他们计划使用这个新功能的原因,并与他们一起运行这些用例。

Q问,如果购买的商品篮子足够大,可能会有多个折扣。您是否必须确定要给出的内容,是否将选项列表提交回UI ...并重新计算。

这就是为什么我怜悯那些搞砸这些东西的百货公司。这并不简单。

答案 2 :(得分:1)

从表面上看,这听起来很简单,但实际上它非常复杂。

  

“作为单个产品处理这些组不起作用,因为我需要替换,添加或删除组中的产品的功能。”

以下是您需要注意的几件事:

  1. 当前库存与过去订单
  2. 您如何处理P1,P2,P3上的价格变动
  3. 如何处理向现有群组添加新产品的方法
  4. 如何处理从现有组中删除某个或多个产品
  5. 在我看来,你需要两套表。

    • 构成当前库存的表格
    • 记录客户购买内容的表(历史数据表)

    如果您需要重建六个月前的客户购买,您不能依赖当前的数据,因为今天的分组可能与六个月前的情况不同。因此,如果您还没有一组客户记录的历史数据表,那么我建议您创建它们。

    通过一组历史数据表来存放客户购买的东西,您几乎可以根据当前的投资数据执行所需的操作。更改价格,重新组合产品,使产品过时,暂时暂停产品等。