2012-12-28 98 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