Структура SQL для хранения опросов и ответов - создавать таблицы и запросы на основе пользовательских данных? - PullRequest
3 голосов
/ 25 февраля 2009

Я абсолютный новичок, когда дело доходит до SQL. Я делаю сайт в ASP.NET для проведения опросов. Привилегированный пользователь-администратор сможет построить опрос. Тогда многие другие люди ответят на опрос.

Как только у меня будет набор вопросов для нового опроса, каков наилучший способ автоматического построения таблицы и запроса INSERT для хранения ответов?

UPDATE

Спасибо за быстрые ответы! Мне все еще немного неясно, как ответы в опросе будут лучше всего храниться в этом сценарии. Получит ли каждый респондент строку таблицы? И если да, то будут ли столбцы «ответом на вопрос k обследования, указанного в записи в столбце 1»?

Ответы [ 4 ]

8 голосов
/ 25 февраля 2009

Вы не хотите создавать новую таблицу для каждого опроса.

Создание таблицы опросов (SurveyID, UserID, Name и т. Д.)

Создание таблицы вопросов (QuestionID, SurveyID, QuestionText, SortOrder и т. Д.)

опционально, создайте таблицу параметров, если у вас есть вопросы с несколькими вариантами ответов (OptionID, QuestionID, OptionText и т. Д.)

Затем, когда кто-то создает опрос, вы вставляете его в таблицу опросов, ссылаясь на UserID этого человека в качестве внешнего ключа, а затем получаете недавно вставленный SurveyID,

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

РЕДАКТИРОВАТЬ, чтобы ответить на ваши изменения:

Извините, я должен был выполнить все вопросы, связанные с хранением ответов.

Вы бы хотели другую таблицу с именем SurveyResponses (ResponseID, Name и т. Д.) И еще одну таблицу, которую я назову ResponseAnswers (ResponseAnswerID, SurveyID, ResponseID, QuestionID, AnswerText / AnswerID), где SurveyID и ResponseID являются внешними ключами для соответствующих таблиц и в зависимости от того, имеют ли пользователи несколько вариантов выбора, или введите ответ, либо сохранить свой ответ в виде текста (varchar) или в качестве другого внешнего ключа для таблицы параметров.

1 голос
/ 25 февраля 2009

Возможно, вы не хотите, чтобы схема генерировалась программно.

Вместо этого имейте таблицу для опросов, для вопросов (которые относятся к опросам), для наборов ответов (по одному на пользователя) и ответов на вопросы (которые относятся к наборам ответов).

0 голосов
/ 16 декабря 2018

Я бы подумал о паре вариантов:

  • Создайте таблицу «один ко многим» Survey и таблицу Question, где каждый Question имеет столбец DataType, который содержит код ожидаемого типа данных ответа и, возможно, некоторые другие столбцы / связанная таблица доступных параметров, столбец, в котором указывается, является ли этот вопрос многовариантным / единичным выбором, обязательный / необязательный вопрос и т. д. Ответ таблицы Answer сериализуется / десериализируется / индексируется / форматируется и т. д. в соответствии с типом данных вопроса
  • Рассмотрите возможность использования базы данных NoSql для хранения данных опроса аналогичным образом
0 голосов
/ 25 февраля 2009

Вы не создадите таблицу автоматически. Таблица будет предварительно определена, и ответы будут добавлены к ним. Я думаю, что лучший способ начать работу с ASP.NET в эти дни - погрузиться в MVC & Linq (http://asp.net/learn)

...