【问题标题】:db schema for storing survey matrix questions and answers用于存储调查矩阵问题和答案的 db 模式
【发布时间】:2014-11-20 07:34:38
【问题描述】:

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

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

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

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 的所有问题类型。有什么办法吗?

【问题讨论】:

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


    【解决方案1】:

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

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

    第一个选项的唯一缺点是当前的 DBMS 不会使 DDL 更新像 DML 更新那样高效。您应该构建您的软件以独立于您当前选择的选项。就您使用 EAV 而言,您正在编写自己的 DBMS。

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

    【讨论】:

      【解决方案2】:

      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) );

      【讨论】:

      • 感谢您的回复,但对答案不满意!
      • @Sunny 通过将要求编辑到您的问题中来解释这有什么问题。
      【解决方案3】:

      你可以创建三个表

      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中输入一个条目

      【讨论】:

      • 感谢您的回复...但是您如何获得 FoodId 的所有评级名称?还有……这不是一个单一的问题!
      • 试试这样的SELECT UR.UserName, RT.RatingName ,FT.FoodName FROM UserRating UR JOIN RatingType RT ON RT.RatingId = UR.RatingId JOIN FoodType FT ON FT.FoodId = UR.FoodId WHERE UR.FoodId = 1
      • @Sunny & vijayp:这与 MatrixQuestion(username,meal,rate) 的答案基本相同,但毫无意义地添加了 id。每个设计都应该有适当的类型检查。
      • @Sunny:我们无法读懂你的想法。解释“获取一个 FoodId 的所有评级名称”和“这不是一个总是一个问题”的含义。
      • @philipxy 感谢您的宝贵意见。通过说“获取 FoodId 的所有评级名称”,我的意思是,vijayp 没有提到 FoodType 表的任何外键,所以你将如何获得所有评级。 PS,我已经将我的问题编辑为“这不是一个单一的问题”。再次感谢您将我指向 EAV ......要去调查一下。谢谢!
      猜你喜欢
      • 2018-12-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-05-08
      • 2010-10-09
      • 2018-07-22
      • 2023-03-09
      • 1970-01-01
      相关资源
      最近更新 更多