我正在开发一个在线游戏项目,每个玩家都有一个房子,项目进展顺利,直到你不得不组织房屋,认为我将在服务器上限制10.000名玩家。
所以这里有一些事实:
每位玩家最多可拥有10间房屋(最小1)。 这意味着我需要100.000个可能的房子,这样无论服务器有多满,每个玩家总会有10个可能的房子。
将有20个城市,每个城市将有200个社区,每个社区将有25个房屋
这样当问题出现时,数据库将如何运作?
每当我想看到100.000个房子中的任何一个时,它都属于一个城市的一个街区,我需要能够玩这个,就像我想要看到邻居#123城市的#5房子一样#8,然后我应该能够获得数据。
我正在考虑拥有一张包含所有100.000个房子的桌子,并且在那张桌子上有价值来告诉它在哪个城市的邻居,但感觉必须有更好的方式。 (也许使用多个表?我不知道)
所以任何帮助都会受到赞赏。
谢谢你的时间。答案 0 :(得分:2)
很难回答,因为您的完整要求未知。
但我建议你规范化数据库 - 至少是第3范式。如果您不知道那是什么,我建议尽快了解它。
我最好的猜测如下:
您可以通过JOINS将玩家与城市,街区和房屋联系起来。您应该在所有表和适当的外键上具有代理主键。在所有其他候选键组合上添加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