json - 用于存储具有多选字段的动态表单数据的数据库设计

标签 json database forms database-design dynamicform

如何从具有多选字段的动态表单中存储数据。

我已经阅读了各种帖子,所有示例都只有列表键、值输入。但是如果表单有多选输入。存储数据的最佳方式是什么。 我不是在寻找 NoSQL 解决方案。

当前设计

 forms
-----
  id (PK)
  name     
  (other fields)

form_elements
-------------
  id (PK)
  form_id (FK to forms.id)
  element_type_id (FK to element_types.id)
  name
  list_group (nullable, it will be related only for multiselect inputs)      
  (other fields)

element_types
-------------
  id (PK)
  name

list_values
-------------------
  id (PK)      
  value
  group
  (other fields??)

表格表格示例数据

| form_id |    form_name    |
|:-------:|:---------------:|
|    1    |   Enquiry Form  |
|    2    | Test Drive Form |
|    3    |  Feedback Form  |

表单元素示例

| id | form_id | element_type_id |    name   | list_group |
|:--:|:-------:|:---------------:|:---------:|:-------:|
|  1 |    1    |        1        | firstName |         |
|  2 |    1    |        1        |  LastName |         |
|  3 |    1    |        2        |   color   |    color|

元素类型

| id    |   name    |
|:--:   |:--------: |
|  1    |   text    |
|  2    | checkbox  |
|  3    |   radio   |

list_values 样本数据

| id    | value     | group     |
|:--:   |:-----:    |-------    |
|  1    |  red      | color     |
|  2    |  blue     | color     |
|  3    | green     | color     |
| 4     | Dell      | brand     |
| 5     | HP        | brand     |

发布的示例 json

{
  "firstName": "john",
  "lastName": "Doe",
  "color": "red"
}

form_submit 表将包含以下行

| form_id   | Column_id     | value     |
|:-------:  |:---------:    |:-----:    |
|    1      |     1         |  John     |
|    1      |     2         |  Doe      |
|    1      |     3         |  Red      |
|    1      |     1         | James     |
|    1      |     2         | Smith     |
|    1      |     3         |  Blue     |

如果动态表单有多选选项 发布的示例 json 将是

{
  "firstName": "John",
  "lastName": "Doe",
  "color": [
    "red",
    "green",
    "blue"
  ]
}

你如何存储这些数据。
我们是否需要将它存储在同一个 form_submit 表中。或者存储在不同的表中

最佳答案

首先...我必须警告像这样的动态模式通常不是一个好主意。

其次,您的form_submit 似乎只能存储一组答案

我在这里做出假设 - 不清楚您是否需要支持多集,但如果支持的话就有意义了。

因此,首先让我们扩展 form_submit 以支持来自不同人的多组问题。我们将添加一列 submit_id,这是某人正在回答的问卷(一组问题)的实例。

submit_id   form_id   Column_id   value
    1           1        1        Block
    1           1        2        Rough
    1           1        3        Red
    2           1        1        Cylinder
    2           1        2        Smooth
    2           1        3        Blue

现在我们知道 submit_id=1 是一个人回答的一组问题,而 submit_id=2 是另一个人回答的另一组不同的问题

您可能想要创建一个描述此内容的提交 header :

submit_id      form_id    submit_datetime          submit_by
    1             1        2017-07-06 09:37:00       Fred
    2             1        2017-07-02 07:31:00       Fred

现在我们可以创建一个表,比如 multiselect,它让我们定义许多可能的问题和许多可能的多选之间的关系

submit_id   column_id   list_value_id
     1          3            1   (red)
     1          3            2   (blue)
     1          3            3   (green)
     2          3            4   (dell)

这组行告诉我们,问卷 1 在第 3 列上有多项选择,他们选择了红色、蓝绿色。

问卷 2 在第 3 列有多项选择,他们只选择了 Dell

为此,您甚至不需要在 form_submit 表中添加一行。这取决于您的 form_submit 存储的内容。

这只是一种方法。但这实际上取决于您的业务流程、实体之间的关系、您希望输入和输出数据的方式等。您可能想要在线研究调查表数据模型,因为这并不是什么新鲜事。

我怀疑这可能会提示更多问题,但让我们先试试这个

关于json - 用于存储具有多选字段的动态表单数据的数据库设计,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44934073/

相关文章:

html - 上传文件以解决 Stripe 托管帐户验证问题

ruby-on-rails - 在 erb - rails 中保存复选框值

java - Jackson CSV Writer 抛出 ArrayIndexOutOfBoundsException

javascript - 如何使用 jQuery 添加/附加到外部 JSON 文件

java - 从数据库查询中过滤值

javascript - 仅在填充新行时阻止表单提交

json - 使用图形 API 在作品集网站上显示 Facebook 相册中的图像

c++ - 如何从 QString 初始化 QJsonObject

mysql - 同步6个不同mysql数据库的用户表数据

database - Postgresql:无法从 pg_dump 恢复模式