调查数据库设计:将答案与用户相关联

Van*_*nel 14 database-design

我正在做一个调查数据库的概念模型。

目标是存储用户给出的答案(它将是一个 Android 应用程序)。

我有三个实体:用户、问题和选​​项。

一个问题将有一个或多个选项(例如:您有多少员工? 1-40、40-1000、+1000)。

选项将有一个文本 (1-40) 和一个值(用户选择的值)。

用户将选择这些选项中的一个(或多个)。

我的概念设计是:

在此处输入图片说明

我不知道如何将答案与用户相关联。

我如何表示这种关系?
我是否有另一个实体来表示期权价值?

该模型将存储问题和预制答案(提供的答案),并允许它们在不同的调查中重复使用。

我必须代表这样的问题:

在此处输入图片说明

这个问题与这个问题有关:Survey database design: first version。有错误吗?

Mic*_*ant 15

调查数据库架构。

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

在此处输入图片说明

关键表的表详细信息

答案

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

输入类型

input_types是问题的类型。每个问题只能是 1 种类型,例如所有无线电拨号、所有文本字段等。如果有(例如)5 个无线电拨号和 1 个“包括?”复选框,请使用其他问题。选项或一些这样的组合。将用户视图中的两个问题标记为一个,但内部有两个问题,一个用于无线电拨号,一个用于复选框。在这种情况下,复选框将包含一组 1。

option_groups

option_groupsoption_choices 可让您构建“通用”组。例如,在房地产应用程序中,可能会出现“该物业的年限是多少?”的问题。可能需要以下范围的答案:1-5 6-10 10-25 25-100 100+

然后,例如,如果有关于相邻房产年龄的问题,那么调查将希望“重用”上述范围,以便使用相同的 option_group 和 options。

度量单位

units_of_measure就像听起来一样。无论是英寸、杯子、像素、砖块还是其他任何东西,您都可以在这里定义一次。

仅供参考:虽然本质上是通用的,但可以在此基础上创建一个应用程序,并且此架构非常适合Ruby On Rails框架,其中包含每个表的主键的“id”等约定。此外,关系都是简单的one_to_many,不需要many_to_many 或has_many 直通。我可能会添加 has_many :throughs 和/或 :delegates 以便在没有.multiple.chaining 的情况下轻松地从单个答案中获得诸如survey_name 之类的东西。


Joe*_*own 10

您需要区分可能的答案和选定的答案。

Option表需要两个表。该Option表应为 1:M,Question并应包括该问题的可能答案。

然后您需要创建一个新的交叉实体,将其命名为Selected_Option位于User和之间Option

如果您的问题让用户有机会填写一个值作为答案(即“其他:...”),则该值将存储在Selected_Option表中。否则,用户选择的值将是在 中找到的值Option


编辑:

基于OP对需求的澄清:您需要的不像典型的问卷模型,在以下方面:

  • 您的问题都有相同的答案集(列)
  • 您的一些答案(列)组合在一起。
  • 问题块组合在一起。

以您的表单快照为指导,我将表单的元素划分为我用颜色编码的实体:

颜色编码表格示例

这可以通过以下逻辑 ERD 来适应:

逻辑ERD

请注意,我已经对 ERD 中的实体进行了颜色编码,以对应于您的示例表单的快照以显示相关性。

该模型中的假设之一是每个块只有一组问题(即一个QUESTION_GROUP),它对应于块中的左侧列。这是一个稍微简化的假设。