产品价格的数据库架构可能每天都在变化
Database schema for product prices which can change daily
我正在寻找根据以下要求设计数据库模式的建议。
- 产品可以有变体
- 每个变体可以有不同的价格
- 一周中特定一天的价格可能不同
- 一天中特定时间的价格可能会有所不同
- 所有价格仅在特定日期有效
- 可以为旺季、旺季或中期定义价格
- 提供任何产品的供应商可以定义自己的价格,上述规则仍然适用
在不影响性能的情况下易于检索数据的最佳模式是什么?
提前感谢您的建议。
问候
哈米特
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 |
+---------+-----+-----+-----+-----+-----+-----+-----+
我正在寻找根据以下要求设计数据库模式的建议。
- 产品可以有变体
- 每个变体可以有不同的价格
- 一周中特定一天的价格可能不同
- 一天中特定时间的价格可能会有所不同
- 所有价格仅在特定日期有效
- 可以为旺季、旺季或中期定义价格
- 提供任何产品的供应商可以定义自己的价格,上述规则仍然适用
在不影响性能的情况下易于检索数据的最佳模式是什么?
提前感谢您的建议。
问候 哈米特
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 |
+---------+-----+-----+-----+-----+-----+-----+-----+