我有一个游戏,在MySQL数据库中存储boss在简单模式和硬模式下的杀人记录。有14个老板。我想存储一个球员杀死一个老板的次数和难度。我有几个选择,我可以看到。。
为每个boss以及每个难度在表中创建一个单独的列。例如。
playerid,(all the other player fields here),boss1easy,boss1hard,boss2easy,boss2hard,boss3easy,boss3hard,boss4easy,boss4hard,boss5easy,boss5hard,boss6easy,boss6hard,boss7easy,boss7hard,boss7easy,boss7hard,boss8easy,boss8hard,boss9easy,boss9hard,boss10easy,boss10hard,boss11easy,boss11hard,boss12easy,boss12hard,boss13easy,boss13hard,boss14easy,boss14hard
创建两个存储数字序列的字段,这些数字可以稍后提取出来,以便在PHP中进行比较。其中easykills是一个由28个字符组成的字符串,每2个字符就有一个计数器,用于计算boss被杀死的次数。E、 g.明显限制最多99人死亡:
playerid,(all the other player fields),easykills,hardkills
easykills = "2103030405060708091011121314" = boss1easy = 21 kills, boss2easy = 03 kills, boss3easy = 03 kills, boss4esay = 04 kills, etc
创建一个名为bossKills的单独表,当boss被杀死时,只需在现有值上添加1。例如。
playerid,boss,difficulty
我的问题是:当从PHP运行MySQLi查询时,这些方法中的哪一种会导致服务器负载更少?有没有我不知道的更好的方法?
第一种选择并不好,因为你不能轻易地增加困难或老板。每次要添加新boss或困难时,都需要更改数据库架构
第二个选项不好,因为您将无法轻松运行sql语句并找到例如哪个玩家在简单难度下在boss 3上杀死最多。为了做这样的事情,您必须解析所有字符串并从中提取您想要的信息。
第三个选项是最好的,因为您可以轻松添加或删除boss和困难,但您需要更多的sql查询才能执行与第一个选项相同的操作
对于老板和困难,第三种选择是目前为止最好的。
但有时候第一个选择更好比如
如果你想存储玩家拥有的属性,如力量、敏捷、智力、命中、法力、耐力等,我会选择第一个选项,并将它们放在一个单独的表中,而不是与玩家的所有其他属性(电子邮件、密码、验证码等)一起。
我会添加一个单独的表,例如:player\u attributes(player\u id、strength、agility、intelligence)
而不是具有第三个策略player_attributes(player_id,attribute_id,值)的表
使用此选项可以更快地在更小的索引上执行查询
第三种选择是目前为止最好的选择。
第二个问题是您应该始终避免的,您可以阅读此答案以了解更多信息,但基本上,您必须寻找数据库规范化,而这种方法不是规范化的:
第一范式(1NF)是关系数据库中关系的属性。如果每个属性的域仅包含原子值,并且每个属性的值仅包含该域中的单个值,则关系处于第一范式。
如果这样做,您将遇到以下问题:
如果您更改或扩展游戏的逻辑,例如添加BOSS或难度级别,那么第一个选项将很难维护,因为它将迫使您更改数据库模式。在不久的将来,这可能会成为一个问题。
所以我肯定会使用第三个选项。
问题内容: 在MySQL数据库中存储IP地址的最佳字段类型和长度是什么? IPv6呢? 问题答案: 将IP存储为,然后使用和功能存储/检索IP地址。 样例代码:
问题内容: 我的简化人为示例如下: 可以说,我想每天测量和存储世界上所有城镇的温度(和其他值)。我正在寻找一种存储数据的最佳方式,以使获取所有城镇中的当前温度与获取一个城镇历史上的所有温度一样容易。 这是一个很容易解决的问题,但我正在寻找最佳解决方案。 我能想到的2个主要选项如下: 将所有当前记录和归档记录存储在同一表中。 IE 这将使所有事情变得简单,但是最有效的查询是获取城镇列表和当前温度的列
问题内容: 我想在数据库中存储大量声音文件,但是我不知道这是一个好习惯。我想知道这样做的利弊。 我还考虑了与这些文件建立“链接”的可能性,但这也许会带来比解决方案更多的问题。对此方向的任何经验都将受到欢迎:) 注意:数据库将是MySQL。 问题答案: 我所知道的每个存储大量大文件的系统都将它们存储在数据库的外部。您将文件的所有可查询数据(标题,艺术家,长度等)以及文件的部分路径存储在数据库中。当需
问题内容: 我正在寻找一种SQL注入安全技术,以便通过PHP和MySQLi一次插入很多行(大约2000年)。 我有一个必须包含所有值的数组。目前,我正在这样做: 我尝试了call_user_func_array(),但是它引起了stackoverflow。 什么是更快的方法(例如一次将它们全部插入?),但是仍然可以防止SQL注入(如准备好的语句)和stackoverflows呢? 谢谢! 问题答案
我正在寻找一种SQL注入安全技术,可以用PHP和Mysqli同时插入大量行(约2000)。 我有一个数组,其中包含所有必须包含的值。目前我正在这样做: 我尝试了call_user_func_array(),但它导致了堆栈溢出。 有什么更快的方法可以做到这一点(比如一次插入它们?),但仍然可以防止SQL注入(比如准备好的语句)和StackOverflows? 谢谢!
我有一个存储库层,有许多方法组合,以匹配搜索标准…重用这个标准的最佳方法是什么?我认为像FindByNameAndidandBirthdayandAccouncAnumber这样的方法名称不是一个好主意!谢了! }