sql - 哪些 mysql 数据库表和关系可以支持带有条件问题的问答调查?

标签 sql database-design database-schema erd data-modeling

我现在正在开发一个相当简单的调查系统。数据库模式将很简单:a Survey表,与 Question 存在一对多关系表,与 Answer 是一对多关系表和 PossibleAnswers表。

最近,客户意识到她希望能够仅向对之前某个问题给出了特定答案的人显示某些问题(例如,你买香烟吗?,后面会显示什么?你最喜欢的香烟品牌?,向不吸烟者问第二个问题是没有意义的)。

现在我开始想知道根据我的数据库模式实现这个条件问题的最佳方法是什么?如果question A有 2 个可能的答案:A 和 B,以及 question B仅当答案为 A 时才应向用户显示?

编辑:我正在寻找一种在数据库中存储有关需求的信息的方法。数据的处理可能会在应用程序端完成,因为我的 SQL 技能很糟糕;)

最佳答案

Survey Database Design

最后更新:2015 年 5 月 3 日
图表和 SQL 文件现已在 https://github.com/durrantm/survey 提供。

enter image description here

如果您使用此(顶部)答案或任何元素,请添加有关改进的反馈!!!

这是一个真正的经典,由数千人完成。它们一开始似乎总是“相当简单”,但要做好,实际上却相当复杂。为了在 Rails 中做到这一点,我将使用附图中所示的模型。我确信对于某些人来说这似乎过于复杂,但是一旦您构建了其中一些,多年来,您会意识到大多数设计决策都是非常经典的模式,最好通过动态灵活的数据结构来解决一开始。
更多详细信息如下:

Table details for key tables

答案

答案表至关重要,因为它捕获用户的实际响应。 您会注意到答案链接到question_options,而不是问题。这是故意的。

输入类型

input_types 是问题的类型。每个问题只能是一种类型,例如所有 radio 拨号盘、所有文本字段等。当有(例如)5 个 radio 拨号盘和 1 个用于“包含?”的复选框时,请使用附加问题。选项或某种此类组合。将用户 View 中的两个问题标记为一个,但内部有两个问题,一个针对 radio 拨号盘,一个针对复选框。在这种情况下,复选框将有一组 1。

选项组

option_groupsoption_choices 让您可以构建“通用”组。 举一个例子,在房地产应用程序中可能会出现这样的问题:“该特性有多少年了?”。 可能需要的答案在以下范围内: 1-5 6-10 10-25日 25-100 100+

然后,例如,如果存在有关相邻特性年龄的问题,那么调查将希望“重用”上述范围,以便使用相同的 option_group 和选项。

测量单位

units_of_measure 顾名思义。无论是英寸、杯子、像素、砖 block 还是其他什么,您都可以在这里定义一次。

仅供引用:虽然本质上是通用的,但人们可以在此基础上创建一个应用程序,并且此模式非常适合 Ruby On Rails 框架,其约定例如“id”作为主数据每个表的键。此外,这些关系都是简单的 one_to_many 关系,不需要 Many_to_many 或 has_many 遍历。我可能会添加 has_many :throughs 和/或 :delegates ,以便轻松地从个人答案中获取诸如 Survey_name 之类的内容,而无需使用.multiple.chaining。

关于sql - 哪些 mysql 数据库表和关系可以支持带有条件问题的问答调查?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/540885/

相关文章:

java - Hibernate,无法执行查询,SQL 错误 : 17059, SQLState:99999

java - 如何使用 JpaRepository @Query 获取 count() 结果列表?

python - 前向声明 - django 中没有管理页面?

sql-server - 关于不同值和大型结果集以及用于审计的单个垂直表的聚集索引考虑

MySQL性能调优

mysql - 消息传递表性能 - 将 id 和 id 合并到一个字段而不是单独的 2 个字段

SQL 主键,INT 或 GUID 或..?

mysql - 在 SQL 查询问题中计数

mysql - Percona 工具包在线架构更改 : Possible to add multiple columns all at once?

mysql - 具有奇数一对多关系的高效 SQL 模式设计