mysql - 在 MySQL 表中存储历史价目表的最佳方式是什么?

标签 mysql sql database e-commerce data-modeling

基本上,我的问题是 - 我有一个价格列表,其中一些是历史价格(即我希望能够搜索该产品 X 在 3 月 11 日为 0.99 美元,在 4 月 1 日为 1.99 美元,等等...) .存储此信息的最佳方式是什么?

我假设我可能会有一个 Product 表,其中包含一个指向价格表的外键。我最初认为存储当前价格可能是最好的选择,但我想我希望能够存储历史价格数据,所以更好的方法是存储如下表的价格表:

CREATE TABLE prices (
         id BIGINT auto_increment not null,
         primary key (id),
         price DECIMAL(4,2) not null,
         effectiveStartDate DATETIME NOT NULL,
         effectiveEndDate DATETIME 
);

我在这里有点不知所措。我希望能够高效地搜索产品并查看该产品的价格随时间的变化情况。我怎样才能有效地将一组这些价格与产品相关联?我想我想问的是,“为了能够高效搜索跨越一组特定日期的查询,最好的索引方式是什么?”

最佳答案

将对历史数据的需求与对当前价格的需求分开。这意味着:

1) 在产品表中保留当前价格。

2) 当价格发生变化时,将新价格插入到历史表中,只有开始日期。您实际上并不需要结束日期,因为您可以从上一行中获取它。 (还是可以放进去,查询起来更方便)

另请记住,您的订单历史记录提供了另一种历史记录,即一段时间内以给定价格进行的实际购买。

关于mysql - 在 MySQL 表中存储历史价目表的最佳方式是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4823025/

相关文章:

sql - 删除数据库中除oracle前两行以外的所有行

java - 从数据库中提取错误的值

php - 在 View 中显示图像在 Laravel 中不起作用

MYSQL 删除所有行,但对 select 的相同查询只返回 3 行

java - SQL 选择查询错误

mysql - SQL 中的数量偏移

jquery - 数据表分页搜索框不起作用

php - IN FIND_IN_SET 之间的 MySql 查询

php - 如何查找给定月份的周日期范围

mysql - 根据查询结果删除多个表