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

标签 mysql sql database entity-relationship

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

一个设备有许多模块

一个模块有许多端口

一个设备有许多端口

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

设备

  • 设备ID

模块

  • 模块ID

端口

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

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

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

最佳答案

您的设置将会正常工作。 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

您的另一个选择可能是将端口表更改为以下内容:

端口

  • 端口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/

相关文章:

在大型数据库中使用 JOIN 进行 MySQL 查询

php - WAMP 服务器不允许访问 PHPMyAdmin

mysql - 查询 MySQL 数据库

mysql - MySQL做GROUP BY时自然是 "choose"哪一行?

MySQL:如果值仅为数字则更新列

php - 从表中获取多个值

mysql - 统计 SQL 查询结果的出现次数

sql-server - SQL 服务器 : wrong index is used when filter value exceeds the index histogram range

sql - 免费/便宜的 PowerDesigner 替代品?

php - 使用 php 将图像保存到不同的 url