2010-11-29 24 views
0

Désolés si cela a été couvert - J'ai cherché pendant des heures mais je pense que je manque simplement le vocabulaire pour rechercher efficacement.MySQL: Où puis-je stocker les informations de profil de chaque utilisateur sur un site Web?

J'essaie de comprendre comment je devrais stocker des informations de profil pour chaque utilisateur. Par informations sur le profil, je ne veux pas dire des informations comme les emails et autres, mais plutôt leurs préférences concernant le site sur lequel je travaille. C'est un site d'apprentissage des langues, et je veux que les utilisateurs puissent sauvegarder leur «progression», en leur donnant la possibilité de marquer une leçon comme apprise. Je veux aussi garder la trace des exercices qu'ils ont effectués, afin que je puisse essayer de leur donner seulement des exercices qu'ils n'ont pas fait (ou quand ils ont épuisé les exercices disponibles, à partir du moins récent) . Je ne suis pas sûr où stocker toutes ces informations.

Dois-je avoir une table de correspondance reliant les utilisateurs aux leçons? Je crains que cela devienne énorme à mesure que le nombre d'utilisateurs et de tables augmente. Voyant que c'est juste un booléen, j'ai considéré donner à chaque utilisateur un int (et plus tard ints comme un tableau) où chaque bit représente une leçon, et effectuer des opérateurs bit à bit sur ces nombres pour obtenir les informations sur les leçons qu'ils ont sauvées. Bien que cela puisse paraître lourd à l'avenir. En ce qui concerne les exercices qu'ils ont fait, je crains que cela ne mène à une énorme quantité de gaspillage si j'essaie de les sauvegarder en mysql. Pourrais-je essayer de faire cela sur l'ordinateur de l'utilisateur en utilisant des cookies, et toute personne qui a des cookies désactivés devra simplement faire face à des questions répétées d'exercice? Peut-être que je devrais penser à d'autres tables et même à d'autres bases de données! Je ne sais pas!

Désolé pour tout le non-sens décousu. À tout le moins j'apprécierais quelques indications vers ce que j'ai besoin de lire sur ...

Répondre

3

Une table de consultation entre les utilisateurs et les exercices est la plus simple et la plus flexible, et vous ne devriez vraiment pas vous inquiéter à propos de la taille de celui-ci. Il aura un identifiant utilisateur, un identifiant d'exercice et une sorte de variable de progression, donc (en fonction de vos besoins) cela va probablement être inférieur à 10 octets d'espace par ligne. 1 million de lignes ne prendrait même pas 10 Mo d'espace.

Je n'aurais probablement que des enregistrements créés dans la table une fois que l'utilisateur a fait une sorte de progrès sur un exercice particulier. Donc, si jamais vous essayez de rechercher les progrès d'un utilisateur sur un exercice et une ligne n'est pas trouvée, cela signifie qu'ils n'ont rien fait sur cet exercice. De cette façon, vous avez seulement besoin de créer des lignes pour représenter la progression, et il devrait garder le nombre assez bas globalement.

+0

+1 Battez-moi aussi. –

+0

Ok, cool, je suppose que je ne suis pas habitué à l'échelle des bases de données mysql. Je vais y aller, et merci! –

+0

@Michael: Ne vous inquiétez pas trop de ce genre de chose à l'avance. Essayez de commencer par la méthode la plus facile à utiliser et la plus flexible, et craignez de la modifier plus tard si cela s'avère provoquer un goulot d'étranglement ou un problème dans votre application.Il n'y a aucune raison de se compliquer la tâche avant de savoir que c'est vraiment nécessaire. –

0

Vous aurez besoin d'une table de jonction pour relier chaque utilisateur à différents exercices (many-to-many):

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

Vous ne devez pas avoir des entrées pour toutes les combinaisons possibles, vous pouvez ajouter chaque combinaison lorsqu'une leçon est marquée comme apprise.

La méthode bitwise est mauvaise, vous auriez besoin d'un peu pour chaque leçon ... elle n'est pas évolutive.