连接到两个表之一的实体 - 关系图

时间:2014-09-16 12:42:40

标签: mysql sql database entity-relationship

我有三个实体 - '设备','模块'和'端口',并希望找到他们应该设计的正确方式实体 - 关系。

设备有许多模块

模块有多个端口

设备有多个端口

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

设备

  • 的DeviceID

模块

  • 的moduleId

端口

  • 端口ID
  • 的DeviceID
  • 的moduleId

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

非常感谢您的任何帮助或评论。

1 个答案:

答案 0 :(得分: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
  • 的ObjectID
  • 类型

并使用类似于:

的查询
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'

在任何一种情况下,您都可以查看获取PortDevice的{​​{1}}信息,然后两次链接到该表。