MySQL: где я могу хранить информацию о профиле каждого пользователя на веб-сайте? - PullRequest
0 голосов
/ 29 ноября 2010

Извините, если это уже было рассмотрено - я искал часы, но мне кажется, что мне просто не хватает словарного запаса для эффективного поиска.

Я пытаюсь выяснить, как мне хранить информацию профиля для каждогопользователь.Под информацией профиля я не имею в виду информацию, такую ​​как электронная почта и т. П., Но больше их предпочтения относительно сайта, над которым я работаю.

Это сайт для изучения языка, и я хочу, чтобы пользователи могли сохранять свои«прогресс», давая им возможность пометить урок как усвоенный.

Я также хочу отслеживать, какие упражнения они выполнили, так что я могу попытаться дать им только те упражнения, которые они не выполнили (или когда они израсходовали доступные упражнения, начните с наименее недавних).Я просто не уверен, где хранить всю эту информацию.

Должна ли я иметь справочную таблицу, связывающую пользователей с уроками?Я боюсь, что это станет огромным, так как количество пользователей и таблиц увеличивается.Видя, что это просто логическое значение, я подумал о том, чтобы дать каждому пользователю целое число (а затем и больше целых чисел в виде массива), где каждый бит представляет урок, и выполнять побитовые операции над этими числами, чтобы получить информацию о том, какие уроки они сохранили.Хотя это звучит так, как будто в будущем это может быть обременительно.

Что касается запоминания, какие упражнения они выполняли, я боюсь, что это приведет к огромному количеству отходов, если я попытаюсь сохранить их в MySQL.Могу ли я попытаться сделать это на компьютере пользователя с помощью файлов cookie, и любому, у кого отключены файлы cookie, просто придется иметь дело с повторяющимися вопросами об упражнениях?

Может быть, мне стоит подумать о других таблицах и даже других базах данных!Я не знаю!

Извините за всю бессвязную чушь.По крайней мере, я был бы признателен за некоторые указания на то, что мне нужно читать дальше ...

Ответы [ 2 ]

3 голосов
/ 29 ноября 2010

Таблица поиска между пользователями и упражнениями является самой простой и гибкой, и вам действительно не нужно беспокоиться о ее размере. Он будет иметь идентификатор пользователя, идентификатор упражнения и какую-то переменную прогресса, поэтому (в зависимости от ваших потребностей) это, вероятно, будет занимать менее 10 байт пространства на строку. 1 миллион строк не займет даже 10 МБ пространства.

Вероятно, я бы просто создал записи в таблице только после того, как пользователь достиг определенного прогресса в конкретном упражнении. Поэтому, если вы когда-нибудь попытаетесь посмотреть прогресс пользователя в упражнении, а строка не найдена, это означает, что он ничего не сделал в этом упражнении. Таким образом, вам нужно всего лишь создать строки, представляющие прогресс, и в целом это число должно быть достаточно низким.

0 голосов
/ 29 ноября 2010

Вам понадобится распределительная таблица, чтобы связать каждого пользователя с различными упражнениями (отношение многие ко многим):

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

Вам не нужно иметь записи для каждой возможной комбинации, вы можетедобавьте каждую комбинацию, когда урок помечен как усвоенный.

Побитовый метод идет по плохому пути, вам потребуется немного для каждого урока ... он не масштабируется.

...