【发布时间】: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