2010-01-06 60 views
2

我目前正在开发一款游戏,而前一段时间我开始着手加载和保存。MySQL - 保存和加载

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

我的第一个选项: 当用户注册时,只有一条记录被插入(到'字符'表中)。当用户尝试登录时,并且在他/她成功完成之后,服务器将尝试加载用户的所有信息(跨多个表单独分开,并通过mysql'LEFT JOIN'进行组合),但它会运行所有的信息,并将它们应用到实体实例,如果它运行到NULL(这意味着信息不在数据库中),它会自动使用默认值。 保存时,它会插入或更新,以便在加载时生成的任何默认值现在将被保存。

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

下降到第一个选项:无用的检查用户是否已经登录一次,因为所有表将在首次登录后生成。

上升到第一个选项:如果删除表中的任何记录,它将插入默认数据而不是踢选手,说它的字符信息已损坏/丢失。

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

上升到第一个选项:我们不必检查服务器中的任何东西。

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

+0

你会提供一些关于你在谈论什么样的信息的细节吗?哪些数据来自这些其他表格? – ErikE 2010-01-16 19:36:55

回答

7

我会去第二个选项,将默认行添加到您的用户帐户,并将主用户表标记为不完整。这将保持整个数据库的数据完整性,而每个用户记录都是完整的。如果你需要删除记录,你可以简单地添加一个级联删除脚本来清理房子。

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

+0

另一个好处是,你不需要担心代码其余部分丢失记录。随着第一个问题,你可能会遇到各种特殊情况。 – 2010-01-19 05:50:46

0

您提到,每个用户都有多个数据表,其中一些表可以有一个默认值。我猜这是设置了类似主要的“角色”表,用户名,密码和电子邮件,以及一个单独的表,如“网站最喜爱的快捷方式”,如果他们没有指定个人偏好,它默认为“个人资料,游戏列表,游戏类别”等基本列表。

然后问题就变成注册时,应该为该用户默认添加最喜欢的快捷方式的显式副本,或者使用空值默认为默认列表?

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

另一个建议是再看看你的数据库结构。你没有提到你当前的表格布局是如何设置的;有没有办法让所有的LEFT JOIN表都没有,只有一个'characters'表?