产品价格的数据库架构可能每天都在变化

Database schema for product prices which can change daily

我正在寻找根据以下要求设计数据库模式的建议。

  1. 产品可以有变体
  2. 每个变体可以有不同的价格
  3. 一周中特定一天的价格可能不同
  4. 一天中特定时间的价格可能会有所不同
  5. 所有价格仅在特定日期有效
  6. 可以为旺季、旺季或中期定义价格
  7. 提供任何产品的供应商可以定义自己的价格,上述规则仍然适用

在不影响性能的情况下易于检索数据的最佳模式是什么?

提前感谢您的建议。

问候 哈米特

SO 与其说是一个提供建议的论坛,不如说是一个提供答案的论坛。任何人给出的答案都不可能绝对正确。话虽如此,我会尽量保持 table 的细化程度,以便轻松更改产品。

关于#5,我会在产品上放置开始日期和结束日期。如果价格不再有效,则该产品将不再可用。

这包括不同季节价格的关系,但是您需要对季节进行硬编码或创建另一个 table 来定义这些。

对于价格,如果超过 1 个区域,您可能需要一个区域 table,在这种情况下,货币列将是合适的。

这是操作数据,不是时间数据。如果您希望它可用于定价的历史分析,您还需要创建时间 tables。

产品Table

+-------------+-----------+------------------+----------------+
| ProductName | ProductID | ProductStartDate | ProductEndDate |
+-------------+-----------+------------------+----------------+
| Product1    |         1 | 01/01/2017       | 01/01/2018     |
| Product2    |         2 | 01/01/2017       | 01/01/2018     |
+-------------+-----------+------------------+----------------+

变体Table

+-----------+-----------+-------------+---------------+-------------+-------------+
| ProductID | VariantID | VariantName | NormalPriceID | HighPriceID | PeakPriceID |
+-----------+-----------+-------------+---------------+-------------+-------------+
|         1 |         1 | Blue        |             1 |           3 |           5 |
|         1 |         2 | Black       |             2 |           4 |           5 |
+-----------+-----------+-------------+---------------+-------------+-------------+

价格Table

+---------+-----+-----+-----+-----+-----+-----+-----+
| PriceID | Mon | Tue | Wed | Thu | Fri | Sat | Sun |
+---------+-----+-----+-----+-----+-----+-----+-----+
|       1 |  30 |  30 |  30 |  30 |  35 |  35 |  35 |
|       2 |  35 |  35 |  35 |  35 |  40 |  40 |  40 |
|       3 |  33 |  33 |  33 |  33 |  39 |  39 |  39 |
|       4 |  38 |  38 |  38 |  38 |  44 |  44 |  44 |
|       5 |  40 |  40 |  40 |  40 |  50 |  50 |  50 |
+---------+-----+-----+-----+-----+-----+-----+-----+