2012-12-28 149 views
1

那麼我正在開發一個在線遊戲項目,每個玩家都會有一個房子,這個項目一直很好,直到你不得不組織房子爲止,因爲我認爲我的服務器上有10,000個玩家。數據庫關係表

所以這裏有一些事實:

每個玩家最多可以有10個住宅(分1)。 這意味着我需要100.000個可能的房子,這樣無論服務器有多滿,總會有10個可能的房子給每個玩家。

將有20個城市,每個城市將有200個社區,每個街區都會有25間房屋

因此多數民衆贊成在問題出現時,怎麼會在數據庫方面的工作?

每當我想看到任何一個100.000房屋,它將屬於一個城市的鄰居,我需要能夠玩,就像我想看到房子#5的鄰居# 123#8的城市,那麼我應該能夠獲得這些數據。

我在想有一張桌子和所有100.000棟房子,並且在那張桌子上有價值的東西來說明哪個街區在哪個城市,但感覺好像必須有更好的方式。 (也許使用多個表?我不知道)

所以任何幫助,將不勝感激。

謝謝你的時間。

回答

2

這很難回答,因爲您的完整需求未知。

但我建議你規範化數據庫 - 第三範式至少。如果你不知道這是什麼,我建議儘快瞭解它。

我最好的猜測是:

  1. PLAYER是一個一對多與HOUSE。如果多個PLAYER擁有相同的HOUSE,那麼它是多對多的。
  2. CITY是一對多的鄰里
  3. 社區是一個一對多與HOUSE

你會做連結到一個球員與城市,社區,和房子聯繫在一起。您應該在所有表和適當的外鍵上代理主鍵。在所有其他候選鍵組合上添加UNIQUE索引。

對所有查詢運行EXPLAIN PLAN以確保它們不需要TABLE SCAN並充分執行。

10,000個玩家對於數據庫來說不是一個大數字。你不會有任何問題。

這裏就是您的查詢選擇在附近所有的房子可能看起來像:

SELECT * 
FROM HOUSE H 
INNER JOIN NEIGHBORHOOD N 
ON H.HOUSE_ID = N.HOUSE_ID 
INNER JOIN CITY C 
ON N.NEIGHBORHOOD_ID = C.NEIGHBORHOOD_ID 
WHERE C.CITY_ID = 8 
AND N.NEIGHBORHOOD_ID = 123 
ORDER BY H.HOUSE_ID 
+0

以及其良好的知道10。000不是一個很大的數字,我很害怕這個,我在考慮一對多的關係,但我不知道它是如何工作的,只能說對於城市和鄰居,當我需要爲每個鄰居添加鄰居時,我會感到困惑城市,如果我有2個城市,我需要2個鄰里表嗎?,一個例子會很好,我覺得我可以很容易理解這一點,但我只是困惑。 – Xeinnex

+0

不,你只需要我提出的表格。一個街區將意味着鄰居表中的一排;兩個城市將在CITY表中顯示兩行,每個行都有一個指向其父城市的外鍵。您可以通過插入更多行來添加更多行,而不是創建更多表。它以這種方式更好地擴展,因爲數據庫已經過優化以處理大量的行。 – duffymo

+0

是的,但事情是,那麼我將不得不在neiborbor表中的所有4000個社區,每個200與fk到他們的城市,是嗎? – Xeinnex