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