ER图 - 显示Office和其分支的交付

Goo*_*all 12 sql erd entity-relationship

对于一个小项目,我正在为一个简单的股票跟踪应用程序创建一个实体关系图.

用户故事

产品由产品供应商销售.产品由办公室订购并交付给他们.可能需要一次或多次交货才能完成订单.这个办公室订购的这些产品又交付给各个分支机构.是否有一般的方式可以表明办公室如何将股票分配给它负责的分支机构?

ER图

这是一个描述上述内容的非常简化的图表.

ER图

交付将交给办公室,然后交给分支机构.作为HeadQuarters子项的每个部门(图中未显示)具有不同数量的库存,不一定与OrdersDetail具有一对一的对应关系.问题是如何在给定当前模式的情况下显示各个部门的清单,或者以更容易显示的方式对其进行修改.

更新:启动赏金并创建新的ERD图.

nom*_*tic 6

这有点奇怪的结构.通常我处理这个的方式不会是你在这里的菊花链结构,而是会使用某种基于事务的系统.

我处理它的方式就是把所有东西都关掉order,然后把have one-to-many关系从中解脱出来.

举例来说,我看到你有与OrderDetail关闭的Order,但是这永远是一个子集Order.所有订单总是有细节; 我将链接OrderDelivery到主Order表之间,并且可以随时访问详细信息,只需将其作为参考表而不是关闭OrderDetailDelivery.

我有Office一个领域,OrderDelivery并且也Branch以这种方式使用.如果你想为它们设置单独的表,那很好,但我会把它OrderDelivery作为这些的中心位置.A null可以指示它是否已经交付,然后您可以使用您的应用程序层来处理流程的顺序.

换句话说,OfficeID并且BranchID可以作为字段存在,以指示其各自表的外键OrderDelivery

编辑

由于设计有所改变(并且看起来确实更好),我想指出的一件事是你拥有supplier与之相同的元数据Delivery. Supplier对我来说听起来像一个实体,而是Delivery一个过程.我认为它Supplier可以作为参考表自己生活得很好.换句话说,您不需要在此表中包含所有相同的元数据; 相反,你可能想要创建一个表(就像你现在一样supplier),而是调用SupplierDelivery.

我看到的一点是,您希望能够通过其所有检查点跟踪各种产品的所有订单.考虑到这一点,您可能不一定希望为此设置单独的实体,而是跟踪SupplierDate其中一个字段Delivery.无论哪种方式,我都不会太挂在结构上; 您的应用程序层将处理大量此事.

有一件事我要非常小心:如果多个表具有相同名称的字段,但不是彼此引用的键,则可能希望创建不同的名称.例如,如果deliveryDate供应商与同一个密钥不同Delivery,您可能需要考虑将其称为类似的东西,shipDate或者如果您指的是它到达供应商的日期,supplierDeliveryDate否则您将来可能会对您的查询产生很大的困惑,并且会在没有大量注释的情况下使代码极难解析.

编辑以包含图表[再次编辑以获得更好的图表]:

以下是我如何处理它.你的重做图非常接近,但这里有一些变化 在此输入图像描述

我的解释:

最简单的方法是首先使用不同的实体进行设置,然后设置它们之间的关系,并确定是否需要链接表.

不同的实体如下所述:

  • 订购
  • 产品
  • 供应商

总部,虽然我把它包括在内但实际上并不是图表的必要组成部分; 大概是订单和要求在这里提出,但我的理解是,订单在任何时候都不会流经总部; 它更像是一个中央处理区域.我收集的产品不是通过总部运行,而是直接进入分支机构.如果他们这样做(这可能会减慢交付流程,但这取决于你),你可以用它替换Branch,并像以前一样将分支作为它的链接.否则,我认为你可以安全地从图表中删除它.

链接表

这些是针对出现的多对多关系而设置的.

  • OrderProductDetail - 订单可以有很多产品,许多订单可以拥有相同的产品.每个主键组合可以与每个订单的多个产品相关联[编辑:见下文,现在通过SupplierProduct将订单,产品和供应商联系在一起 ].由于这是一个链接表,因此每个订单可以包含任意数量的产品.
  • SupplierProduct - 这是假设同一产品有多个供应商,并且一个供应商可能有多个产品,因此创建此链接表以处理每个产品可用的库存. 编辑: 现在这是与OrderProductDetail的直接链接,因为有意义的是,各个供应商都有一个指向订单的链接,而不是删除了两个表. 这可以作为组合供应商和产品的中心链接,但随后绑定到OrderProducDtail.由于这是一个链接表,您可以让任意数量的供应商提供任意数量或数量的产品.
  • 交货 - 分支机构可以收到许多交货,正如您所提到的,订单可能会根据供货情况分成不同的部分.出于这个原因,这链接到OrderProductDetail,它保存每个产品的特定金额.由于OrderProductDetail已经具有双主键链接表,订单ID具有双主键关机的外键OrderProductDetail使用的配对按键的productId订单ID,以确保有一个更大的订单内的特定产品的独特关联.

总结一下,supplierProduct包含供应商和产品的组合,然后传递给OrderProductDetail,它将这些与订单的细节相结合.这个表基本上完成了大部分工作,在将所有内容传递到分支之前将它们放在一起.

注意:上次编辑:向OrderProductDetail添加了供应商ID,并从supplierProduct切换到supplierId和productId的双主键,以确保您有更清晰的方式确保产品从供应商到OrderProductDetail的方式足够精细.

我希望这有帮助.