【问题标题】:Entity-Relationship diagram with join to either of two tables连接到两个表中的任何一个的实体关系图
【发布时间】:2014-09-18 01:18:40
【问题描述】:

我有三个实体——“设备”、“模块”和“端口”,并希望找到在实体关系中设计它们的正确方式。

一个设备有很多模块

一个模块有很多端口

一个设备有很多端口

我设计了以下实体关系,我正在寻找它们是否正确的确认。

设备

  • 设备ID

模块

  • 模块ID

端口

  • 端口号
  • 设备ID
  • 模块ID

但是,如果端口可以位于两者中的任何一个上,我很困惑如何在端口表和设备或模块表之间进行连接。例如,如果我知道端口并想了解有关其父级的信息。我的问题是,这个 E-R 图正确吗?如果它可以属于设备或模块,我如何能够将一个端口与另一个表连接以获取有关其父级的信息?

非常感谢任何帮助或 cmets。

【问题讨论】:

    标签: mysql sql database entity-relationship


    【解决方案1】:

    您的设置将正常工作。 Port 表将具有 DeviceIDModuleID。另一个将为 null

    获取所有信息的查询可能如下所示:

    SELECT d.*, m.*, p1.PortID as ModulePort, p2.PortID as DevicePort, 
    FROM Device d
    INNER JOIN Module m On d.ModuleID = m.ModuleID
    INNER JOIN Ports p1 on p1.ModuleID = m.ModuleID
    INNER JOIN Ports p2 on p2.DeviceID = m.DeviceID
    

    您的其他选择可能是将Port 表更改为以下内容:

    端口

    • 端口号
    • 对象ID
    • 类型

    并使用类似于以下的查询:

    SELECT d.*, m.*, p1.PortID as ModulePort, p2.PortID as DevicePort, 
    FROM Device d
    INNER JOIN Module m On d.ModuleID = m.ModuleID
    INNER JOIN Ports p1 on p1.ObjectID = m.ModuleID AND Type = 'Module'
    INNER JOIN Ports p2 on p2.ObjectID = m.DeviceID AND Type = 'Device'
    

    在任何一种情况下,您都可以看到获取DeviceModulePort 信息,您链接到表两次。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-08-04
      • 2015-05-01
      • 2018-11-20
      • 1970-01-01
      相关资源
      最近更新 更多