2012-05-25 140 views
0

我想为建设仓库(那里存储材料建设)的数据库。我需要知道存储的所有材料(产品),所有销售的产品以及所有剩下的产品。 我想这样做是这样的:努力与数据库设计/关系


Products--> Deliver <--Depot (many to many) - here I see all the products in. 

Depot--> Sell <--Products (many to many) - here I see what I have sold. 

And what is left: To make a difference between "Deliver" and "Sell". 

有什么正确的吗?你有另一个想法吗?感谢您的帮助。

回答

2

处理库存跟踪系统的另一种方式是像复式记账系统那样处理它。这样你就可以将你的DeliverSell表组合成库存Movement表。每个动作将由两个记录组成,一个记录为正数量,另一个记录为负数量。

以这种方式处理您的库存系统的优势在于,可以轻松使用汇总查询来获取某个时间点任何产品库中任何产品的库存位置(现有库存)。


编辑:表结构...

PRODUCT 
-ID (PK) 
-Description 
-... 

DEPOT 
-ID (PK) 
-Name 
-Location 
-... 

MOVEMENT 
-ID (PK) 
-DateTime 
-ProductID (FK) 
-DepotID (FK) 
-Quantity /* Positive=Increase, Negative=Decrease */ 
-OffsettingMovementID (FK) /* Points to the other half of the entry */ 
+0

所以,你说,我将有一个表产品,车厂和运动,这将是一个多对多的产品 - >运动< - Depot,并且在Movement表中,我将拥有Product和Depot的外键列和两个名为In和Out的列。 In - Positive,Out - negative。喜欢这个? –

+0

@MorarMihai - 我编辑了我的答案,包括样本列。这个想法不是有两列:_in_和_out_。这个想法是每笔交易都有两条记录,一条显示移出(数量<0),另一条显示移动(数量> 0)。交易的这两部分可以与渐进的FK或通用交易ID号码相链接,无论你喜欢哪一个。任何时候获取任何仓库中任何产品的库存位置都会成为一个简单的SUM查询。 –

+0

谢谢乔尔,你真的帮了我。 –