1

好吧,我正在从事一个在线游戏项目,每个玩家都将拥有一所房子,该项目进展顺利,直到你不得不组织房子认为我将在服务器上限制 10.000 名玩家。

所以这里有一些事实:

每个玩家最多可以拥有 10 个房屋(最少 1 个)。 这意味着我需要 100.000 个可能的房屋,这样无论服务器有多满,每个玩家总会有 10 个可能的房屋。

将有 20 个城市,每个城市将有 200 个社区,每个社区将有 25 个房屋

所以当问题出现时,数据库将如何工作?

每当我想查看 100.000 间房屋中的任何一间时,它都属于一个城市的社区,我需要能够玩弄它,就像我想查看社区 #123 城市#8 的 #5 房子一样,那么我应该能够获取数据。

我正在考虑拥有一张包含所有 100.000 间房屋的桌子,并在这张桌子上设置值来判断它在哪个城市的哪个社区,但感觉必须有更好的方法。(也许使用多个表?我不知道)

所以任何帮助将不胜感激。

感谢您的时间。

4

1 回答 1

2

很难回答,因为您的完整要求是未知的。

但我建议您规范化数据库 - 至少是第 3 范式。如果您不知道那是什么,我建议您尽快了解它。

我的最佳猜测如下:

  1. PLAYER 与 HOUSE 是一对多的。如果不止一个玩家拥有同一个房子,那么它是多对多的。
  2. CITY 与 NEIGHBORHOOD 是一对多
  3. NEIGHBORHOOD 与 HOUSE 是一对多的

您将通过 JOINS 将 PLAYER 与城市、社区和房屋相关联。您应该在所有表上都有代理主键和适当的外键。在所有其他候选键组合上添加 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
于 2012-12-28T13:25:54.210 回答