Как эффективно хранить анкету в базе данных? - PullRequest
3 голосов
/ 07 января 2011

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

Я думал о том, чтобы иметь таблицу с (ID-вопрос, вопрос), а затем вторую таблицу для ID-вопроса и ответа. Но это решение может быть слишком медленным, потому что для объединения вопросов с конкретным пользователем потребуется третье объединение.

Ответы [ 4 ]

2 голосов
/ 07 января 2011

Что не так с соединением?В этом вся суть реляционной базы данных, объединение.

Хранение вопросов в одной таблице.

Хранение ответов на вопросы в другой таблице.

Если ответы предопределены, они и являютсяРаспространенный среди более чем одного вопроса, затем сохраните общие ответы в своей собственной таблице и создайте другую таблицу, которая имеет QuestionID с answerID.

Не бойтесь объединений, они являются частью реляционных баз данных.Без объединений вы просто имеете дело с плоскими файлами.

0 голосов
/ 28 января 2013

Я немного опоздал с ответом, но, возможно, кто-то найдет эту информацию полезной.

Я полностью согласен с JonH.Я просто приведу пример того, как я реализовал его, чтобы сделать общее решение более понятным.

Наиболее распространенные таблицы:

  1. Вопросы: Id (PK), Вопрос, Description, OrderNumber, SectionId (FK to QuestionsSections.Id), AnswerTypeId (FK to AnswerType.Id)
  2. Ответы: Id (PK), Answer, SubmitDate, UserId (FK для Users.Id), QuestionId (FK to Questions.Id)
  3. Анкета: Id (PK), Имя, Описание
  4. QuestionnaireQuestions: QuestionnaireId (PK, FK to Questionnaire.Id), QuestionId (PK, FK to Questions.Id)
  5. ВопросыСекции: Id (PK), Имя, Описание, OrderNumber
  6. AnswerType: Id (PK), Тип, Описание

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


Ниже приведены ссылки, которые могут быть полезны (рекомендуемая последовательность для чтения от довниз):

0 голосов
/ 07 января 2011

Я думаю, что было бы лучше иметь отдельный класс / файл, представляющий вопросник, используя хэш-карту. И тогда другие классы могут использовать его. На самом деле я не вижу необходимости хранить вопросы в БД, поскольку они все равно будут загружены в хэш-карту.

0 голосов
/ 07 января 2011

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...