【问题标题】:Inventory ERD that involves multiple locations涉及多个位置的库存 ERD
【发布时间】:2016-07-31 06:07:46
【问题描述】:

我正在尝试布局一个涉及库存的实体关系图。所有物品构成一个大库存,但它们可以分布在多个位置。例如:物品 A 的 20 箱在位置 1,物品 A 的 5 箱在位置 2。

如果他们点击一个项目,他们需要能够看到它在什么位置以及每个位置有多少。

如果他们点击某个位置,他们需要能够看到该位置有哪些项目以及有多少。

我知道我的一张桌子将是“项目”,我知道我的另一张桌子将是“位置”

但是,我无法弄清楚如何使用连接表和库存表从这里分支出来,该表实际上跟踪每个项目以及每个位置的数量。

有人可以帮我入门吗?任何事情都会有所帮助。

【问题讨论】:

    标签: sql database-design architecture erd


    【解决方案1】:

    假设您想使用一个简化的系统来跟踪您的实物库存的当前快照,您可以使用这样的模型:

    ITEMLOCATION 之间的交集跟踪特定位置特定项目的现有数量(即您的库存)。

    要获取所有位置的物品总库存,您可以使用以下命令:

    SELECT 
      I.ItemID
    , I.Description
    , SUM(Q.Quantity)
    FROM ITEM I INNER JOIN ON_HAND Q
      ON I.ItemID = Q.ItemID
    GROUP BY
      I.ItemID
    , I.Description
    

    但请注意,在大多数实际情况下,保留实物库存的简单快照有点过于简单。您还应该将我对this question 的回答视为跟踪库存变动的更复杂的替代方案。

    【讨论】:

    • 感谢您对此的解释。所以连接表管理的数量是完美的。当我布置 ERD 时,我有时会忘记我能够用 SQL 做的所有事情。至于您更复杂的示例,在 Item、Ineventory_DTL = OnHand 和 Location 方面有什么区别?
    • @BlakeRivell - 与更复杂模型的主要区别在于,您不会在其中记录数量的静态计数。取而代之的是,您记录进出并在某个时间点获得手头的数量是将所有进出相加的问题。这为您提供了更多信息(任何时间点的数量,物品的来源/去向),因此您可以将实际的实物库存计数与您的数据进行核对。根据您正在做的事情,可能不需要这种额外的复杂性,但很可能需要。只有你自己才能判断。
    • 此外,我在另一篇文章中留下了一个问题,关于如何将物品租赁与物品销售合并到这样的 ERD 中。主要区别在于租赁有归还日期,用户需要能够查看有多少可用、正在使用以及由谁使用。
    【解决方案2】:

    如果您单独记录项目,例如

    Item (item_id PK, description)
    Location (location_id PK, name)
    Inventory (inv_id PK, item_id FK, location_id FK)
    

    然后您可以在需要时查询总计:

    SELECT l.location_id, l.name, i.item_id, i.description, COUNT(*)
    FROM Inventory v
    INNER JOIN Location l ON v.location_id = l.location_id
    INNER JOIN Item i ON v.item_id = i.item_id
    GROUP BY l.location_id, l.name, i.item_id, i.description
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-05-28
      • 1970-01-01
      • 2012-02-19
      • 2017-11-15
      • 2021-06-05
      • 1970-01-01
      相关资源
      最近更新 更多