【问题标题】:Struggling with database design/relations苦苦挣扎于数据库设计/关系
【发布时间】:2012-05-31 16:48:10
【问题描述】:

我正在尝试为建筑仓库创建一个数据库(那里存储了建筑材料)。我需要知道所有存储的材料(入库的产品)、所有售出的产品以及所有离开的产品。 我正在考虑这样做:


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

这里有什么正确的吗?你有别的想法吗?感谢您的帮助。

【问题讨论】:

    标签: database-design create-table


    【解决方案1】:

    处理库存跟踪系统的另一种方法是将其视为复式记帐系统。这将使您将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 */
    

    【讨论】:

    • 所以,你说我将有一个表 Products、Depot 和 Movement,这将是多对多 Product -> Movement
    • @MorarMihai - 我已经编辑了我的答案以包含示例列。这个想法不是有两列:inout。这个想法是每笔交易都有两条记录,一条显示移动(数量 0)。交易的这两部分可以与一个内卷 FK 或一个公共交易 ID 号相关联,无论您喜欢哪个。随时获取任何仓库中任何产品的库存位置变成了直接的 SUM 查询。
    • 谢谢乔尔,你真的帮助了我。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-07
    • 2020-05-30
    • 2018-07-20
    相关资源
    最近更新 更多