我有三个实体 -“设备”、“模块”和“端口”,并且希望找到在实体关系中设计它们的正确方法。
一个设备有许多模块。
一个模块有许多端口。
一个设备有许多端口。
我设计了以下实体关系,我正在寻找它们是否正确的确认。
设备
- 设备ID
模块
- 模块ID
端口
- 端口ID
- 设备ID
- 模块ID
但是,如果端口可以位于两者中的任何一个上,我很困惑如何在端口表和设备或模块表之间进行联接。例如,如果我知道端口并想查找有关其父端口的信息。我的问题是,这个E-R图正确吗?如果端口可以属于设备或模块,我如何才能将端口与另一个表连接起来以获取有关其父级的信息?
提前非常感谢您的任何帮助或评论。
最佳答案
您的设置将会正常工作。 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
您的另一个选择可能是将端口
表更改为以下内容:
端口
- 端口ID
- 对象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'
无论哪种情况,您都可以看到要获取设备
和模块
的端口
信息,您链接到该表两次。
关于mysql - 连接到两个表之一的实体关系图,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25869086/