我正在制作一款手机游戏,乐观地希望我能拥有数百万玩家。
我创建了一个目前大约有8列的用户表(即用户ID,用户名,密码,last_signin等)
对于每个用户,我还需要记录他们拥有的游戏内货币金额(即金,银,宝石等)。
这是1:1的关系(用户只有1个值来定义他们有多少金币。)
我不是数据库专家(这就是我在这里发帖的原因)。我担心如果我在用户表中添加了金,银,宝石等作为新行,那么用户表将以每秒疯狂的查询量进行敲定。每当游戏中有人发现更多黄金,更多白银,登录,创建一个帐户......将访问和/或更新用户表。
将金牌,银币和宝石作为列添加到名为“resources”的新表格中会更加明智,该表格包含以下列:userid,gold,silver,gems。这个新表与用户表具有完全相同的行数,因为用户和资源之间存在1:1的关系。我想知道这些查询是否会更快,因为数据库数据被拆分而且并非所有查询都会转到同一个表。
显然对我来说,将它全部放在1个表中似乎更好,因为它们是1:1 ....但是将大部分游戏数据放在1个表中似乎也是一个坏主意。
感谢您提供任何建议!
赖安
答案 0 :(得分:2)
在很多情况下,良好的设计要求两个表彼此以1:1的关系。没有规范化规则要求以这种方式分解表。但规范化并不是良好设计的唯一手段。
访问流量是另一个手柄。您对访问资源的直觉比访问基本用户数据听起来更加频繁可靠。但是您需要检查一下,以确保访问资源的交易无论如何都不会使用基本用户数据。这一切都归结为更多的成本:一个胖的用户表或更多的连接。
其他响应者已经暗示,有一天,1:1的关系可能成为1:多关系。我可以想象一个。游戏玩家的模型得到扩展,单个用户可以参与多个不同的游戏实例。在这种情况下,单个用户可能在所有实例中具有相同的基本用户数据,但每个实例中的资源不同。在你的情况下,我无法确定这是否会发生。但是,如果确实如此,那么使用单独的资源表会更好。
答案 1 :(得分:0)
这实际上取决于您的游戏设计,数据库的大小以及未来如何扩展数据库。我会将资源放在一个单独的表中,外键指向用户ID,因为:
答案 2 :(得分:0)
这是1:1的关系(用户只有1个值来定义他们有多少金币。)
...现在;)
我不是数据库专家(这就是我在这里发帖的原因)。我担心如果我在用户表中添加了金,银,宝石等作为新行
新栏目?
将金牌,银牌和宝石作为列添加到名为“resources”的新表中会更聪明吗
可能是因为:
更新频繁更新的部分时,您将执行较小的写入,而不会重写较少修改的用户数据
可以更轻松地审核用户数据的更改