在SQL Server中管理产品清单

时间:2016-08-06 05:03:30

标签: sql sql-server

我无法理解在SQL Server中管理类似库存的概念。

我需要确保处理3个用例:

  1. 添加新广告资源
  2. 删除广告资源
  3. 将库存从一个位置移动到另一个位置
  4. 我试图弄清楚下面的表格是否足以跟踪上述3笔交易。

    这是一个简单的表结构:

    • Inventory :( Id,LocationId,ProductId,Quantity)
    • Product :(身份证,姓名)
    • Location :(身份证,姓名)

    有了这些数据,我想弄清楚一些事情:

    对于单个产品,我能看到可用的总计吗?

    SELECT p.Name, SUM(i.Quantity) AS QuantityOnHand 
    FROM Inventory i
    INNER JOIN Product p ON i.ProductId = p.Id
    WHERE i.ProductId = 1
    GROUP BY p.Name
    

    对于单个产品,我能够看到位置A和位置B有多少可用?

    SELECT p.Name, SUM(i.Quantity) AS QuantityOnHand 
    FROM Inventory i
    INNER JOIN Product p ON i.ProductId = p.Id
    WHERE i.ProductId = 1 AND i.LocationId = 3
    GROUP BY p.Name
    

    我是否能够跟踪签到和退房的历史记录? 这是我开始感到困惑的部分......

    这是否值得拥有库存标题表?或者,由于采购订单和销售订单是用户签入和签出产品的主要方式,因此不需要InventoryHeader表。

    我头脑中的主要问题是我害怕只是在库存表上不断更新数量而没有任何这些交易的记录。此日志通常是否与采购订单(签到)和销售订单(签出)保持一致?

    我只是觉得如果我使用InventoryHeader和InventoryDe​​tail方法,则InventoryDe​​tail表中会包含大量记录,并且我无法通过查询当前有多少项目而无法通过每个InventoryDe​​tail执行SUM(Credits) - SUM(借记)

1 个答案:

答案 0 :(得分:1)

您可以按原样保留库存表并拥有inventoryTransactions表,然后在事务表进入和退出时使用事务表上的触发器更新库存表。这样,您将在事务表中拥有完整的审计历史记录,但从库存表中读取更小,更有效的读取。显然,您需要确保用户不会对库存表执行任何写操作,并且只能由触发器写入。