在 MySQL 中存储调查回复的最佳方式是什么?

What is the best way to store survey responses in MySQL?

我正在设计一个数据库来存储通过 APIs 从我们的调查平台 - Wufoo 收集的调查回复。每个调查都有不同数量的问题。每个调查都有一个 ID,每个响应也有一个 ID。我想高效且灵活地存储数据,以便通过查询同时检索多个问题。

一种选择是将其存储为 table,包含列 - Survey_Id、Response_Id、问题和响应。即来自 API 的每一行响应将在单个 table.

中包含许多行

另一种选择是有两个 table 称为问题和响应。每个 table 可以有大约 50 个名为 Q1、Q2、Q3、Q4 等的列。然后我可以将所有问题(一次)存储在问题 table 中,并为每个响应存储值在 Q1、Q2、Q3 等相同序列的响应 table 中。要检索,我可以在读取响应 table 时使用问题 table 中的值作为列名的别名,最有可能使用存储过程。

如果您打算使用这些数据进行报告,您会选择以上哪个选项,并且可能预见到潜在的问题?还是有其他方法来存储调查回复?

规范化是数据库设计的最佳方法。

你的第二个选项不错,但会进一步改进。维护 2 tables questionsresponses.

问题table架构

survey_id

question_id

question

响应table架构

response_id

survey_id (references to survey_id in questions table)

question_id (references to question_id in questions table)

response

假设调查 1 有 20 个问题。因此,questions table 将有 20 个条目。对于每个问题,都会在 response table.

中找到答案

再提示一下,如果您期望大量回复或大型数据集,请避免自动递增主键,因为这会耗尽。因此,我在 responses table.

中维护了 2 个引用 survey_idquestion_id

希望对您有所帮助!