我们的数据库设计中有自定义字段,如下所示
Custom_Field
field_id bigint(20)
field_name varchar(200)
field_label varchar(200)
field_type varchar(45)
Custom_Field_Value
field_id bigint(20)
date_value datetime
number_value decimal(18,6)
string_value varchar(200)
text_value text
在这里,我们可以存储单个值,如文本框,下拉列表,单选按钮和文本区域。我也可以轻松地在搜索查询中使用它们。现在我想存储包含多个值的复选框值,我想搜索它们。我打算用逗号分隔值存储它。有没有比这更好的存储方式,可以用于搜索
答案 0 :(得分:1)
没有。请勿将其存储在单个逗号分隔值字段中。您将无法对其进行排序并轻松使用其值。 尝试使用如下结构。
首先,你可能会发现这类东西的3-4张桌子太多了,但你会从中获益很多。通过这种方式,您可以非常轻松地对选项进行排序,更改值,激活,停用或删除特定选项,甚至可以通过一些简单的更改支持多种语言。
此外,您还可以使用2种不同类型的表优化存储容量,一种用于仅采用整数值的复选框,另一种用于混合值(分别为checkbox_option_int和checkbox_option_text)。
e.g。通过这种方式,可以非常轻松地将checkbox_id添加到question_id并选择所有可能的选项而无需数据库中的冗余数据。
<强> checkbox_type 强>
id type
1 int
2 text
复选框强>
id checkbox_type_id
1 1
2 1
3 2
<强> checkbox_option_int 强>
id checkbox_id value label rank active
1 1 1 A 1 yes
2 1 2 B 2 yes
3 1 5 C 4 no
4 1 8 D 3 yes
5 2 1 AA 1 yes
6 2 2 BB 2 yes
<强> checkbox_option_text 强>
id checkbox_id value label rank active
1 3 yes Yes 1 yes
2 3 no No 2 yes
3 3 perhaps Perhaps 3 no
修改强>
您可以保存以下答案:
e.g。
<强>答案强>
id question_id
1 1
2 2
<强> answer_checkbox 强>
id answer_id checkbox_id
1 1 1
2 2 3
(仅限复选框的值为2 =&gt;标签&#34; B&#34;已选中)
<强> answer_checkbox_int 强>
answser_checkbox_id checkbox_option_int_id
1 2
(仅限复选框的值为1 =&gt;标签&#34;是&#34;已选中)
<强> answer_checkbox_text 强>
answser_checkbox_id checkbox_option_text_id
2 1