我正在重建当前的清单应用程序。我正在寻找改进。
当前情况: 我有一个可以存储在多个位置(1个或多个)的产品。甚至1个位置可以容纳多个(不同)产品。
所以我有这样的设计:
product:
- id
- description
location
- id
- name
stock:
-id
-product_id
-location_id
-amount
这就是我想要的。但现在是主要问题。计算每种产品的总库存需要很长时间。我有大约2万种产品和18K个地点。所以我想我可以将总库存保存在产品表中。这是一个不好的方法吗?
此外,我想保存库存来源和装运地点。所以我想为此做2张桌子。一种用于进货,一种用于进货。有更好的解决方案吗?
答案 0 :(得分:2)
所以我想我可以将总库存保存在产品表中。这是一个不好的方法吗?
是的,这通常是一种不好的方法。相反,您应该只计算给定产品的值:
select sum(s.amount)
from stock s
where s.product_id = @product_id;
在stock(product_id, amount)
上有一个索引,它应该具有很好的性能。
为什么在product
级别复制信息是不好的?问题在于维护数据。您必须在insert
表上具有update
,delete
和stock
的触发器。维护起来很麻烦。
在某些情况下,可能需要这种方法。但是只有20,000行,您应该能够在不使用触发器的情况下优化数据库。