База данных опросов - дополнительный вопрос о структуре таблицы - PullRequest
0 голосов
/ 24 октября 2019

Я ссылаюсь на сообщение о переполнении закрытого стека,

Дизайн базы данных для опроса

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

Например, если опрос (назовем его "Оценка состояния здоровья ») проводится первоначальное обследование, а затем - через 6 месяцев, что будет лучшим решением:

  • сделать две записи в таблице обследования -« Оценка состояния здоровья - начальная »и« Оценка состояния здоровья -6 месяцев », так что в заполненной таблице опросов идентификатор обследования будет отличаться для обоих обследований. Полагаю, для этого потребуются записи для обоих опросов в других таблицах (survey_question и survey_question_answer). Похоже на большое дублирование.
  • сделайте одну запись в таблице опроса - «Оценка состояния здоровья» и добавьте дополнительное обозначение в заполненную таблицу опроса (ответ), где пользователь может поставить «Начальный» или «6-месяц ".

Надеюсь, это имеет смысл. Я думаю, что любое решение может работать;Я просто хочу более оптимальное решение.

1 Ответ

0 голосов
/ 24 октября 2019

Сохранение этого существующего дизайна;Предполагая, что SurveyID является уникальным первичным ключом, первое предложение, как вы уже признали, приведет к избыточным данным, если только вопросы не будут меняться со временем. Второй вариант тоже не слишком хорош, потому что я считаю, что он сделает недействительным назначение полей StartDate, EndDate и IsOpened в таблице Survey.

Как насчет создания таблицы Survey_Instance? Таблица Survey будет содержать идентификатор и описание Survey, а новая таблица будет содержать свойства Start, End и IsOpened при каждой публикации опроса. Ответы могут быть связаны через "SurveyInstanceID", а вопросы могут быть связаны с таблицей Survey. Это дает дополнительное преимущество, связывая ответы с конкретными временными рамками, чтобы вы могли наблюдать, как ответы могут меняться со временем.

...