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