如何为特定类别的产品或特定产品建模 Sale/Discount 价格?

How to model a Sale/Discount price for a Specific Category of a Product or a Specific Product?

这是我的产品、类别和销售(或折扣)的数据库模型

我正在建立一个电子商务网站。我卖手机phone、电视、衣服、鞋子等不同的产品,几乎和亚马逊一样。

我对销售的建模是否正确 table?我想让一切都充满活力。我有四个问题。

第一个问题: 首先,我想为特定产品进行销售(我想 select 它就像前端的复选框一样)一种或多种产品,并且具有特定的日期时间段,例如 10 月 1 日到 9 月 1 日(我会设置折扣百分比的人)。例如:我有一个2020版新发布的phone,电视,鞋子,衣服,帽子。以及 2020 年的第一个产品或任何随机产品,但仅限于每个类别。我该怎么做?

第二个问题:如何销售特定类别的所有产品,日期范围为该类别,例如 10 月 1 日至 9 月 1 日? (又是我设定打折多少的百分比?)

第三个问题:我如何销售所有products/category?就像 2020 年底前至少两周的年终促销

第四题: 我如何模拟我所有的问题?我的任何问题是否做出了正确的数据库设计?根据图片

顺便说一句,我正在使用 mongo db、Node.js、Express 和 React,简称 MERN Stack。

词汇:

  • TABLE(#column) <-- 列是 TABLE
  • 的外键
  • TABLE() <-- 列是主键

有很多问题,还有很多东西需要复习,所以我会一步一步来:

1.给定的模型在很多方面看起来都是错误的:

  1. 每个实体都必须以单数形式命名为:PRODUCT(而不是 PRODUCTS)、SALE(而不是 SALES)。这是因为您代表每个 table 行的一个实体。
  2. SALE(id, #CATEGORY, #PRODUCT) 如果您可以对整个类别的产品进行销售,或者单一产品。那么你应该有以下 table : SALE_CATEGORY(#id_sale, #CATEGORY);SALE_PRODUCT( #id_sale, #PRODUCT);促销(id,金额,start_date,end_date)。事实上 SALE(id, #CATEGORY, #PRODUCT) 并没有错,多亏了 surrogate key (id)。但如果这样做,您将拥有两列(#CATEGORY 或#PRODUCT)之一,这对每个实体都是空的。即使您使用的是 NoSql,维护起来也会很麻烦。
  3. 如果一种产品一次依赖于一个库存,那么您在 PRODUCT 实体上使用外键的方法是正确的。但是您是否考虑过同一产品可以存储在多个库存中这一事实?就像您在一个库存中获得了一定数量的产品,而在另一个库存中获得了一定数量的产品?如果这可能发生,那么你应该有一个 PRODUCT_INVENTORY(#id_product, #id_inventory, qte).
  4. 我认为这只是一个错误,但是 PRODUCT table
  5. 中有两个 price 属性

2。你的第一个问题

  1. 我想我之前在 1.2 中已经回答过这个问题。

3。你的第二个问题

  1. 同上,1.2已经给出答案

4。你的第三个问题

  1. 我想您已经猜到这总是一样的,因为您可以为每次销售创建一个新条目,然后您决定开始日期和结束日期...

5.你的第四个问题

  1. 我建议您应用我建议的更改,然后编辑您的 post 以查看新模型。

编辑

不再需要 Product table 上的外键 inventory,因为此关系已由 product 外键表示Inventory table 内。 但是你的实体 Inventory 对我来说不是很清楚。 什么是库存?它是仓库中的特定位置吗?这在 e-commerce 中是有意义的,您通常将产品存储在仓库中,然后,当客户订购产品时,您从这个地方撤回订购的产品数量。

向您展示我在标准图表 ERD (https://en.wikipedia.org/wiki/Entity–relationship_model) 上的想法: