Как структурировать данные опросов? - PullRequest
2 голосов
/ 15 апреля 2009

Примечание: это НЕ похоже на этот вопрос

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

Мой вопрос заключается в том, как хранить вопросы / ответы в БД, где хранятся вопросы, вот так:

  • логический вопрос1
    • if (false): строка question2 (обычно причина, по которой question1 был false)

Это было бы легко, однако вопросы могут быть вложены в несколько уровней:

  • логический вопрос1
    • if (false) логический вопрос2
      • if (true) string question3
      • if (false) строка question4

Если бы мне не нужно было хранить его в БД, я бы представлял вопросы (и даже весь опрос) в виде композита, но я не знаю, как я мог бы хранить что-то подобное.

Ответы [ 2 ]

3 голосов
/ 15 апреля 2009

Если ваши вопросы формируют дерево, а не график, есть два распространенных способа представления иерархических данных в sql .

* * Модель модели списка смежности требует многократных самостоятельных объединений для поиска детей (детей ... детей). Если у вас есть ORM, например Hibernate, ORM позаботится о том, чтобы сделать достаточное количество самостоятельных соединений, чтобы вернуть вопрос и ответы его дочернего элемента. Без ORM для этого вам придется либо динамически добавлять самостоятельные объединения в запрос, либо выполнять несколько запросов, по одному для каждой строки в предыдущем наборе результатов.

Модель вложенного набора , обычно приписываемая Джо Селько, позволяет получить целое дерево за один выбор. Но это означает, что добавление и удаление узлов более сложное и требует обновления всех строк.

В Списке Смежности у вас может быть таблица вопросов, подобная этой (id, question text, id_next_if_true, id_next_if_false). Это отличается от классического Списка Смежности, в котором вместо дочерних элементов, содержащих parent_id, родительский элемент содержит два дочерних идентификатора, или нуль.

1 голос
/ 15 апреля 2009

Думаю, я бы сделал что-то вроде этого:

Table: Questions
int id
string question

Table: Question Answer Map
int questionId
bool answer
int nextQuestion

Вместо bool, вы можете использовать int, char или string для ответа, если вопросы с несколькими вариантами ответов.

...