首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >面向产品推广的数据库设计

面向产品推广的数据库设计
EN

Database Administration用户
提问于 2019-03-14 02:15:13
回答 1查看 2.3K关注 0票数 0

假设我有一个包含以下列的products表:

  • id (PK)
  • category_id (FK)
  • color_id (FK)
  • material_id (FK)
  • seller_id (FK)
  • size_id (FK)
  • name
  • price

进一步假设可以有0或更多的promotions应用于产品。促销活动将有开始和结束日期/时间、折扣金额(例如100美元折扣)或百分比(例如10%的折扣)等。

促销只适用于符合一定标准的产品,如:

  • 所有颜色为“红色”和“大号”的产品
  • 所有属于“衬衫”类别的产品
  • seller_id =1和price >50美元销售的所有产品

How我会在数据库中表示这一点吗?我觉得我需要将一个或多个“查询字符串”关联到促销表(例如?color_ids[]=1&sizes[]=3),并根据所有查询字符串测试每个产品,以查看该产品是否是该促销活动的一部分。不过,我认为这是非常低效的。

另一种选择是在系统中插入/更新产品或促销时设置一个表products_promotions,然后检查该表以查看该产品是否有与其相关的促销活动。

有什么想法?

EN

回答 1

Database Administration用户

发布于 2019-03-14 14:53:35

一种方法是将表promotions创建为:

  • id (PK)
  • start_date
  • end_date
  • discount_amount
  • discount_percentage
  • 条件

要确定产品符合的促销条件,您需要动态执行所有查询,并选择sum(discount_amount)sum(discount_percentage)。下面是一个可以帮助您入门的片段:

代码语言:javascript
运行
复制
SET @SQL = CONCAT('SELECT id FROM products WHERE ', @condition, ' INTO @product_id');
PREPARE stmt FROM @SQL;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;

您可以将这个片段放入接受condition并返回product_id的函数中。

每次SELECT时运行所有这些查询,product可能会非常耗时。因此,您可能需要创建一个表product_discounts,其中包含productsdiscounts的两个外键,以方便这两个表之间的多到多关系。

然后在两个表上使用事件(每天重新计算整个关系)或触发器,或者使用事件和触发器的组合,从product_discounts中插入和删除行。

我希望这能帮到你。

票数 0
EN
页面原文内容由Database Administration提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://dba.stackexchange.com/questions/232083

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档