2016-03-10 2 views
2

У меня есть 2 таблицы: questions и answers, каждый вопрос имеет 4 альтернативы и только 1 альтернатива правильная.MySQL: хранить только 1 правильный ответ (индексирование)

Есть ли способ заставить answers таблицу принять только 1 правильную альтернативу для каждого вопроса, (что-то вроде уникального индекса)?

answers пример таблицы дизайн:

id question_id is_correct text 
0   1   true  blue1 
1   1   false  blue2 
2   1   false  blue3 
3   1   false  blue4 
4   2   true  blue5 
5   2   false  blue6 
6   2   false  blue7 
7   2   false  blue8 
8   3   true  blue9 
9   3   false  blue10 

Есть прочь сказать DB хранить только один правильный ответ на question_id = 1 ... и т.д.?

спасибо,

+0

В MySQL это трудно обойтись без триггера. –

+0

before Trigger, чтобы проверить правильность ответа? (для вопроса) – mwafi

+0

Имейте null вместо false и unique (question_id, is_correct). – jarlh

ответ

3

Тот путь вы можете сделать это без триггера, сохраняя информацию в Questions таблице, а не Answers таблицы.

Вы можете просто указать столбец CorrectAnswerId с отношением внешнего ключа к таблице Answers.

0

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

Вы можете удалить столбец «is_correct» из таблицы «ответы» и добавить столбец «correct_answer_id» в таблицу «вопросы». Итак, по каждому вопросу у вас будет только один правильный ответ, по определению.

Эта конструкция имеет очевидное преимущество, которое легко обеспечивает требуемое ограничение, поскольку оно не может поддерживать более одного правильного ответа.

0

2 таблицы:

  • 2 колонны и PRIMARY KEY(question_id, correct_answer_id). ПК предотвратит наличие двух правильных ответов.

  • Ваш текущий стол, но без колонки is_correct.

Вы можете JOIN две таблицы, если вам нужно text для «правильного ответа».

Смежные вопросы