MySql дизайн базы данных для викторины - PullRequest
6 голосов
/ 02 мая 2010

Я делаю онлайн-викторину с php и mysql и мне нужна помощь, чтобы решить, как спроектировать базу данных для оптимальной вставки вопросов / ответов и выбора вопросов для викторины. Таблица будет содержать 80 вопросов, каждый из которых имеет 4 возможных варианта плюс правильный ответ.

При получении вопросов и вариантов из базы данных я случайным образом выберу 25 вопросов и их вариантов.

Лучше ли сделать один столбец для всех вопросов, вариантов и правильных ответов? Например:

ID | Q | OPT1 | OPT2 | OPT3 | OPT4 | ANS

Или было бы лучше сделать колонку для каждого отдельного вопроса, варианта и правильного ответа? Например:

Q1 | Q1_OPT1 | Q1_OPT2 | Q1_OPT3 | Q1_OPT5 | Q1_ANS | Q2 | Q2_OPT1 | Q2_OPT2...

Ответы [ 3 ]

10 голосов
/ 02 мая 2010

Было бы лучше сохранить возможные ответы в отдельной таблице. Это позволяет вам иметь любое количество ответов на вопрос, а не только 4. Это также позволяет вопросам иметь разное количество ответов. Если у вас есть несколько тестов, вам также может потребоваться таблица тестов.

Quizes:
  id
  name

Questions:
  id
  quiz
  prompt

Answers:
  id
  question
  prompt

QuizResult (someone taking a quiz)
  id
  quiz
  // other information about the quiz taker, possibly including the time

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

Каждый вопрос имеет значение, а каждый ответ имеет значение

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

Вы можете сказать, что каждый вопрос стоит 10 баллов, или вы можете назначить разные веса различным вопросам:

Questions:
    id
    quiz
    prompt
    value (you can make this question worth more or less)

  Answers:
    question
    prompt
    value (you can make this answer worth more or less)

Сохранить правильный ответ в таблице ответов

Более простое (но менее надежное) решение - просто сказать, какой ответ верен в таблице ответов.

Answers:
    question
    prompt
    is_correct

Сохраните правильный ответ в таблице вопросов

Я бы не рекомендовал это. Когда вы создаете вопрос, у него не будет правильного ответа, пока вы его не вставите. Это означает как минимум 3 запроса, чтобы правильно составить вопрос. Если вы используете зависимости внешнего ключа, это быстро станет раздражающим.

3 голосов
/ 02 мая 2010

Перейдите к варианту 1, где у вас есть по одной строке для каждого вопроса / варианта / ответа.

Вариант 2 не имеет никакого смысла. Каждый раз, когда вы хотите добавить / удалить вопрос, вы будете изменять схему базы данных !! И у тебя всегда будет только один ряд !!

1 голос
/ 02 мая 2010

Перейти на ваш первый вариант. Это наиболее нормализованный вариант, но это не обязательно является решающим аргументом. Но достоинства нормализованного дизайна многообразны:

  • добавление новых вопросов в ваше портфолио викторины. (Другой вариант требует добавления новых столбцов в таблицу).
  • просто написать оператор выбора, который возвращает набор результатов. (альтернативный вариант требует динамического SQL)
  • Легко написать графический интерфейс, который отображает вопросы и ответы, потому что каждый отображаемый набор текстов соответствует одним и тем же coilumn_names.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...