sql - ER 图 - 显示到办公室及其分支机构的交付

标签 sql entity-relationship erd

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

用户故事

产品由产品供应商销售。产品由办公室订购并交付给他们。可能需要一次或多次交货才能完成订单。该办事处订购的这些产品依次交付给各个分支机构。有没有一种通用的方法可以代表办公室如何将库存分配到它负责的分支机构?

ER图

这是描述上述内容的非常简化的图表。

ER Diagram

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

更新:开始赏金并创建新的 ERD 图。

最佳答案

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

我处理它的方法是把所有东西都关掉 order , 和 have one-to-many关系关闭。

例如,我确实看到你有 OrderDetail关闭 Order ,但是这将始终是 Order 的子集.所有订单都会有详细信息;我会链接 OrderDelivery关主Order表,并在任何时候都可以访问详细信息作为它的引用表而不是 OrderDetailDelivery .

我有 Office作为 OrderDelivery 上的字段并使用 Branch也是这样。如果您想为它们设置单独的表,那很好,但我会使用 OrderDelivery作为这些的中心位置。一个 null可以指示它是否已交付,然后您可以使用您的应用程序层来处理流程的顺序。

换句话说,OfficeIDBranchID可以作为字段存在以指示其各自表的外键 OrderDelivery
编辑

由于设计有所改变(而且看起来确实更好),我想指出的一件事是您有 supplier具有与 Delivery 相同的元数据. Supplier对我来说听起来像一个实体,而 Delivery是一个过程。我认为 Supplier作为引用表,它本身可能会很好地生活。换句话说,您不需要在该表中包含所有相同的元数据;相反,您可能想要创建一个表(很像您现在为 supplier 所做的那样),而是调用 SupplierDelivery .

我看到的一点是,您希望能够通过其所有检查点跟踪各种产品的订单的所有部分。考虑到这一点,您可能不一定希望为此拥有一个单独的实体,而是跟踪类似 SupplierDate 的内容。作为 Delivery 上的字段之一.无论哪种方式,我都不会太执着于结构;您的应用程序层将处理大量此类事务。

我会非常小心的一件事:如果多个表具有相同名称的字段,但不是相互引用的键,您可能希望创建不同的名称。例如,如果 deliveryDate供应商上的与 Delivery 上的相同键不同,你可能想考虑把它叫做 shipDate或者,如果您指的是到达供应商的日期,supplierDeliveryDate否则,您将来可能会因查询而混淆自己,并且会使您的代码在没有大量注释的情况下极难解析。

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

下面是我将如何处理它。你的重做图非常接近,但这里有一些变化
enter image description here

我的解释:

最简单的方法是先设置不同的实体,然后再设置它们的关系,然后确定是否需要链接表。

不同的实体如下所述:

  • 订购
  • 产品
  • 供应商
  • 分公司

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

    链接表

    这些是为出现的多对多关系而设置的。
  • 订购产品详情 - 订单可以有多个产品,多个订单可以有相同的产品。每个主键组合可以与每个订单的多个产品相关联[编辑:见下文,现在通过 SupplierProduct 将订单、产品和供应商联系在一起]。因为这是一个链接表,所以每个订单可以有任意数量的产品。
  • 供应商产品 - 假设同一产品有多个供应商,并且一个供应商可能有多个产品,因此创建此链接表以处理每个产品的可用库存。 编辑:这现在是到 OrderProductDetail 的直接链接,因为单个供应商有一个到订单的链接是有意义的,而不是删除两个表。这可以作为组合供应商和产品的中央链接,但随后绑定(bind)到 OrderProducDtail。由于这是一个链接表,您可以让任意数量的供应商提供任意数量或数量的产品。
  • 发货 - 分店可以收到很多货品,正如您所提到的,订单可能会根据可用性分成不同的部分。出于这个原因,这链接到 订购产品详情 这是每个产品的具体数量。自 订购产品详情 已经是双主键的链接表,orderId 有双主键的外键订购产品详情 使用 productId 和 orderId 的配对键来确保与较大订单中的特定产品有明显的关联。

  • 总结一下,供应商产品包含供应商和产品的组合,然后传递给 订购产品详情 它将这些与订单的详细信息结合起来。这张 table 基本上完成了大部分工作,在它通过交付到分支机构之前将所有东西放在一起。

    注:上次编辑:将供应商 id 添加到 OrderProductDetail 并从供应商产品切换到供应商 ID 和产品 ID 的双主键,以确保您有一种更清晰的方法来确保您可以在产品从供应商到 OrderProductDetail 的方式上足够细化。

    我希望这会有所帮助。

    关于sql - ER 图 - 显示到办公室及其分支机构的交付,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29581163/

    相关文章:

    uml - 将 ERD 转换为类图

    mysql - 这种类型的子句之前已被解析过

    php - MYSQL 日期范围查询无法正常工作

    sql - 在 SQL Server 中为名字和姓氏的首字母创建触发器

    ios - 如何在 swift 中使用实体关系从核心数据中获取数据?

    sql - 映射 1 :1 relationship on a relational schema

    database - 在 SchemaSpy 中使用 SSL 连接逆向工程 PostgreSQL 数据库

    sql - PostgreSQL插入多个表,在第二次插入中使用第一次插入的外键

    c# - ASP.NET MVC 中的模型关系

    nhibernate - 如何处理 API 中的多对多关系