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