我目前正在尝试为我的项目设计db(mysql)结构,这是一个批发公司的在线商店-我已经创建了涉及产品的所有内容,它有多种变体等,但我有以下问题,即多个供应商的价格和历史数据:
本项目的主要假设如下:
我们将有几个产品供应商
由于上述每种产品将有几个不同的价格
我们希望能够有每个供应商的每个产品的历史价格数据
变型1
一开始我考虑在数据库中添加两个表:
供应商表:供应商id、名称
价格表:id,product\u id,price\u supplier1,price\u supplier2,price\u supplier3,时间戳
然而,在这样的例子中,每当我们想添加另一个供应商时,我们就需要将行添加到数据库中(我不是dbMaven,但我想这不是最好的方法)
变型2
另一个想法是建立一个包含以下内容的价格表:
供应商表:供应商id、名称
价格表:id、产品id、供应商id、时间戳
但是,在这种情况下,如果我们有5个供应商,我们每天会为1个产品创建5个记录,因此让我们设想一下,我们只有1000个产品,并且希望保留过去6个月的历史数据—这样的表将增长非常快
所以总结一下-哪种方法更好,或者我可以实现一种不同的方法?谢谢你的建议。
1条答案
按热度按时间yqlxgs2m1#
你应该选择变体2。最好的做法是避免频繁的表重构,在任何时候添加或删除供应商时,都必须在变体1中进行重构(尽管在最近的版本中mysql在这方面相当快)。使用单个列来标识不同的供应商值更好。当您不必担心列值发生更改或被完全删除时,它还促进了查询重用。另外,空间也不应该是个问题。让您了解一下,如果prices表有1000000行(6个月),那么它的大小大约为40-50m(假设只有主键索引)。mysql还提供了压缩和分区来减少存储,如果这确实是一个问题的话。