【问题标题】:DB design for product pricing history for multiple suppliers多个供应商的产品定价历史数据库设计
【发布时间】:2018-09-05 19:13:12
【问题描述】:

我目前正在尝试为我的项目设计 DB(mysql) 结构,该项目是一家批发公司的在线商店 - 我已经创建了关于产品的所有内容,它有多种变体等,但我在关注价格和多个供应商的历史数据:

请找出以下项目的主要假设:

  • 我们将有多个产品供应商
  • 由于上述原因,每种产品的价格都会很少不同
  • 我们希望能够获得每个供应商的每种产品的历史价格数据

变体 1

起初我想在我的数据库中添加 2 个表:

供应商表:供应商_id、名称

价格表:id、product_id、price_supplier1、price_supplier2、price_supplier3、时间戳

但是在这样的例子中,每当我们想添加另一个供应商时,我们都需要向数据库中添加行(我不是数据库专家,但我想这不是最好的方法)

变体 2

另一种想法是制作带有以下内容的价格表:

供应商表:供应商_id、名称

价格表:id、product_id、supplier_id、时间戳

但是在这种情况下,如果我们有 5 个供应商,我们每天会为 1 个产品创建 5 条记录,所以假设我们只有 1000 个产品并且想要保留过去 6 个月的历史数据 - 这样的表会增长得非常快

所以总结一下 - 哪种方法更好,或者我可以实施另一种方法?非常感谢您的任何建议。

【问题讨论】:

  • 变体 2 更好。保持行短,添加适当的索引。可能要考虑将所有历史记录保存在一个表中,并将最新价格(当前价格)存储在一个较小的表中(如果需要经常参考当前价格)。根据给出的信息,价格历史记录表将少于一百万行(1000 个产品 * 每天 5 个价格 * 183 天 = 915,000 行)
  • 感谢您的回答:我刚刚意识到,由于并非每个产品都有相同的供应商集 - 另一个表会很方便:product+supplier 将 product_id 与 supplier_id 连接起来,因为我们的价格表应该更短,因为我们只存储价格变化:价格表:id、product+supplier_id、timestamp
  • 正如其他答案所建议的那样,关于此的问题为零。选项 2 每次。唯一的问题是您希望多久参考一次旧价格,因此建议使用两个表 - SupplierPrice 和 PriceHistory 可能是一个好主意。否则,您可能会添加一个 IsCurrentPrice 标志以进行快速查找。忘记有多大的桌子。从长远来看,你别无选择。

标签: mysql database database-design


【解决方案1】:

您应该使用变体 2。最好的做法是避免频繁的表重组,每次添加或删除供应商时都必须在变体 1 中执行此操作(尽管 MySQL 在最近的版本中相当快)。使用单个列来识别不同的供应商值会更好。当您不必担心列值更改或被完全删除时,它还可以促进查询重用。此外,空间不应该是一个真正的问题。给您一个想法,如果您的价格表有 1,000,000 行(6 个月),那么它的大小约为 40-50M(假设只有一个主键索引)。 MySQL 还提供压缩和分区以减少存储空间,如果这确实是一个问题的话。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-08-24
    • 1970-01-01
    • 2015-09-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-04-20
    • 1970-01-01
    相关资源
    最近更新 更多