如何对数据库中的商品进行折扣建模?

问题描述 投票:0回答:5

我正在建立一个电子商务网站,并希望在有限的时间内为某些商品提供折扣。

我的产品表(MySQL)如下所示:

产品
    - 产品ID
    - 姓名
    - 重量
    - 价格(价格以商品封面为准)

我应该再做一张桌子进行交易吗:

优惠
 - 交易ID
 - 产品ID(外键)
 - 折扣(小数值:百分比)
 - 描述

用于检索物品:

  • q1:查找产品中productID=deals表中所有productID的所有产品
  • q2:使用交易表中的折扣更新价格
  • q3:退回所有产品

有更好的方法吗?另外,如果交易仅在有限时间内存在,我该如何处理?

编辑: 我想显示我们为每种产品提供多少折扣。因此,我需要每个产品有两个值:原始价格和给定持续时间内的折扣价格。

我发布了 crontab 提出的解决方案的后续内容here

mysql database-design entity-relationship
5个回答
12
投票

您可以考虑向

Deals
表添加开始时间戳和结束时间戳。 这样,您可以检查以确保当前日期位于交易的开始日期和结束日期之间。

您的

Deals
表实际上并不需要
dealID
- 它可以使用
productID
和折扣开始日期进行键入。 另外,根据给定商品的价格有多高,请记住使您的
discount
字段足够精确(例如
DECIMAL 12,8
)。

如果是我,我实际上会保留 Product 表的价格

,并创建一个 
ProductPricing
 表,而不是创建 
Deals
 表。  该 
ProductPricing
 表将包含 
productID
 和作为关键字段的起始时间戳,然后还有一个结束时间戳来指示价格何时发生变化。  当然,还有商品的价格。


6
投票
另一件需要考虑的事情是,当给定商品没有折扣时,如何对情况进行建模?您可以在这里使用“空对象”模式 - 基本上,当创建产品时,您还可以为该产品添加 0% 折扣和无限时间的交易。这样,您可以简化产品检索逻辑(查询中没有外部联接,没有用于计算价格的

if)。


我会在折扣栏使用小数。

2
投票
价格 * 折扣 = 折扣金额

价格 - 折扣金额 = 购物车价格

在有限的时间内,您可以放入过期日期列,并且仅返回未过期的行。

我会将discountPrice、discountPercentage、endDiscountDate 列添加到表Product 中 并创建表折扣历史记录以保持折扣跟踪

0
投票
然后选择不需要联桌就可以选择正确的价格了 通过检查 endDiscountDate

这是一个相当古老的话题,但我认为我的观点对于将来遇到这个问题的任何人来说仍然会很有趣。

0
投票
我的想法是对 WWW 使用 ProductPricing 表的主张的一种修改。最后,您会将价格与产品脱钩,但不使用结束日期,而是使用

开始日期

这将改变当前价格始终是最近开始日期的价格的说法。折扣将涉及创建两个条目:

折扣价格以及折扣开始日期

    正常价格以及折扣结束日期。
  1. 我在这里看到的改进是永远不可能没有价格(因为可以到达结束日期,然后使用 endDate 时价格就会过期)。
这可以与评论中 WWW 的建议结合起来以包含折扣值。我修改它以动态选择折扣单位(货币、百分比或任何你想要的)。这是 12 月打折产品的表格:

价格开始日期折扣折扣单位10.002025-01-01空空5.002024-12-015.00“$”10.002024-10-01空空7.502024-09-0125“%”
© www.soinside.com 2019 - 2024. All rights reserved.