Sql 数据库设计:多级包装的库存
我正试图为我的存货建立一个数据库。但我不知道如何跟踪多级包装 例如: 我目前有一个产品和职位表 产品Sql 数据库设计:多级包装的库存,sql,database,database-design,Sql,Database,Database Design,我正试图为我的存货建立一个数据库。但我不知道如何跟踪多级包装 例如: 我目前有一个产品和职位表 产品 Id | Name ================ 1013 | Metal 1014 | Wood id | Name ================ 1 | 1-1-1-1 2 | 1-1-1-2 职位 Id | Name ================ 1013 | Metal 1014 | Wood id |
Id | Name
================
1013 | Metal
1014 | Wood
id | Name
================
1 | 1-1-1-1
2 | 1-1-1-2
职位
Id | Name
================
1013 | Metal
1014 | Wood
id | Name
================
1 | 1-1-1-1
2 | 1-1-1-2
我的库存表我想做这样的事情:
假设我在1-1-1-1位置存储了一个装有1000金属的盒子和一个装有500木材的盒子
ItemId | ProductId | Quantity | PositionId
==========================================
1 | 1013 | 1000 | 1
2 | 1014 | 500 | 1
所以我会在这两个盒子上分别贴上条形码1和条形码2,这样如果我扫描它们,我就可以检查这个表格,查看里面的产品和数量
但我也可以将这两个框(1和2)放在另一个框(我们称之为框3)中,这将为它生成一个新的条形码,如果扫描,将显示以前的框及其项目。然后将这个盒子3存放在另一个位置
我还可以把这个盒子3放在托盘里,生成一个新的代码等等。所以基本上我可以多层次包装N次
跟踪所有这些的最佳表结构是什么?提前感谢您的帮助 我会在products表中添加另一列,稍微做一点,或者称之为BOM、BillOfMaterials,或者任何对您有意义的东西 所以你的产品表应该是这样的 然后您可以创建另一个名为BillOfMaterials的表
数量是指新产品所需的产品数量。因此,在这个例子中,2个金属和1个木材组成了一支铅笔。我能够制作出一个良好的结构: 我的产品和位置相同,但我创建了一个库存表,如下所示:
id | product_id | amount | parent_id | position_id
=====================================================
1 | 1013 | 1000 | 4 | 1
2 | 1013 | 1000 | 4 | 1
3 | 1014 | 500 | 4 | 1
4 | 1234 | NULL | NULL | 1
1234(随机id)是一个包含2000个金属和500个木材的盒子。我没有将此框保存在产品表中
当我扫描id为3的框时,我执行递归cte查询:
with recursive bom as (
select *, 1 as level
from testing.stock
where id = '4' #scanned id
union all
select c.*, p.level + 1
from testing.stock c
join bom p on c.parent_id = p.id
)
select product_id as product, sum(amount), position_id
from bom b
left join testing.product pd on b.product_id = pd.id
where pd.id is not null
group by product_id, position_id
返回:
sum | product | position
2000 | 1013 | 3
500 | 1014 | 3
为了得到位置,我只运行上面查询的一个变体。要执行更新,我需要在该框中获取ID并运行
update testing.stock set position = '2' where id in (#variation of above query)
我希望这对某人有帮助。这适用于N包装级别听起来好像你在谈论物料清单或BOM,当你结合库存创建另一个项目时,对吗?我从来没有听说过BOM。在快速搜索之后,我发现这正是我所需要的。我将为BOM搜索一些数据库结构。谢谢如果你知道一个结构适合我的情况,请让我知道。我在下面添加了一个,希望它有帮助!如果你扫描一个BOM表,你有一个链接到所有的产品和该产品的数量,你能给出一些你想问这个数据库的问题的例子吗?BOM数据库结构的问题可能是回答诸如“哪个托盘有一个至少包含3个但不超过12个项目的金属盒”之类的问题。不要将答案编辑成问题,发布一个答案帖子。回滚。因为我创建的每个盒子(里面有其他盒子/包)都会生成一个新的唯一ID,所以我也必须将它添加到products表中,对吗?我也会尝试从你的帖子中创建我自己的结构,但它确实帮了我很大的忙。非常感谢。是的,把每个盒子都当作一个单独的产品,没有问题你的模型帮了我很大的忙,我可以用它来设计我自己的结构,它工作得很好。我可以使用递归cte执行所有选择和更新查询。非常感谢你,我能帮上忙!