我有三个实体 - '设备','模块'和'端口',并希望找到他们应该设计的正确方式实体 - 关系。
设备有许多模块。
模块有多个端口。
设备有多个端口。
我设计了以下实体关系,如果它们是正确的,我正在寻找确认。
设备
模块
端口
但是,如果端口可以在两者之一上,我很困惑如何在端口表和设备或模块表之间建立连接。例如,如果我知道端口并想要找到有关其父级的信息。我的问题是,这个E-R图是否正确?如果它可以属于某个设备或模块,我如何能够与另一个表连接一个端口以获取有关其父级的信息?
非常感谢您的任何帮助或评论。
答案 0 :(得分: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'
在任何一种情况下,您都可以查看获取Port
和Device
的{{1}}信息,然后两次链接到该表。