我目前正在开发一款游戏,就在不久之前,我开始着手加载和保存。
我一直在想,但我真的无法决定,因为我不确定哪个更有效率。
我的第一个选择: 当用户注册时,只插入一条记录(进入'字符'表)。当用户尝试登录时,并且在他/她成功完成后,服务器将尝试从用户加载所有信息(在多个表中分开,并通过mysql'LEFT JOIN'组合),它将运行它拥有的所有信息并将它们应用于实体实例,如果它遇到NULL(这意味着信息不在数据库中),它将自动使用默认值。 在保存时,它将插入或更新,以便现在保存在加载时生成的任何默认值。
我的第二个选择: 只需在注册时插入所有必需的行(当注册完成时从网站插入行)。
下行到第一个选项:如果用户已经登录一次,则无用检查,因为所有表都将在首次登录后生成。
第一个选项的好处:如果删除了表中的任何记录,它将插入默认数据,而不是踢掉玩家说它的角色信息已损坏/丢失。
下降到第二个选项:它可能会浪费一些内存,因为所有表都是在注册时插入的,可能有垃圾邮件机器人,甚至没有设法上网的人。第一个选项的好处:我们不必检查服务器中的任何内容。
我还注意到第一个选项可能搞砸任何搜索系统(如果我们尝试查找特定用户,可以通过admincp)。
答案 0 :(得分:7)
我会选择第二个选项,将默认行添加到您的用户帐户,并将主用户表标记为不完整。这将保持整个数据库的数据完整性,而每个用户记录都是完整的。如果您需要删除记录,您只需添加一个级联删除脚本来清理房屋。
另外,我不会根据创建帐户的恶意机器人开发您的数据模式。如果您担心用户帐户的完整性,请在解决方案中添加某种数据验证,或者在符合特定条件(即创建的日期满足特定阈值)时清除不完整帐户。 / p>
答案 1 :(得分:0)
您提到每个用户都有多个数据表,如果表中不存在,则可以有一些默认值。我猜这是设置类似主要“字符”表,用户名,密码和电子邮件,以及一个单独的表,如“网站周围最喜欢的快捷方式”,如果他们没有指定个人喜好,它默认为“个人资料,游戏列表,按类别划分的游戏”等基本列表。
然后问题在注册时,是否应该为该用户添加默认快捷方式的默认副本,或者将空值默认为默认列表?
我建议它取决于辅助数据表的性质;特别是这些表的默认值。默认值多久会改变一次?如果默认情况经常发生变化,那么像第一个选项这样的设置会导致只有“基本”条目的用户会经常获得新的辅助数据,而那些指定了自己的条目的用户会保留他们的首选项。使用第二个选项,如果默认值已更改,为了让用户保持更新,必须进行搜索/替换,以将旧默认条目更改为新默认值。
另一个建议是再看看你的数据库结构。你没有提到你当前的表格布局是一成不变的;有没有办法没有所有LEFT JOIN表,只有一个'字符'表?