2015-08-12 2 views
0

В настоящее время у меня есть система, которая на основе определенных ответов предоставит пользователю определенные разделы. В настоящее время у меня было разработано как:Таблица базы данных для обработки условий ИЛИ

Id --- SectionId --- QuestionID --- Ответ

, например, если пользователь ответил Y на вопрос 12 я бы включить раздел 21. Если они ответили Y на оба 13 И 14, тогда раздел 22 будет включен.

1 --- 21 --- 12 --- Y 
2 --- 22 --- 13 --- Y 
2 --- 22 --- 14 --- Y 

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

Id---SectionId---ConditionalId 
1---21---12 
2---21---13 

ConditionalId---QuestionId---Answer 
12---4---Y 
12---5---N 
13---6---Y 
13---7---Y 

Так что путь к разделу 21, чтобы отобразить систему придется либо проверить ConditiondalId 12 или 13, если он действителен, то отобразится.

+0

Тогда как вы собираетесь обрабатывать условия 'AND' в будущем? – RBarryYoung

+0

@RBarryYoung for И вторая таблица должна проверять оба условия, так что, например, выше, мы имеем 1-21-12, что означает, что для того, чтобы показать, что все условия для 12 должны соответствовать, должны удовлетворять, поэтому оба вопроса 4 и 5 должны быть выполнены. conditionalId может быть блоком ответов, которые все должны быть выполнены, поэтому это должно работать и для И. – Paritosh

+0

Да, я знаю, как работает 'AND', я спрашивал, как вы собираетесь обрабатывать такие условия в ваших таблицах/схеме DB? – RBarryYoung

ответ

0

Вы не должны сохранять ConditionalId с ответом пользователя.

UserAnswers стол: Идентификатор_пользователя - QuestionID - Ответ

Вопрос Таблица: QuestionID - NextLevelId - ChildLevelCondition (0 для любого, 1 для всех)

Каждый вопрос Id может сказать от ChildLevelCondition, как он должен проверить ниже уровня для Y и N. Если у ребенка у вас не так много Y, как вопрос, а ChildLevelCondition = 1, это недопустимо. С по крайней мере 1 Y и ChildLevelCondition = 0, вы можете перейти на этот уровень Вы можете использовать группу по и кейсе

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