0

抱歉,如果这已被涵盖 - 我一直在寻找几个小时,但我认为我只是缺乏有效搜索的词汇。

我试图弄清楚我应该如何为每个用户存储个人资料信息。我所说的个人资料信息不是指电子邮件之类的信息,而是他们对我正在开发的网站的偏好。

这是一个语言学习网站,我希望用户能够保存他们的“进度”,让他们可以选择将课程标记为已学习。

我还想跟踪他们做了哪些练习,这样我就可以尝试只给他们没有做过的练习(或者当他们用完可用的练习时,从最近的练习开始)。我只是不确定在哪里存储所有这些信息。

我应该有一个将用户链接到课程的查找表吗?我担心随着用户和表格数量的增加,这会变得巨大。由于它只是一个布尔值,我考虑给每个用户一个 int(以及后来更多的 int 作为一个数组),其中每个位代表一个课程,并对这些数字执行按位运算符以获取有关他们保存了哪些课程的信息。 . 虽然这听起来将来可能会很麻烦。

至于记住他们做过哪些练习,我担心如果我尝试将它保存在 mysql 中会导致大量浪费。我是否可以尝试使用 cookie 在用户的计算机上完成此操作,并且禁用 cookie 的任何人都只需要处理重复的练习问题吗?

也许我应该考虑其他表甚至其他数据库!我不知道!

对不起所有漫无边际的废话。至少我会很感激一些指向我需要阅读的内容......

4

2 回答 2

3

用户和练习之间的查找表是最简单和最灵活的,您真的不必担心它的大小。它将有一个用户 ID、一个练习 ID 和某种进度变量,因此(取决于您的需要)每行可能会少于 10 个字节的空间。100 万行甚至不会占用 10MB 的空间。

一旦用户在特定练习上取得了某种进展,我可能只会在表中创建记录。因此,如果您曾经尝试查找用户在某项练习中的进度,但没有找到一行,这意味着他们在该练习中没有做任何事情。这样,您只需要创建行来表示进度,并且总体上应该保持相当低的数字。

于 2010-11-29T20:18:28.747 回答
0

您需要一个联结表将每个用户链接到不同的练习(多对多关系):

user_id(int) exercise_id(int) learned(boolean)

您不必为每个可能的组合都有条目,您可以在课程被标记为已学习时添加每个组合。

逐位方法走上了一条糟糕的道路,每节课你都需要一点……它不可扩展。

于 2010-11-29T20:22:40.213 回答