2010-05-02 2 views
6

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

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

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

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

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

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

ответ

10

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

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 вопроса, чтобы правильно задать вопрос. Если вы используете внешние зависимости, это быстро раздражает.

+1

+1 Но, чтобы быть ясным, следует отметить правильный ответ в столбце таблицы 'Answers', а не в таблице' QuizResult'. –

+0

+1 за отличный ответ, хорошие вещи. – Rog

3

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

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

1

Идём первый вариант. Это самый нормализованный вариант, но это не обязательно аргумент о клинхе. Но достоинства нормализованной конструкции многообразны:

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