Разработка базы данных MySql для викторины

Я делаю онлайн-викторину с 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... 

Solutions Collecting From Web of "Разработка базы данных MySql для викторины"

Было бы лучше сохранить возможные ответы в отдельном столе. Это позволяет вам получать любое количество ответов на вопрос, а не просто 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, где у вас есть одна строка для каждого вопроса / вариантов / ответов.

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

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

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