库存管理数据库设计

时间:2016-05-31 08:45:50

标签: mysql sql database database-design

我正在为我的公司创建一个Intranet,我们希望在其中有一个库存管理。我们销售和租赁报警系统,我们希望能够很好地了解我们办公室中的产品,租借或出售的产品,时间等等。

目前我想到了这个数据库设计:

enter image description here

每次我们创建新合同时,此合同都是关于商品的位置或销售。因此,我们有一个产品表(产品类型:报警,报警手表等),以及一个项目表,它是项目本身,具有唯一的序列号。我想过这样做,因为我需要跟踪一个特定项目的位置,如果它在客户公寓(租用),是否已售出等等。产品与特定供应商有关,我们可以向他们提供接受命令。但是在这里,我有一个问题,订单表不应该与Product相关吗?

这里主要关注的是股票,项目,运动股票之间的联系。我想创建一个设计,我可以看到什么时候从我们的库存中取出一个特定的项目,以及它何时进入带有日期的股票。这就是为什么我想到一个Movement_stock表。 Type_Movement是In / Out。 但是我在这里有点迷失,我真的不知道怎么做得很好。这就是为什么我要求一些帮助。

2 个答案:

答案 0 :(得分:0)

我也有同样的需求,这就是我解决您的库存变动问题(这也成为我的问题)的方式。

enter image description here

为了模拟库存变动(+/-),我有supplyingorder表。供应充当我的库存,我订购我的库存。

如果我们停止这样做,我们可以计算出实际存货,该存货将被转录到此SQL查询中:

SELECT
    id,
    name,
    sup.length - ord.length AS 'stock'
FROM
    product
# Computes the number of items arrived
INNER JOIN (
    SELECT
        productId,
        SUM(quantity) AS 'length'
    FROM
        supplying
    WHERE
        arrived IS TRUE
    GROUP BY
        productId
) AS sup ON sup.productId = product.id
# Computes the number of order
INNER JOIN (
    SELECT
        productId,
        SUM(quantity) AS 'length'
    FROM
        product_order
    GROUP BY
        productId
) AS ord ON ord.productId = product.id

哪个会给出类似的内容:

id  name            stock
=========================
 1  ASUS Vivobook       3
 2  HP Spectre         10
 3  ASUS Zenbook        0
    ...

虽然这可以为您节省一张表,但您将无法进行扩展,因此大多数建模(imho)使用中间的stock表这一事实,主要是出于性能方面的考虑。

缺点之一是数据重复,因为您将需要重新运行上面的查询以更新库存(请参见updatedAt列)。

好的方面是客户表现。您将通过API提供更快的响应。

我认为,如果您要管理高流量商店,则还有另一个缺点。您可以想象创建另一个表来存储要重新计算库存的事实,并让用户等到重新计算完成(推送请求或长时间轮询)后,才能检查他/她的每个项目是否仍然可用(库存) > =用户需求)。但这是另一笔交易...

无论如何,即使库存重新计算查询使用匿名子查询,在大多数相对中等的商店中,它实际上也应该足够快。

注意

您在product_order中看到,我复制了价格和增值税。这是出于可靠性方面的考虑:在购买时冻结价格,并能够用很多小数位重新计算总数(不会造成损失)。

希望它可以帮助路过的人。

修改

在实践中,我将其与Laravel一起使用,并且我将使用console command来批量计算我的产品库存(我也使用可选参数仅针对特定产品ID进行计算) ,因此我的库存总是正确的(相对于上面的查询),并且我从不手动更新库存表。

答案 1 :(得分:0)

这是一个有趣的讨论,并且还可以增加某个日期的库存可用性... 这意味着存储:

  • 特定日期的产品计划订单
  • 截至某个日期的确认订单
  • 已交付的订单
  • 订单退回(特别是如果这是租用产品)

这些产品移动中的每一个都可能来自和到达一个位置

用户查询将包括:

  • 我手头的库存总量是多少
  • 应在特定日期交付的内容
  • 截至日期的整体库存情况
  • 截至某个地点的日期,手头的库存是多少

清单设计必须考虑到用户的查询和用例,以确定设计并打破规范化规则,以在适当的时间提供足够的性能。

需要考虑很多,这完全取决于软件用例。