2013-12-17 63 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

相關問題