如何使用多选字段存储动态表单中的数据。
我已阅读各种帖子,所有示例都只有列表键,值输入。但是如果表单有多选输入。什么是存储数据的最佳方式。 我不是在寻找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 |
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发布了
{
"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表中。或存储在不同的表格中
答案 0 :(得分:1)
使用JsonString保存您提交的表单可以解决:
form_submit
-------------
id (PK)
form_id
user_id
value_json
(other_fields)
其中value_json-> {“ form_element_id作为关键字”:“提交的值”}
以某种形式说,我们有一个名称字段(字段ID 23)和一个multiselect(字段ID 24),并带有[“ a”,“ b”,“ c”]作为选项。
因此form_submit表的样本数据可以是
| form_id | u_id | value_json |
|:-------:|:----:|:-----------------------------------------------------:|
| 1 | 049 | '{"23": "Some random question", "24": ["a", "b"]}' |
| 1 | 033 | '{"23": "Another random question", "24": ["a"]}' |
答案 1 :(得分:0)
首先......我必须警告,像这样的动态模式通常是一个坏主意。
其次,您的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是由另一个人回答的另一组不同的问题
您可能想要创建一个描述此内容的提交标头:
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列有一个多选,他们刚刚选择了戴尔
您甚至不需要在form_submit
表中添加一行。这取决于你的form_submit
商店还有什么。
这只是一种方法。但它实际上取决于您的业务流程,实体之间的关系,您希望如何获取数据等等。您可能希望在线研究问题数据模型,因为这不是什么新鲜事。
我怀疑这可能只是提示更多问题,但让我们先尝试一下