Дизайн на база данни за проучване с повтарящи се групи

Имам проста база данни с анкети, където се задава линеен набор от въпроси. Базата данни е настроена по-долу.

Survey Table
id: PK
(other details)

Question Table
id: PK
survey_id: FK
(other details)

Response Table
id: PK
question_id: FK
(other details)

Бях помолен да променя анкетата, за да позволя N повтарящи се групи с въпроси. Например.

  1. Как се казваш? Какъв е Вашият адрес?
  2. Спортуваш ли?
  3. Какъв спорт тренираш?
  4. На каква позиция играеш?
  5. Играете ли друг спорт? Ако да, отидете на 3, иначе отидете на 6
  6. (Допълнителни въпроси)

Какъв би бил най-добрият начин за проектиране на база данни за проучване с повтарящи се групи?

Мислех да използвам таблица с правила за въпроси, за да насочвам линията от въпроси. Например.

Question Rule Table
id: PK
question_id: FK
response_validation_rule (possibly a regex pattern)
next_question_id

Това ли ще бъде най-добрият начин за прилагане на въпроса за повтарящи се групи? Също така предполагам, че ще бъде трудно да се нормализират и данните. Всички предложения ще бъдат високо оценени.


person schwietertj    schedule 24.12.2013    source източник


Отговори (1)


Собствено отношение много към много в таблицата с въпроси може да помогне.
Отношението много към много ще свърже един въпрос с други въпроси.

За да постигнете критериите за извличане на свързани въпроси:

Ако да, отидете на 3

Може да се направи чрез добавяне на FK от таблицата с отговори към таблицата много към много.

Нещо подобно: въведете описание на изображението тук
Просто предлагам да не използвате колона със заместващ идентификатор в таблицата на свързаните въпроси.

  • Съставният PK ще бъде {main question id, related question id,answer id}
  • Ограничението за проверка ще бъде {main question id <> related question id}
person Mohsen Heydari    schedule 26.12.2013
comment
Благодаря ви много за толкова изчерпателен отговор. За таблицата с отговори, как ще се третират отворените въпроси? - person schwietertj; 03.01.2014
comment
Вие сте добре дошъл. Мисля, че трябва да имате колона за брой въпроси в таблицата с анкети, след което да имате колона с номера на въпросите в таблицата с въпроси с механизъм за проверка (задействане или логика на приложението), за да проверите дали номер на въпрос ‹= брой на въпроси ще помогне. - person Mohsen Heydari; 03.01.2014