Проектирование базы данных для приложения онлайн-обучения


Это приложение онлайн-обучение с разными видами изучаемым позициям, что разные пользователи ЖЖ.

Пользователи узнают путем разнесенными повторения (один раз сразу, подождите пару дней, еще раз спросить), успех отражается в этапах и совершали ошибки.

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

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

Поскольку это может не понимать только глядя на график, двух основных типов:

  • известно – неизвестно: в каком году Томас Эдисон умер? – [1931] - один вопрос и один ответ
  • cloze в тестах или разрыв тексты: медленный Лорис относятся к роду [показали единственную] и подсемейства [Lorinae] - один вопрос и много ответов!

Мои схемы

Часть в серые корабли с компонентом TankAuth в CodeIgniter и я надеюсь, что это правильно сделано.

Схема базы данных

В ответ на нету комментарий l0bo, я визуализировал это в SchemaSpy , а также.

Общие запросы

Эти взгляды, что я так далеко, они отражают достаточно хорошо, что, как правило, не хочет.
Они также отражают то, как я нарваться на неприятности с тем, как я решил реализовать "языков".

CREATE VIEW `retrieve_user_term_or_gap` AS
SELECT 
  u.id, u.learnable_id, u.user_id, u.stage, u.mistakes, u.time_due, u.added,
  terms.language, terms.field, terms.known, terms.unknown, terms.hint,
  gaps.cloze_id, gaps.gap,
  c.language AS cloze_language, c.field AS cloze_field, c.cloze, 
  c.hint AS cloze_hint -- this is bad, not 3NF
FROM
  user_terms AS u
LEFT JOIN learnables AS l ON u.learnable_id = l.id
LEFT JOIN terms ON l.id = terms.learnable_id
LEFT JOIN gaps ON l.id =  gaps.learnable_id 
LEFT JOIN clozetests AS c ON c.id = gaps.cloze_id

CREATE VIEW `how_many_due` AS
SELECT COUNT(id) FROM user_terms
WHERE stage < 5 AND DATE(time_due) <= CURDATE()


CREATE VIEW `due_terms` AS
SELECT 
  u.id, u.learnable_id, u.user_id, u.stage, u.mistakes, u.time_due, u.added,
  terms.language, terms.field, terms.known, terms.unknown, terms.hint,
  gaps.cloze_id, gaps.gap,
  c.language AS cloze_language, c.field AS cloze_field, c.cloze, 
  c.hint AS cloze_hint -- this is bad, not 3NF
FROM
  user_terms AS u
LEFT JOIN learnables AS l ON u.learnable_id = l.id
LEFT JOIN terms ON l.id = terms.learnable_id
LEFT JOIN gaps ON l.id =  gaps.learnable_id 
LEFT JOIN clozetests AS c ON c.id = gaps.cloze_id
WHERE DATE(u.time_due) <= CURDATE() AND u.stage < 5 
ORDER BY terms.language, terms.field, u.id


448
3
задан 28 февраля 2011 в 01:02 Источник Поделиться
Комментарии
1 ответ

У вас есть поле языками несколько раз в виде строки. Я хотел создать общую таблицу, языки все языковые информаций и 1:м или Н:м отношения с другими таблицами.

2
ответ дан 1 марта 2011 в 04:03 Источник Поделиться