【发布时间】:2009-01-13 18:25:28
【问题描述】:
问候堆垛机,
我正在尝试为允许用户创建调查并将其展示给公众的应用程序提出最佳数据库架构。大多数调查(但不是全部)都会包含一堆“标准”人口统计字段,例如名字、姓氏等。当然,用户可以创建无限数量的“自定义”问题。
我首先想到的是这样的:
Survey
ID
SurveyName
SurveyQuestions
SurveyID
Question
Responses
SurveyID
SubmitTime
ResponseAnswers
SurveyID
Question
Answer
但是每次我想查询数据时都会很糟糕。而且它似乎危险地接近Inner Platform Effect
改进方法是在响应表中包含我能想到的尽可能多的字段:
Responses
SurveyID
SubmitTime
FirstName
LastName
Birthdate
[...]
然后至少从这些常见列中查询数据很简单,我可以查询,例如,曾经回答过他们出生日期的任何调查的每个人的平均年龄。
但这似乎会使代码复杂一些。现在要查看调查中提出了哪些问题,我必须检查启用了哪些常见响应字段(我猜是使用调查中的位域)以及 SurveyQuestions 表中的内容。而且我必须担心特殊情况,例如如果有人试图创建一个“自定义”问题,该问题与“响应”表中的“常见”问题重复。
这是我能做到的最好的吗?我错过了什么吗?
【问题讨论】:
-
我可以建议您将问题的标题更改为“什么是调查系统的最佳数据库架构?”
标签: mysql database database-design schema