2012-05-17 1 views
0

В моей компании мы попросили всех сотрудников департаментов принять участие в опросе. Структура этого опроса выглядит следующим образом: он состоит из четырех категорий; I, II, III, IV. В трех категориях есть несколько вопросов, а в последней категории есть подкатегории от А до L. Каждая подкатегория имеет много вопросов. И большинство из этих вопросов имеют подтексты.Правильно ли это создание базы данных для хранения результатов опроса?

Есть два типа вопросов; вопросы с множественным выбором с различным количеством вариантов (иногда 2 или 4 или 5 или 6 вариантов) и письменный вопрос (например, прокомментируйте следующий материал ...). Пример вопроса, который имеет подзапросы: Что вы думаете о следующих услугах? служба 1
Сервиса 2 Сервис 3

Кстати, этот вопрос является несколько вопросом выбора, где каждые подвопросы (например, Service1) имеют 5 вариантов.

Проблема сейчас - это просто создание базы данных, в которой хранятся пользовательская информация, вопросы и ответы пользователей. Цель этой базы данных, чтобы позже составить статистику в зависимости от вопроса. Например, я должен написать запрос, который показывает, сколько сотрудников сказали (согласен или сильно не согласен) на вопрос № 3 с указанием подзапросов.

я придумал следующий неполную структуру базы данных, но это, кажется сложным:

Employee Table: Username, Name, DepartmentID 
Department Table: DepartmentID, DepartmentName 
Category Table: CategoryID, CategoryName 
SubCategory Table: SubCategoryID, SubCategoryName, CategoryID 
Question Table: QuestionID, Question 
SubQuestion Table: SubQuestionID, SubQuestion, QuestionID 
Answer Table: AnswerID, Answer, QuestionID, SubQuestionID 

Так что это лучший дизайн базы данных, которая может хранит всю эту информацию, а затем дает мне общие статистические данные, которые я хотеть?

+0

Я хотел бы добавить Id на таблице Employee, даже если имя пользователя является хорошим кандидатом для первичного ключа. И если у вас есть список вариантов, то может быть что-то вроде Choices (ChoiceId, QuestionId, Text) и ответ на прямую ссылку на выбор для соответствующего типа вопросов. Это было бы намного легче проанализировать позже. –

ответ

0

Ваш сотрудник & Таблицы отделов выглядят прекрасно. У меня есть следующие предложения:

- Включить подкатегории, подкатегории, подкатегории & Номера вопросов в их соответствующих таблицах (например, I, II, III, IV для категорий, A, B, C и т.д. для вопросов и т. Д. on, при условии, что Question/CategoryName является полноразмерным Вопросом/категорией)

- Таблица вопросов должна включать SubCategoryID FK.

- У меня также был бы employeeID, как предлагается в комментариях (имена пользователей могут быть повторно использованы после того, как люди уйдут).

- Тогда я бы разработать следующие таблицы:

Answer Table: 

AnswerID 
SubquestionID 
AnswerType (choose between 'Multiple', 'Long') 
AnswerName (NULL if AnswerType is 'Long', a, b, c, etc if 'Multiple') 

SurveyResults Table: 

EmpID (FK from Employee table), 
SubQuestionID (a, b, c, ...; again if no subquestion, then put in a) 
Answer (varchar(4000), so you can accommodate both types of answers) 

Обратите внимание, что вы должны держать таблицу ответов провести выбор для вопросов множественного выбора.

+0

Я нахожу, что редактирую и повторно редактирую свой ответ, как я думаю. Дело в том, что вам нужно решить, хотите ли вы быстро обновлять ответы или быстро анализировать результаты. Мое предложение выше для первого случая.В последнем случае, после того, как опрос был закрыт, я бы создал таблицу из представления существующих таблиц, где показаны EmpID, CategoryNum, SubCatNum, QuestionNum, SubQuestionNum, AnswerType, Answer. Эта новая таблица была бы хорошей основой для дальнейшего анализа. – SQLCurious

2

Мое предложение будет что-то вроде этого:

Employee Table: UserId, Username, Name, DepartmentId 
Department Table: DepartmentId, DepartmentName 
Category Table: CategoryId, CategoryName, ParentId 

Question Table: QuestionId, Question, CategoryId 
QuestionChoices Table: ChoiceId, QuestionId, Choice, Sequence 

Answer Table: AnswerId, QuestionId, UserId, Text 
AnswerChoices Table: AnswerId, QuestionId, UserId, ChoiceId, [Value] 
Смежные вопросы