在自定义字段中存储和搜索复选框值

时间:2016-08-25 17:44:10

标签: database-design custom-fields

我们的数据库设计中有自定义字段,如下所示

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

在这里,我们可以存储单个值,如文本框,下拉列表,单选按钮和文本区域。我也可以轻松地在搜索查询中使用它们。现在我想存储包含多个值的复选框值,我想搜索它们。我打算用逗号分隔值存储它。有没有比这更好的存储方式,可以用于搜索

1 个答案:

答案 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