Структура 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).