2014-10-28 121 views
0

我正在實際上在服務器列表上工作,我想知道如何以最佳方式設計mysql表。 指數將呈現表有關服務器的基本信息:地址,端口,在線玩家,地圖,等級,... 服務器的說明,統計數據和其他的東西會在其他子頁面「有關服務器的詳細信息」MySQL設計數據庫

在這種哪種設計更好?

Servers(id, user_id, host, port, ...) 
ServersInformations(id, server_id, players, map, ...) 

或者只是

Servers(id, user_id, host, port, players, map, rank) 

,並在將在子頁面 「有關服務器的詳細信息」

回答

0

通常在數據庫中的表不一定反映您的網頁,卻反映你的數據之間的關係。

如果我們在這裏你有2個表,ServersServerInformation你的第一個案例。你有一個外鍵ServerInformation.server_id,(我認爲)引用Servers.id

在這種情況下你所暗示的是一個Server可能必須在ServerInformation表(即一個一對多的關係)的多個條目,都具有相同的server_id值,除非你做出unique,其中它會成爲一對一的關係。

如果您使用第二種方法使用一個Servers表,您仍然只能獲取索引頁所需的字段。你會做一個簡單的查詢,只是讓你需要的字段,例如:select id, user_id, host, port from servers

除非你在第一種方法非常特殊原因需要兩個表分開(例如一些Server項沒有ServerInformation條目,或者如果將其設置爲nullable,您希望某些ServerInformation條目的server_id設置爲null),則可能該一個表格方法更適合。

+0

太棒了,謝謝:) – san 2014-10-28 17:57:49

+0

如果答案是足夠的,請選擇它作爲你的問題的答案 – jbx 2014-10-28 18:29:38

0

每一頁上的信息放進什麼樣的信息呈現

ServersInformations() 

其餘的信息是真的無關緊要。唯一重要的是你將要存儲的數據類型。除了包含多個值的列之外,您應該將所有關於服務器的信息存儲在單個表中。

例如,如果您的players列僅僅是玩家人數的計數,那麼這可以是Servers表的一部分。

如果players列acually包含的球員名單,你應該做一個新表吧,例如

ServerPlayers(id, playerName, ServerId)

+0

謝謝!!! :) – san 2014-10-28 17:58:21