代码之家  ›  专栏  ›  技术社区  ›  Jason

有趣的数据库架构场景

  •  0
  • Jason  · 技术社区  · 14 年前

    我目前正在滚动一个定制订单处理系统。我目前的结构相当标准,发票、采购订单和项目都保存在单独的表中。项目通过跟踪表单的id知道它们在哪个表单上,但是表单不知道它们(在数据库中)中有哪些项目。这一切都很好,直到我有一个新的要求添加到组合:库存订单。

    库存订单的工作方式是,有时客户订购的单位比库存的多,因此我们希望向供应商订购足够的单位来完成订单并补充库存。然而,我们常常不得不建立这些订单,因为最低限度是相当高的,所以一个库存订单通常是由几个客户订单(有时为同一个项目)加上一些行项目,这些项目没有连接到一个订单,只是为了库存的目的。

    这给我当前的体系结构带来了一个问题,因为我现在需要跟踪库存订单中的内容,因为供应商通常会发送部分订单、分配了哪些项目以及哪些传入项目用于库存。

    我最初的想法是创建一个新的数据库表,该表主要模拟items表,但有点像一个聚合(但不计算)表,它只跟踪项目及其对应的元数据(接收的单位数、库存的数量等),仅用于库存订单。如果两个表中的一个发生了变化(比如数量),我必须保持两个表同步。

    这是不是太过分了,也许还有更好的办法?数据库体系结构绝对不是我的强项,所以我希望有人能告诉我,这是一种好的方法,或者有一种更好、更正确的方法。

    非常感谢!

    值得一提的是,我使用的是:VB,.NET 4.0,MySQL 5.0

    另外,如果你想澄清什么,请问!我将密切关注这个问题。

    4 回复  |  直到 14 年前
        1
  •  2
  •   Walter Mitty    14 年前

    访问databaseanswers.com。导航到“免费数据模型”,然后查找“库存管理”。你应该找一些好的例子。

        2
  •  0
  •   Randy    14 年前

    你没有提到它们,但你需要一些桌子: 供应商、订单和库存

    此外,你提到的“知道”的基表可能需要关联样式多对多的表,这些表告诉你哪些项目是在哪个订单上的,哪些供应商提供哪些项目、交货期、成本等。

    查看您的实际模式会很有帮助。

        3
  •  0
  •   iDevlop    14 年前

    我使用一个DocType字段的Documents表。客户文件(订单、发票、形式表、交货、信用票据)与供应商文件(采购订单、收货)混合在一起。
    这使得计算客户缺货订单、供应商缺货订单等变得非常容易。。。 我只是有点不高兴,因为我为供应商和客户有不同的表,因此DOCUMENTS表同时有SupplierId字段和ClientId字段,这有点糟糕。如果我不得不重做,我可能会考虑一个包含客户和供应商的公司表。

    我使用了一个自动递增的PK(DocId)和一个类似xy00000的唯一键(DocNum)
    x=文件类型
    YY=年
    00000=增量。
    这是因为可以保存文档,但只有在验证时才能接收DocNum。

    要跟踪缺货订单(供应商或客户),您需要在DocDetails表中有一个分组字段,以便如果您有一个订单行12345,您可以将该链接字段复制到与之相关的每一个明细行(发票、交货)。
    希望我不要搞糊涂。经过3年5万多个医生的治疗,这个方法很有效。

        4
  •  0
  •   symcbean    14 年前

    这种方法还意味着您将拥有一个分配给订单的库存-没有单个项目跟踪它的管理有点棘手。考虑一下,客户A订单

    3 pink widgets
    1 blue widget
    

    但你只有一个粉红色的小部件库存-你订购3个粉红色的小部件,和1个蓝色。

    客户B订单

    2 pink widgets
    

    但你仍然只有一个库存-你订购了另一个粉红色的小部件

    第一个供应商订单中有3个粉色部件。你打算怎么办?您可以将它们全部保留给客户A的订单,并等待蓝色和红色小部件到达,也可以完成客户B的订单。

    如果粉色小部件的交货期是3天,而蓝色小部件的交货期是3周呢?你们是否向客户发送部分订单?你对持有的股票数量有限制吗?

    仅仅保留一张新的订单表是不够的。

    这东西很快就会变得很复杂。你当然需要花更多的时间分析这个问题。