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

Database db设计问题(如何处理产品组),database,database-design,Database,Database Design,如果有人能帮我找到一个优雅的解决方案来解决这个数据库设计问题,我将不胜感激。有一家公司有很多不同的产品(P1、P2、P3、P4)和很多客户(C1、C2、C3、C4)。现在他们有了一个简单的数据库表来处理订单,比如 20101027 C2 P1数量状态 20101028 C1 P2数量状态 现在,我想创建一组产品(例如(P1+P3+p4)和(P2+P3)),它们可以一起以更低的价格购买。在数据库系统中表示这些组的最佳方式是什么?将这些组作为单个产品处理是不可行的,因为我需要从组中替换、添加或删除产

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

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


谢谢你的阅读。我希望能得到一些帮助。

添加一个新表
产品组促销
,其中包含ID、名称和折扣价格。然后创建一个表
product\u group\u promotions\u products
,将产品链接到产品组促销。这将包含一个产品组ID和一个产品ID。这样,您可以将一个产品放在多个组中,并让组包含多个产品(当然)。

Jan的答案是正确的,但不完整

您还需要促销的开始日期和结束日期。你可能想参加下周的促销活动,这样他们就准备好了,但在合适的时候才开始应用

折扣价格可能也不够。您还需要从业务人员那里获得有关如何应用折扣的业务规则。它可以是一个百分比、一个免费项目或一个固定金额。如果你按比例平均分配折扣给最便宜、最昂贵的产品?如果是自由项,则集合中的哪一项是自由项。它也可以是一个固定的数额,如果你买x,y和z,可以打10美元的折扣。折扣是否应用了多次。如果有人购买了5倍的P2和P3,他们是否能享受到所有P2和P3的折扣,还是仅购买第一批P3的折扣。在一段时间内是否有限制。在过去的例子中,如果你不给我所有5个订单的折扣,我只会填写5个订单,每个订单1个,然后得到你试图阻止的折扣。如果是这样的话,你必须回顾客户之前的购买情况,看看他们是否收到了折扣

你可以看到这有多难看。我将向业务部门明确说明他们计划将此新功能用于什么,并与他们一起运行这些用例

如Q所问,如果购买的商品足够大,可能会有不止一个折扣。您是否必须确定要提供什么,您是否向UI提供了一个选择列表。。。然后重新计算


这就是为什么我对那些把这些东西搞砸的百货公司很仁慈。这并不简单。

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

“将这些组作为单个产品处理是行不通的,因为我需要从组中替换、添加或删除产品的功能。”

以下是您需要了解的几点:

  • 当前库存与过去订单
  • 您如何处理P1、P2、P3的价格变化
  • 您如何处理向现有组中添加一个或多个新产品
  • 如何处理从现有组中删除一个或多个产品
  • 我认为你需要两套桌子

    • 构成当前库存的表
    • 记录客户购买内容的表(历史数据表)
    如果您需要重建客户六个月前购买的产品,您不能依赖当前数据,因为现在的分组可能与六个月前的分组不一样。因此,如果您还没有一组用于客户记录的历史数据表,我建议您创建它们


    有了一套历史数据表,可以存放客户购买的东西,您几乎可以根据当前的投资数据做任何您想做的事情。更改价格、重组产品、淘汰产品、暂时暂停产品等。

    p1+p2+p3+p4什么算?是
    (p1+p3+p4)+p2
    还是
    p1+(p2+p3)+p4
    ?是的,问得好。在麦当劳,我一直在想这个问题。@StephaniePage,不管是哪一个更低,这都将是对现有系统的复杂扩展。不过,我会更改您的表名。组和组产品。简的答案是完整的。您正在回答一个没有提出的问题。事实上,您希望保留历史数据。作为一个“经验法则”,我尝试设计数据库,这样我就不会删除或覆盖数据,只会向其中添加数据。这允许您重建所有历史状态。一本有趣的读物是Richard Snodgrass和他的《用SQL开发面向时间的数据库应用程序》。