Mysql 多供应商产品定价历史的数据库设计
我目前正在尝试为我的项目设计DB(mysql)结构,这是一家批发公司的在线商店-我已经创建了所有产品,它有多种变体等,但我有以下问题,即多个供应商的价格和历史数据: 请查看项目的以下主要假设:Mysql 多供应商产品定价历史的数据库设计,mysql,database,database-design,Mysql,Database,Database Design,我目前正在尝试为我的项目设计DB(mysql)结构,这是一家批发公司的在线商店-我已经创建了所有产品,它有多种变体等,但我有以下问题,即多个供应商的价格和历史数据: 请查看项目的以下主要假设: 我们将有几个产品供应商 由于上述原因,每种产品的价格几乎没有差异 我们希望能够拥有每个供应商的每个产品的历史价格数据 变体1 起初,我考虑在数据库中添加两个表: 供应商表:供应商id、名称 价格表:id、产品id、价格供应商1、价格供应商2、价格供应商3、时间戳 然而,在这样的例子中,每当我们想要添加
- 我们将有几个产品供应商
- 由于上述原因,每种产品的价格几乎没有差异
- 我们希望能够拥有每个供应商的每个产品的历史价格数据
因此,总结一下——哪种方法更好,或者我可以实施另一种方法?非常感谢您的建议。您应该选择变体2。最好的做法是避免频繁的表重构,在任何时候添加或删除供应商时都必须在变体1中进行重构(尽管MySQL在最近的版本中在这方面速度相当快)。使用单个列来识别不同的供应商值更好。当您不必担心列值发生更改或被完全删除时,它还可以促进查询重用。此外,空间也不应该成为一个真正的问题。给你一个想法,如果你的价格表有1000000行(6个月),它的大小大约是40-5000万行(假设只有主键索引)。MySQL还提供压缩和分区功能,以减少存储空间,如果这确实是一个问题的话。变体2更好。保持行短,添加适当的索引。可能需要考虑将所有历史记录保存在一个表中,并将最新的价格(当前价格)存储在一个较小的表中(如果需要经常引用当前价格),从给定的信息中,价格历史表将少于一百万行(1000个产品*每天5个价格** 183天=915000行)。感谢您的回答:我刚刚意识到,由于不是每个产品都有相同的供应商集,所以另一个表很方便:product+supplier将product_id与supplier_id连接起来,因为我们的价格表应该更短,因为我们只存储价格变化:price table:id,product+supplier_id,正如其他答案所暗示的那样,关于这一点没有任何疑问。选择2每次。唯一的问题是您希望多久参考一次旧的价格,所以建议使用两个表-供应商价格和价格历史记录可能是一个好主意。否则,您可能会添加一个IsCurrentPrice标志以进行快速查找。忘了桌子有多大吧。从长远来看,你别无选择。