当前位置: 首页 > 面试题库 >

在MySQL表中存储历史价格表的最佳方法是什么?

鲁炳
2023-03-14
问题内容

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

我以为我可能会有一个产品表,该产品表具有一个价格表的外键。最初,我认为存储当前价格可能是最好的选择,但是我想我希望能够存储历史价格数据,所以最好的方法是存储一个类似于以下价格表的表:

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)价格更改时,将仅包含开始日期的新价格插入历史记录表。您实际上不需要结束日期,因为您可以从上一行获取结束日期。(您仍然可以将其放入,这使查询更加容易)

还要记住,您的订单历史记录提供了另一种历史记录,即随着时间的推移以给定价格进行的实际购买。



 类似资料:
  • 问题内容: 我的简化人为示例如下: 可以说,我想每天测量和存储世界上所有城镇的温度(和其他值)。我正在寻找一种存储数据的最佳方式,以使获取所有城镇中的当前温度与获取一个城镇历史上的所有温度一样容易。 这是一个很容易解决的问题,但我正在寻找最佳解决方案。 我能想到的2个主要选项如下: 将所有当前记录和归档记录存储在同一表中。 IE 这将使所有事情变得简单,但是最有效的查询是获取城镇列表和当前温度的列

  • 问题内容: 我试图找出表中是否存在行。使用MySQL,最好执行如下查询: 并检查总数是否为非零或执行以下查询更好: 并检查是否返回任何行? 在两个查询中,WHERE子句均使用索引。 问题答案: 您也可以尝试: 根据文档,您可以执行任何操作。 传统上,EXISTS子查询以SELECT 开头,但可以以SELECT 5或SELECT column1或任何其他形式开头。 MySQL会忽略此类子查询中的SE

  • 问题内容: 假设我有两个或两个以上相同长度的列表。遍历它们的好方法是什么? ,是列表。 要么 还是我缺少任何变体? 使用一个相对于另一个有什么特别的优势吗? 问题答案: 通常的方法是使用: 这将停止两个iterables时较短且耗尽。另外值得注意的是:(仅适用于Python 2)和(适用于Python 3)。

  • 问题内容: 我有一个带有递归parent_id的自引用MySQL表: 在测试期间,我想清空它,但TRUNCATE失败: 我目前必须手动删除所有记录,从树的底部开始向上操作。即使是小树,这也很繁重。 有没有解决此问题的简单方法?我无法在表中轻松地重新创建该表,因为其他表已对其进行引用(我已经将其截断了,所以那里应该没有数据完整性问题)。 问题答案: 为什么不: ?

  • 问题内容: 复制列表的最佳方法是什么?我知道以下方法,哪种更好?还是有另一种方法? 问题答案: 如果要浅拷贝(不复制元素),请使用: 如果要进行深层复制,请使用复制模块:

  • 问题内容: 目前,我的代码中有很多类似于以下内容的python对象: 现在,我想将其转换为Django模型,其中self.myName是字符串字段,而self.myFriends是字符串列表。 由于列表是python中如此常见的数据结构,因此,我希望其中有一个Django模型字段。我知道我可以使用ManyToMany或OneToMany关系,但是我希望避免代码中的额外间接访问。 问题答案: 将这种