Database design 与数据库设计/关系抗争

Database design 与数据库设计/关系抗争,database-design,create-table,Database Design,Create Table,我正试图为一个建筑仓库建立一个数据库(那里储存着建筑材料)。我需要知道储存的所有材料(产品),销售的所有产品和剩下的所有产品。 我想这样做: 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

我正试图为一个建筑仓库建立一个数据库(那里储存着建筑材料)。我需要知道储存的所有材料(产品),销售的所有产品和剩下的所有产品。 我想这样做:


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".


产品-->交付-销售处理库存跟踪系统的另一种方法是将其视为一个复式记账系统。这将使您将
交付
销售
表合并到一个库存
移动
表中。每一个移动将由两个记录组成,一个是正数,一个是负数

以这种方式处理库存系统的优点是,使用聚合查询很容易获得某个时间点任何仓库中任何产品的库存位置(现有库存)


编辑:表格结构

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 */

所以,你说我将有一个表Products,Depot和Movement,这将是一个多对多Product->Movement@MorarMihai-我已经编辑了我的答案,以包括示例列。我们的想法不是要有两个栏目:in和out。其思想是每个事务都有两条记录,一条显示移出(数量<0),另一条显示移入(数量>0)。交易的这两半可以用一个内卷FK或一个通用交易ID号链接,以您喜欢的为准。在任何时间,在任何仓库获取任何产品的库存情况都成为一个直接的求和查询。谢谢你,乔尔,你真的帮助了我。