如何从具有多选字段的动态表单中存储数据。
我已经阅读了各种帖子,所有示例都只有列表键、值输入。但是如果表单有多选输入。存储数据的最佳方式是什么。 我不是在寻找 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/