我一直在寻找一些优化提示,因为我正在进行RPG修改,它使用MySQL来存储PHP数据。
我使用一个唯一的表来按照其唯一ID将所有用户信息存储在列中,并且我必须为每个用户存储(很多?)数据。武器和其他信息。
我使用explode和implode作为存储武器的方法,例如,在一个带有'text'值的列中。我不知道这是不是一个好习惯,如果我让成千上万的玩家做了大量的UPDATES,SELECT等请求,我不知道是否会遇到性能问题。
我读到Junction表可能更好地存储武器和所有这些信息,但我不知道这是否会获得您通过爆炸方法请求它的更好信息。
我的意思是,我应该将所有武器存放在不同的表中,每个武器都有他的信息(每个武器都有一些信息,比如不同的列,我在主爆炸中使用多个爆炸)和用户所有者识别武器的武器,而不仅仅是将它们放在一列中。
至少可以存储100个项目,我不知道在不同的桌面上为每个用户制作100条记录是否合适,并且比调用列更好地调用所有这些记录并使用explode
此外,我想提高自己的技能和知识,以便创造出性能最佳的MySQL数据库。
我希望有人可以告诉我一些事情。
谢谢,对不起我愚蠢的英语语法。
答案 0 :(得分:2)
规范化表数据几乎总是最佳做法。这个规则有一些例外(特别是在非常高容量的数据库中),但是在你初步了解如何正确地规范化和索引表之前,你可能不需要担心这些异常。
通常,尝试以模仿真实世界对象及其相互关系的方式排列表格。
因此,在您的情况下,您有用户 - 这是一个表。每个用户可能拥有多种武器。所以,你现在有一个武器表。由于多个不同的用户可能拥有相同的武器,并且每个用户可能拥有多个武器,因此它们之间存在多对多的关系,因此您应该有一个表“users_weapons”或类似的表,除了将用户ID与武器ID相关联之外什么都不做
现在说用户都可以拥有盔甲。所以现在添加一个装甲表和一个users_armor表(因为这可能是多对多的)。
只需仔细思考游戏的不同方面,并尝试理解它们之间的关系。确保在编写任何代码以实际实现功能之前,可以在数据库表中建模这些关系。
答案 1 :(得分:0)
是的,最好使用多个表而不是一个。数据库性能更好,更易于理解,更易于维护,也更易于使用。
让我们建议一个用户拥有多个具有多种功能的武器(但并非所有武器中都是唯一的)。在游戏中的某个位置,您只需知道一个特定功能的价值:
按照你的方式做你需要在用户表中找到用户行,在列上获取,多次爆炸,并且你有你的价值,但如果你想改变它会更复杂然后保存。
更好的方法是有一个表用于用户详细信息(登录,密码,电子邮件等),另一个表保存用户武器(武器的名称,图像可能)和表格中的所有功能,特殊功能武器保存。您可以将所有武器的所有可能功能保存在额外的表格中。这样你就可以知道用户表中的用户id了,你只需要在sql查询中加入2个表,你就可以获得用户特定武器特征的价值。
表的伪模式示例:
users
user_id
user_name
password
email
weapons
weapon_id
user_id
weapon_name
image
weapons_features
feature_id
weapon_id
feature_name
feature_value
如果您真的想在数据库的文本字段中使用某些有序数据,请将其编码为JSON
或serialize
。这样你就不必爆炸并破坏它!
答案 2 :(得分:0)
正如所有人所说,通常你应该从规范化的数据库结构开始。 如果表现还可以,那就太好了,无所事事。
如果没有,你可以尝试很多不同的东西: