问候堆垛机,
我正在尝试为允许用户创建调查并将其展示给公众的应用程序提出最佳数据库模式。大多数调查(但不是全部)将包括一堆“标准”人口统计字段,例如名字、姓氏等。当然,用户可以创建无限数量的“自定义”问题。
我想到的第一件事是这样的:
Survey
ID
SurveyName
SurveyQuestions
SurveyID
Question
Responses
SurveyID
SubmitTime
ResponseAnswers
SurveyID
Question
Answer
但这每次我想查询数据时都会很糟糕。它似乎危险地接近内平台效应
一个改进是在响应表中包含尽可能多的字段:
Responses
SurveyID
SubmitTime
FirstName
LastName
Birthdate
[...]
然后,至少从这些常见列中查询数据是很简单的,我可以查询,比如说,每个回答过他们出生日期的调查的人的平均年龄。
但这似乎会使代码复杂一些。现在要查看调查中提出了哪些问题,我必须检查启用了哪些常见响应字段(我猜是使用调查中的位域)以及 SurveyQuestions 表中的内容。而且我必须担心特殊情况,例如,如果有人试图创建一个“自定义”问题,该问题与“响应”表中的“常见”问题重复。
这是我能做的最好的吗?我错过了什么吗?