数据库设计多表的主键链接到一个表
我有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会不同。
随着服务器和打印机表具有相同的结构,我建议有一个单独的表来存储的主机名与hardware_type列区分硬件。我们可以有另一个表来存储设备类型和设备名称的映射。另外,如果vm表具有相同的结构(?),我们也可以在主表中合并该表。
ip_address的结构可以根据主机名是否唯一而改变。需要有完整的结构来详细阐述。
它们不具有相同的结构。所以我不能合并它们。 – Lin
两台服务器/打印机可能具有相同的主机名。在这种情况下,我们需要有一些机制来检查哪个主机名属于哪个服务器。因此,我建议在ip地址表中有device_type(server/printer/vm)和serial_number来区分,但vm表中没有serial_number列。是否有可能改变这三个表中的任何一个的结构? –
谢谢你的建议。我在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
请详细描述您的问题。你尝试了什么?我不明白为什么你只需要一列表虚拟机。提供更多细节。 – smartmeta
虚拟机表有很多列,但我只在这里放了必要的一个。每台服务器,打印机和VM可能有多个IP地址。所以我有一个ip_address表来插入每个设备的IP地址。你明白我的意思吗? – Lin