【问题标题】:Entity-Relationship diagram with join to either of two tables连接到两个表中的任何一个的实体关系图
【发布时间】:2014-09-18 01:18:40
【问题描述】:
我有三个实体——“设备”、“模块”和“端口”,并希望找到在实体关系中设计它们的正确方式。
一个设备有很多模块。
一个模块有很多端口。
一个设备有很多端口。
我设计了以下实体关系,我正在寻找它们是否正确的确认。
设备
模块
端口
但是,如果端口可以位于两者中的任何一个上,我很困惑如何在端口表和设备或模块表之间进行连接。例如,如果我知道端口并想了解有关其父级的信息。我的问题是,这个 E-R 图正确吗?如果它可以属于设备或模块,我如何能够将一个端口与另一个表连接以获取有关其父级的信息?
非常感谢任何帮助或 cmets。
【问题讨论】:
标签:
mysql
sql
database
entity-relationship
【解决方案1】:
您的设置将正常工作。 Port 表将具有 DeviceID 或 ModuleID。另一个将为 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 表更改为以下内容:
端口
并使用类似于以下的查询:
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'
在任何一种情况下,您都可以看到获取Device 和Module 的Port 信息,您链接到表两次。