我正在尝试创建一个数据库架构来存储调查问题和答案,而我却无法想到架构来保存数据。
这是我想要存储在数据库中的示例问题:
有关如何做到这一点的任何指示都非常感谢!
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中的所有问题类型。有什么办法吗?
答案 0 :(得分:1)
Google stackoverflow有关sql和问卷/调查的问题。阅读有关EAV及其问题的信息。 (例如,搜索我对EAV的答案)。
一种选择是使用每个问题的基表,其中列为垂直列,列为水平列,其中有关多个问题的查询查询数据库元数据&与DBMS管理问题的完整性。另一个选择是EAV,其中关于问题的每个查询都涉及从前一句中构建相应的表,并且由您通过复杂约束来管理完整性。
第一个选项的唯一缺点是当前的DBMS不会使DDL更新像DML更新一样高效。您应该将软件结构化为独立于当前选择的选项。在您使用EAV的程度上,您正在编写自己的DBMS。
您可以找到答案和调查的示例调查数据导出和下载格式,例如SurveyMonkey.com和Qualtrics.com(data或surveys)。
答案 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