2013-12-17 70 views
-2

我有4个表。数据库设计多表的主键链接到一个表

server : serial_number{PK}, host_name 
printer : serial_number{PK}, host_name 
VM : host_name{PK} 
ip_address : host_name{PK}, ip_address{PK} (composite key) 

服务器,打印机和VM表一对多ip_address表。
我通过host_name将它们链接起来。

这是正确的吗?

为了使我的问题更加明确,我现在已经是

服务器1 -------- * IP_ADDRESS
打印机1个-------- * IP_ADDRESS
VM 1 -------- * ip_address

每个表的host_name会不同。

enter image description here

+1

请详细描述您的问题。你尝试了什么?我不明白为什么你只需要一列表虚拟机。提供更多细节。 – smartmeta

+0

虚拟机表有很多列,但我只在这里放了必要的一个。每台服务器,打印机和VM可能有多个IP地址。所以我有一个ip_address表来插入每个设备的IP地址。你明白我的意思吗? – Lin

回答

0

随着服务器和打印机表具有相同的结构,我建议有一个单独的表来存储的主机名与hardware_type列区分硬件。我们可以有另一个表来存储设备类型和设备名称的映射。另外,如果vm表具有相同的结构(?),我们也可以在主表中合并该表。

ip_address的结构可以根据主机名是否唯一而改变。需要有完整的结构来详细阐述。

+0

它们不具有相同的结构。所以我不能合并它们。 – Lin

+0

两台服务器/打印机可能具有相同的主机名。在这种情况下,我们需要有一些机制来检查哪个主机名属于哪个服务器。因此,我建议在ip地址表中有device_type(server/printer/vm)和serial_number来区分,但vm表中没有serial_number列。是否有可能改变这三个表中的任何一个的结构? –

+0

谢谢你的建议。我在ip_address表中添加了device_type。 host_name将是唯一的。所以不用担心。我的理解是 - 如果服务器表链接到ip_address表,ip_address.host_name是FK。并且打印机表链接到ip_address表,ip_address.host_name是FK。这意味着ip_address.host_name值必须位于服务器和打印机表中。我对吗?我不想要这种情况,因为服务器和打印机的host_name是唯一的。 – Lin

相关问题