Структура SQL для хранения опросов и ответов - создавать таблицы и запросы на основе пользовательских данных?

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

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

ОБНОВИТЬ

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

4 ответа

Решение

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

Создать таблицу опросов (SurveyID, UserID, Имя и т. Д.)

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

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

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

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

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

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

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

Вы, вероятно, не хотите программно генерировать схему.

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

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

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

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

Другие вопросы по тегам