Ассоциирование модели дважды, CakePHP

У меня следующая схема: Мой сайт представляет собой викторину, поэтому на каждый вопрос «есть много» ответов, но вопрос также «имеет один» правильный ответ, который также представлен моделью ответов. Мне еще предстоит проверить это, но мой инстинкт программиста подсказывает мне, что полученный массив будет избыточным и не будет отделять правильный ответ от остальных.

Мой вопрос в том, как мне представить это в моделях и в базе данных, есть ли лучший способ представить эту связь?


person fixmycode    schedule 26.11.2009    source источник


Ответы (4)


Или просто посмотрите на эту страницу, очень полезная ;) http://www.charlesgarwood.com/blog/?p=23

person Stefan    schedule 01.12.2009
comment
Это то, что действительно решило мою проблему, мои извинения Джимми Стенке, но я предпочитаю уже реализованное решение. - person fixmycode; 01.12.2009

Ну, я могу придумать два способа сделать это.

  1. Вопрос имеет много ответов, в то время как вопрос относится к правильному ответу (имейте answer_id для правильного ответа в вопросе, поэтому он будет выглядеть как Question(id, answer_id) и Answer(id, question_id))

  2. Установите флажок на ответе, который отражает, является ли он правильным или нет.

Я думаю, какой из них выбрать, это скорее личное мнение, но я бы, вероятно, выбрал номер 2, даже если 1 более правильный из-за реляционного мышления, но это уменьшает избыточность, и вы все еще можете искать его в ответах.

Конечно, если вопрос может иметь более одного правильного ответа, то вариант №1 не может быть и речи.

person Jimmy Stenke    schedule 26.11.2009

Другой маршрут - создать 2 модели, сопоставленные с одной и той же таблицей. Имейте флаг в ответе, который указывает, что это правильный ответ или нет.

Поскольку вы не будете переключать правильный ответ, сопоставление правильности с флагом во время создания будет в порядке и позволит вам получить несколько правильных ответов. С помощью системы взвешивания вы даже можете оценить правильность ответа.

При использовании двух отдельных моделей обязательно задайте условия для отношений или в самой модели, чтобы модель CorrectAnswer находила ответы только с установленным полем Answer.correct = true. Затем у вас может быть общая модель ответа, в которой нет такого условия. Сделано в модели вопросов, вы даже можете использовать только флаги ассоциации для получения обоих типов.

person Abba Bryant    schedule 29.11.2009

Попробуйте спросить на cakeqs.org, это портал, связанный с cakephp. Но определенно у вас должны быть разные псевдонимы для обеих ассоциаций

person user198979    schedule 01.12.2009