数据库清单系统设计 SQL



>我正在重建当前的库存应用程序。我正在寻找改进。

现状: 我有一个可以存储在多个位置(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表上具有inserts、updates 和deletes 的触发器。 维护起来很麻烦。

在某些情况下,这种做法可能是必要的。 但是只有 20,000 行,您应该能够在不诉诸触发器的情况下优化数据库。

最新更新