用于存储具有多个 select 字段的动态表单数据的数据库设计
DB Design for storing dynamic form data with multi select fields
如何从具有多个 select 字段的动态表单中存储数据。
我已经阅读了各种 post 并且所有示例都只有列表键、值输入。但是如果表单有多个 select 输入。存储数据的最佳方式是什么。
我不是在寻找 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??)
表单Table示例数据
| form_id | form_name |
|:-------:|:---------------:|
| 1 | Enquiry Form |
| 2 | Test Drive Form |
| 3 | Feedback Form |
Form_elements样本
| id | form_id | element_type_id | name | list_group |
|:--:|:-------:|:---------------:|:---------:|:-------:|
| 1 | 1 | 1 | firstName | |
| 2 | 1 | 1 | LastName | |
| 3 | 1 | 2 | color | color|
element_types
| 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 posted
{
"firstName": "john",
"lastName": "Doe",
"color": "red"
}
form_submit table 将有以下行
| form_id | Column_id | value |
|:-------: |:---------: |:-----: |
| 1 | 1 | John |
| 1 | 2 | Doe |
| 1 | 3 | Red |
| 1 | 1 | James |
| 1 | 2 | Smith |
| 1 | 3 | Blue |
如果动态表单有多个 select 选项
示例 json posted 将是
{
"firstName": "John",
"lastName": "Doe",
"color": [
"red",
"green",
"blue"
]
}
你如何存储这些数据。
我们需要将它存储在相同的 form_submit table 中吗?或存储在不同的 table
首先...我必须警告像这样的动态模式通常不是一个好主意。
其次,您的 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
现在我们可以创建一个 table,比如说 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
table 中添加一行。这取决于您的 form_submit
商店。
这只是一种方法。但这实际上取决于您的业务流程、实体之间的关系、您希望如何输入和输出数据等。您可能想在线研究问卷数据模型,因为这并不是什么新鲜事。
我怀疑这可能会提示更多问题,但让我们先试试这个
使用 JsonString 保存您提交的表单可能是一个解决方案:
form_submit
-------------
id (PK)
form_id
user_id
value_json
(other_fields)
其中 value_json --> {"form_element_id as the key" : "submitted value"}
让我们以某种形式说,我们有一个名称字段(字段 ID 23)和一个多选字段(字段 ID 24),其中 ["a"、"b"、"c"]作为选项。
所以 form_submit Table 的示例数据可以是
| form_id | u_id | value_json |
|:-------:|:----:|:-----------------------------------------------------:|
| 1 | 049 | '{"23": "Some random question", "24": ["a", "b"]}' |
| 1 | 033 | '{"23": "Another random question", "24": ["a"]}' |
如何从具有多个 select 字段的动态表单中存储数据。
我已经阅读了各种 post 并且所有示例都只有列表键、值输入。但是如果表单有多个 select 输入。存储数据的最佳方式是什么。 我不是在寻找 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??)
表单Table示例数据
| form_id | form_name |
|:-------:|:---------------:|
| 1 | Enquiry Form |
| 2 | Test Drive Form |
| 3 | Feedback Form |
Form_elements样本
| id | form_id | element_type_id | name | list_group |
|:--:|:-------:|:---------------:|:---------:|:-------:|
| 1 | 1 | 1 | firstName | |
| 2 | 1 | 1 | LastName | |
| 3 | 1 | 2 | color | color|
element_types
| 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 posted
{
"firstName": "john",
"lastName": "Doe",
"color": "red"
}
form_submit table 将有以下行
| form_id | Column_id | value |
|:-------: |:---------: |:-----: |
| 1 | 1 | John |
| 1 | 2 | Doe |
| 1 | 3 | Red |
| 1 | 1 | James |
| 1 | 2 | Smith |
| 1 | 3 | Blue |
如果动态表单有多个 select 选项 示例 json posted 将是
{
"firstName": "John",
"lastName": "Doe",
"color": [
"red",
"green",
"blue"
]
}
你如何存储这些数据。
我们需要将它存储在相同的 form_submit table 中吗?或存储在不同的 table
首先...我必须警告像这样的动态模式通常不是一个好主意。
其次,您的 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
现在我们可以创建一个 table,比如说 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
table 中添加一行。这取决于您的 form_submit
商店。
这只是一种方法。但这实际上取决于您的业务流程、实体之间的关系、您希望如何输入和输出数据等。您可能想在线研究问卷数据模型,因为这并不是什么新鲜事。
我怀疑这可能会提示更多问题,但让我们先试试这个
使用 JsonString 保存您提交的表单可能是一个解决方案:
form_submit
-------------
id (PK)
form_id
user_id
value_json
(other_fields)
其中 value_json --> {"form_element_id as the key" : "submitted value"}
让我们以某种形式说,我们有一个名称字段(字段 ID 23)和一个多选字段(字段 ID 24),其中 ["a"、"b"、"c"]作为选项。
所以 form_submit Table 的示例数据可以是
| form_id | u_id | value_json |
|:-------:|:----:|:-----------------------------------------------------:|
| 1 | 049 | '{"23": "Some random question", "24": ["a", "b"]}' |
| 1 | 033 | '{"23": "Another random question", "24": ["a"]}' |