在我的公司,我们要求所有部门员工参与调查。本次调查的结构如下:它由四类组成; I,II,III,IV。三个类别有几个问题,而最后一个类别有从A到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 :(得分: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]
答案 1 :(得分:0)
您的员工&部门表看起来很好。我有以下建议:
- 包括子,类别,子&各自表格中的问题编号(即:I,II,III,IV类别,A,B,C等问题等,假设问题/类别名称是全长问题/类别)
- QuestionID表应包含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)
请注意,您应该保留一个答案表来保留多项选择题的选择。