用于存储调查矩阵问题和答案的数据库模式

时间:2014-11-20 07:34:38

标签: sql-server relational-database database-schema survey db-schema

我正在尝试创建一个数据库架构来存储调查问题和答案,而我却无法想到架构来保存数据。

这是我想要存储在数据库中的示例问题:

enter image description here

有关如何做到这一点的任何指示都非常感谢!

PS:我已经在SO上发过这些帖子,但他们没有帮助:

Relational Database System with dynamic columns with dynamic rows

Storing a distance matrix in DB

SQL design for survey with answers of different data types

修改1

PS:

我想创建一个架构来存储SurveyMonkey.com和Qualtrics.com中的所有问题类型。有什么办法吗?

3 个答案:

答案 0 :(得分:1)

Google stackoverflow有关sql和问卷/调查的问题。阅读有关EAV及其问题的信息。 (例如,搜索我对EAV的答案)。

一种选择是使用每个问题的基表,其中列为垂直列,列为水平列,其中有关多个问题的查询查询数据库元数据&与DBMS管理问题的完整性。另一个选择是EAV,其中关于问题的每个查询都涉及从前一句中构建相应的表,并且由您通过复杂约束来管理完整性。

第一个选项的唯一缺点是当前的DBMS不会使DDL更新像DML更新一样高效。您应该将软件结构化为独立于当前选择的选项。在您使用EAV的程度上,您正在编写自己的DBMS。

您可以找到答案和调查的示例调查数据导出和下载格式,例如SurveyMonkey.com和Qualtrics.com(datasurveys)。

答案 1 :(得分:0)

MySQL版

CREATE TABLE MatrixQuestion ( username VARCHAR(45) NOT NULL COMMENT 'ex Michael', meal VARCHAR(10) NOT NULL COMMENT 'ex breakfast, lunch, dinner', rate TINYINT NOT NULL COMMENT 'ex 1:poor 2:average 3:fair 4:good 5:awesome', PRIMARY KEY (meal, username, rate) );

答案 2 :(得分:0)

您可以创建三个表格作为

FoodType

FoodId - PK (TINYINT) -- 1,2,3
FoodName - varchar(50)-- breakfast, lunch, dinner

RatingType

RatingId - PK (TINYINT) --1,2,3,4,5
RatingName - varchar(50) --poor,average,fair,good, awesome

UserRating

UserName - varchar(100)
RatingId - FK (TINYINT)
FoodId - FK (TINYINT)

现在,对于每个用户,反馈都会在表UserRating

中创建一个条目