MySQL-保存和加载

MySQL-保存和加载,mysql,Mysql,我目前正在开发一个游戏,就在不久前,我开始着手加载和保存 我一直在想,但我真的不能决定,因为我不确定哪一个更有效 我的第一个选择: 当用户注册时,仅插入一条记录(插入“字符”表)。当用户尝试登录时,并且在他/她成功登录后,服务器将尝试加载来自用户的所有信息(这些信息在多个表中分开,并通过mysql“左连接”组合),如果遇到空值,服务器将运行所有信息并将其应用于实体实例(这意味着信息还不在数据库中)它将自动使用默认值。 保存时,它将插入或更新,以便现在保存加载时生成的任何默认值 我的第二个选择:

我目前正在开发一个游戏,就在不久前,我开始着手加载和保存

我一直在想,但我真的不能决定,因为我不确定哪一个更有效

我的第一个选择: 当用户注册时,仅插入一条记录(插入“字符”表)。当用户尝试登录时,并且在他/她成功登录后,服务器将尝试加载来自用户的所有信息(这些信息在多个表中分开,并通过mysql“左连接”组合),如果遇到空值,服务器将运行所有信息并将其应用于实体实例(这意味着信息还不在数据库中)它将自动使用默认值。 保存时,它将插入或更新,以便现在保存加载时生成的任何默认值

我的第二个选择: 只需在注册时插入所有必需的行(注册完成后从网站插入行)

第一个选项的缺点是:无用的检查用户是否已经登录过一次,因为所有表都将在第一次登录后生成

第一个选项:如果删除了表中的任何记录,它将插入默认数据,而不是让玩家说它的角色信息已损坏/丢失

第二种方法的缺点是:它可能会浪费一点内存,因为所有表都是在注册时插入的,而且可能会有垃圾邮件机器人,甚至有人无法上网

第一个选项的好处:我们不必检查服务器中的任何内容


我还注意到,第一个选项可能会破坏任何搜索系统(通过admincp,如果我们尝试查找特定用户).

我会选择第二个选项,将默认行添加到您的用户帐户,并将主用户表标记为不完整。这将保持整个数据库的数据完整性,而每个用户记录都是完整的。如果需要删除记录,只需添加级联删除脚本即可


此外,我不会基于恶意机器人创建帐户来开发您的数据模式。如果您担心用户帐户的完整性,请在解决方案中添加某种数据验证或自动清理脚本,以便在满足特定条件(即创建日期符合特定条件)后清除不完整的帐户n阈值。

您提到,每个用户都有多个数据表,如果表中不存在数据,有些数据表可以有默认值。我猜这是一个类似于主“字符”表的设置,带有用户名、密码和电子邮件,还有一个单独的表,用于“站点周围的常用快捷方式”,如果他们没有指定个人偏好,则默认为“个人资料、游戏列表、游戏类别”等基本列表

然后问题就变成了注册时,应该为该用户添加默认收藏夹快捷方式的显式副本,还是将默认值设置为空值

我建议这取决于辅助数据表的性质;特别是这些表的默认值。默认值会多久更改一次?如果默认值经常更改,像第一个选项那样的设置会导致只有“基本”条目的用户经常获得新的辅助数据,而那些指定了自己的条目的用户则会经常获得新的辅助数据条目将保留其首选项。使用第二个选项,如果默认值已更改,则为了让用户保持更新,必须执行搜索/替换以将旧默认值的条目更改为新默认值


另一个建议是重新审视数据库结构。您没有提到当前的表布局是一成不变的;有没有办法不让所有的左联接表都有,而只有一个“字符”表?

您能提供一些关于您正在谈论的信息类型的详细信息吗?哪些类型的数据来自另一个优点是,您不必担心代码其余部分中的记录丢失。第一个方法可能会导致到处都有特殊情况。