调查数据库-有关表结构的其他问题

时间:2019-10-23 21:45:17

标签: structure survey

我引用的是封闭的堆栈溢出帖子

Database design for a survey

帖子中的最高答案给出了用于调查数据库的表格的很好概述,并具有良好的表格关系视图。我的问题附在调查表上,尤其是存储顶级调查记录的表。对于在指定时期内进行的调查(初次调查,6个月后,12个月后等),如果调查没有不同的问题和答案(只是初次调查的重复),在顶层调查表中创建不同的调查作为不同的调查记录,或者最好在完成的调查表中添加一个字段作为辅助标识符。

例如,如果一项调查(称为“健康评估”)具有初始调查,则在6个月后进行一次调查,这将是更好的解决方案:

  • 在调查表中记录两个记录-“健康评估-初始”和“健康评估-6个月”,以便在完成的调查表中,两个调查的surveyID都不同。我想,这将需要在其他表(survey_question和survey_question_answer)中为两项调查记录。似乎有很多重复。
  • 在调查表中进行一项记录-“健康评估”,并在已完成的调查表(answer)中添加一个附加名称,用户可以在其中输入“初始”或“六个月”。

希望这是有道理的。我认为任何一种解决方案都可能有效;我只想要更好的解决方案。

1 个答案:

答案 0 :(得分:0)

继续使用现有设计;假设SurveyID是唯一的主键,您已经认识到的第一个建议将导致冗余数据,除非打算随时间改变问题。第二个选项也不是很好,因为我认为它将使Survey表上的StartDate,EndDate和IsOpened字段的目的无效。

如何创建Survey_Instance表?每次发布调查时,“调查”表将保存“调查ID”和描述,新​​表将保存“开始”,“结束”和“ IsOpened”属性。可以通过“ SurveyInstanceID”链接响应,并且可以将问题链接到“调查”表。这具有将响应链接到特定时间范围的附加好处,因此您可以观察响应随时间的变化。