MySQL:创建更多数据库还是使用ID更好?

MySQL:创建更多数据库还是使用ID更好?,mysql,database,Mysql,Database,我正在开发一款基于web的RPG游戏,我希望能够运行不同的“服务器”,但我不确定最好的方式是什么 第一个想法:创建一个名为“world”的表。当创建一个角色时,他们可以选择一个要加入的世界,通过获取一个世界id来告诉他们所处的世界 第二个想法:从模板创建一个全新的数据库,然后使用带有ID的会话和开关表连接到正确的数据库 请记住,我希望人们能够在自己的服务器上进行新任务、物品、怪物等,而不会影响其他服务器。我知道第一个想法可以做到,但我不确定这是否是最好的方法,因为我总是需要检查world_id是

我正在开发一款基于web的RPG游戏,我希望能够运行不同的“服务器”,但我不确定最好的方式是什么

第一个想法:创建一个名为“world”的表。当创建一个角色时,他们可以选择一个要加入的世界,通过获取一个世界id来告诉他们所处的世界

第二个想法:从模板创建一个全新的数据库,然后使用带有ID的会话和开关表连接到正确的数据库

请记住,我希望人们能够在自己的服务器上进行新任务、物品、怪物等,而不会影响其他服务器。我知道第一个想法可以做到,但我不确定这是否是最好的方法,因为我总是需要检查world_id是否有任何变化。我也有点担心使用会话来更改数据库,但因为它是在一个切换的情况下,我不认为任何人可以使用它来做MySQL注入

p.S:我希望用户帐户适用于所有数据库,这样他们就不必创建新帐户在另一个数据库上玩,也不必在论坛上发帖

编辑:我不是说运行几个MySQL服务器,我的意思是使用类似的东西

function openConnection($db = 0){
    switch($db){
        case 1: $db_name = "database_two"; break;
        case 2: $db_name = "database_three"; break;
        case 3: $db_name = "database_four"; break;
        case 4: $db_name = "database_five"; break;
        default: $db_name = "database_one";
    }

    try{
        $conn = new PDO("mysql:host=127.0.0.1;dbname={$db_name};","<user>","<password>");
        $conn -> setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
        $conn -> exec("SET NAMES utf8");
        $conn -> exec("USE {$db_name};");
        return $conn;
    }catch(PDOException $e){
        echo "<b>ERROR:</b> ".$e->getMessage(); exit;
    }
}
函数openConnection($db=0){
交换机($db){
案例1:$db_name=“database_two”中断;
案例2:$db_name=“database_three”中断;
案例3:$db_name=“database_four”中断;
案例4:$db_name=“database_five”中断;
默认值:$db_name=“database_one”;
}
试一试{
$conn=newpdo(“mysql:host=127.0.0.1;dbname={$db_name};”,“”,“”);
$conn->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_异常);
$conn->exec(“设置名称utf8”);
$conn->exec(“使用{$db_name};”);
返回$conn;
}捕获(PDO$e){
echo“错误:”..e->getMessage();退出;
}
}

将所有游戏数据保存在单独的数据库中。

Yemto,我还在开发一个基于网络的RPG

尝试更改查看数据库的方式。数据库是一种存储和组织数据点的方法,如果用户请求,您可以访问这些数据点

因此,我并不认为有必要使用“切换”表之类的复杂方法,只需将所需的所有世界数据存储在一个数据库中,并将其传递给用户

如果需要收集多个与特定条件相匹配的表数据,并与传入的用户id会话相匹配,则可以在同一数据库中连接表,例如:

$qry = 
    'SELECT us.*, w.*, q.* 
    FROM user_stats us
    INNER JOIN worlds w ON (w.world_id = us.world_id)
    INNER JOIN quests q ON (q.quest_id = us.current_questnum)
    WHERE us.user_id_fk = "' . $_SESSION['userid'] . '"';

然后,使用这些匹配项和返回的数据(例如,对于$\u会话用户id,返回世界2),您可以在前端生成新的“世界”实体/环境(使用您的引擎…可能实例化一个新类,该类初始化tilemap和其中的其他对象)并将其交付给用户。

在我的选择中,第一种方法比从Scratch创建一个全新的数据库要简单得多,因为您还没有为整个系统架构提供足够的上下文。为什么需要多台服务器,而不是同一服务器或服务器群集中的多个环境?如果是单个服务器,您的MySQL数据库是否与应用程序运行在相同的服务器上,或者它们是否被抽象到自己的DB服务器中?服务器的设置是否出于地理原因(即服务器在全球多个位置以提高延迟?用户帐户是由直接调用数据库的应用程序处理的,还是有单独的用户帐户服务?@MikeBrat我认为您一直在使用“服务器”这个词),这在我的帖子中只提到过一次。它们将在同一个MySQL服务器和用户中运行。但在不同的数据库中,以保持主键较低,并确保如果管理员想要更改游戏的某些内容,则不可能更改其他数据库。我很清楚这一点,这就是为什么我提出第一个想法,where另一个“服务器”将只给角色一个世界id,以获取该世界的所有设置、任务和其他特定内容。但我想知道是否最好使用不同的数据库来保持主键较低,并且出于安全原因将所有数据分开。@是的,这取决于你的目标是什么……你对arc的需求是什么HIT体系结构(如上所述)。您试图保护哪些数据?为什么将您的
世界id
保存在一个单独的服务器中会有帮助,并使您的应用程序更安全?我想说,也许个人信息收集或支付信息可以与游戏数据分离到一个单独的服务器中…这可能是有意义的。哦,我不打算只保留
世界id
在一个单独的服务器中。我想将所有游戏数据存储到不同的数据库中,但在同一个MySQL服务器上,这样运行不同数据库的人就更容易进行更改。否则,我需要一个表来确保没有暴徒、任务、物品等出现在错误的世界中。