Что такое элегантный / эффективный способ хранения статуса 100 уроков для нескольких пользователей? - PullRequest
0 голосов
/ 14 ноября 2011

Я работаю над приложением на JavaScipt, jQuery, PHP и MySQL, которое состоит из ~ 100 уроков. Я пытаюсь придумать эффективный способ хранения статуса прогресса каждого пользователя на уроках без необходимости слишком много запрашивать базу данных MySQL.

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

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

Есть ли очевидное решение, которого мне не хватает? Как бы вы сохранили ваши пользователи, пройдя 100 уроков, чтобы быстро и просто создать отчет о состоянии, показывающий их процесс.

ура!

Ответы [ 4 ]

1 голос
/ 14 ноября 2011

Я рекомендую структуру таблицы: она должна содержать одну таблицу с неуникальными полями userid и lessonid, а также соответствующие поля прогресса. Если вы хотите получить прогресс пользователя x на уроке y, вы должны сделать следующее:

SELECT * FROM lessonProgress WHERE userid=x AND lessonid=y LIMIT 1;

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

1 голос
/ 14 ноября 2011

Используйте отношения между 2 таблицами. Один для пользователей с конкретными столбцами пользователя, такими как идентификатор, имя пользователя, адрес электронной почты, и т. Д. Вы хотите сохранить о них. Затем таблица состояния с внешним ключом UID. ID UID Статус и т. Д.

Хорошо также сохранять дату и дату в таблицах.

Тогда просто присоединитесь к таблицам ON status.UID = users.ID

1 голос
/ 14 ноября 2011

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

Таким образом, добавление новых leasson не приведет к изменению базы данных

1 голос
/ 14 ноября 2011

Если отчетность ограничивается одним пользователем за раз, то есть при создании отчета он предназначен для конкретного пользователя, а не для большого количества пользователей, - почему бы не рассмотреть запись объекта javascript, хранящуюся в файле? Если бы расширяемость была ключевой, это сделало бы это простым делом.

Очевидно, что если вы собираетесь запускать отчеты для сколь угодно большого числа пользователей одновременно, отдельные файлы данных станут неэффективными.

Отбросив аргумент эффективности, json также дал бы вам очень понятный и взаимозаменяемый формат.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...