数据库关系表

时间:2012-12-28 13:19:46

标签: mysql database

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

所以这里有一些事实:

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

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

这样当问题出现时,数据库将如何运作?

每当我想看到100.000个房子中的任何一个时,它都属于一个城市的一个街区,我需要能够玩这个,就像我想要看到邻居#123城市的#5房子一样#8,然后我应该能够获得数据。

我正在考虑拥有一张包含所有100.000个房子的桌子,并且在那张桌子上有价值来告诉它在哪个城市的邻居,但感觉必须有更好的方式。 (也许使用多个表?我不知道)

所以任何帮助都会受到赞赏。

谢谢你的时间。

1 个答案:

答案 0 :(得分:2)

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

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

我最好的猜测如下:

  1. PLAYER与HOUSE是一对多的。如果不止一个PLAYER拥有相同的HOUSE,那么它就是多对多的。
  2. CITY是NEIGHBORHOOD的一对多
  3. NEIGHBORHOOD与HOUSE一对多
  4. 您可以通过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