【发布时间】:2023-03-20 23:18:01
【问题描述】:
我正在制作一个在线游戏,并在我的数据库中创建一个表格。可能是最重要的一个。它开始变得非常大。我正在创建一个函数,您可以在其中与多个用户一起使用,为此我有一个到目前为止看起来像这样的表:
CREATE TABLE `oc` (
`id` int(11) NOT NULL auto_increment,
`leader` varchar(40) NOT NULL default '',
`car` int(11) NOT NULL default '0',
`car_type` char(2) NOT NULL default '',
`seats` varchar(3) NOT NULL default '0',
`share` enum('1','2') NOT NULL default '1',
`location` varchar(100) NOT NULL default '',
`user1` varchar(40) NOT NULL default '',
`user2` varchar(40) NOT NULL default '',
`user3` varchar(40) NOT NULL default '',
`user4` varchar(40) NOT NULL default '',
`user5` varchar(40) NOT NULL default '',
`user6` varchar(40) NOT NULL default '',
`user7` varchar(40) NOT NULL default '',
`user8` varchar(40) NOT NULL default '',
`user9` varchar(40) NOT NULL default '',
`leader_gun` char(2) NOT NULL default '',
`user1_gun` char(2) NOT NULL default '',
`user2_gun` char(2) NOT NULL default '',
`user3_gun` char(2) NOT NULL default '',
`user4_gun` char(2) NOT NULL default '',
`user5_gun` char(2) NOT NULL default '',
`user6_gun` char(2) NOT NULL default '',
`user7_gun` char(2) NOT NULL default '',
`user8_gun` char(2) NOT NULL default '',
`user9_gun` char(2) NOT NULL default '',
`user1_inv` varchar(40) NOT NULL default '',
`user2_inv` varchar(40) NOT NULL default '',
`user3_inv` varchar(40) NOT NULL default '',
`user4_inv` varchar(40) NOT NULL default '',
`user5_inv` varchar(40) NOT NULL default '',
`user6_inv` varchar(40) NOT NULL default '',
`user7_inv` varchar(40) NOT NULL default '',
`user8_inv` varchar(40) NOT NULL default '',
`user9_inv` varchar(40) NOT NULL default '',
`user1_ready` enum('0','1') NOT NULL default '1',
`user2_ready` enum('0','1') NOT NULL default '1',
`user3_ready` enum('0','1') NOT NULL default '1',
`user4_ready` enum('0','1') NOT NULL default '1',
`user5_ready` enum('0','1') NOT NULL default '1',
`user6_ready` enum('0','1') NOT NULL default '1',
`user7_ready` enum('0','1') NOT NULL default '1',
`user8_ready` enum('0','1') NOT NULL default '1',
`user9_ready` enum('0','1') NOT NULL default '1',
PRIMARY KEY (`id`)
) TYPE=MyISAM ;
现在我想知道我的局限性是什么。最多可以有 30 个用户一起玩会很酷,但是我的桌子需要 3 倍的字段。 30 x user1_gun 30 x user1_inv 和 30 x user1_ready。
这个数据库将被大量使用,因为所有用户在访问页面时都需要数据库中的所有信息以列出所有其他用户名等。所有用户还可以更改表中至少 3 个值。
我应该将我的表限制为 9 个用户还是我可以为 100 个用户创建一个表?我不知道。我可以进行一些编码,但以前从未管理过大型 mysql 数据库和服务器。
编辑:好的。只是要清楚。我有一个包含有关我的用户的各种信息的用户表,一个连接到用户表的汽车表,一个连接到我的用户表的武器表。 这不是我唯一一个最多可以有 9 名玩家玩游戏的表! oc 表需要包含每个用户选择的用户名和枪支字段,以及表示他们准备好的用户。 . 我认为我不需要数据库规范化...
【问题讨论】:
-
您来得正是时候:您正在寻找一些重度标准化。 :)(现在不能写帖子,但我相信有人会。)
-
而不是将所有用户的数据存储在同一个表中。创建一个新表并链接到该表,以便您可以在游戏中存储无限数量的用户。在 wikipedia 或 stackoverflow 上阅读有关数据库规范化的更多信息:en.wikipedia.org/wiki/Database_normalization
-
这款游戏的实时性如何? MySQL 在这里可能不是您的最佳选择。
标签: php mysql load scalability