2016-08-25 96 views
0

我們的自定義字段在我們的數據庫設計像下面存儲和搜索複選框值的自定義字段

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

否。不要將它存儲在單個逗號分隔值字段中。您將無法對其進行排序並輕鬆使用其值。 嘗試使用類似於以下的結構。

起初可能你會發現這種事情的3-4張表太多了,但你會從中得到很多好處。通過這種方式,您可以非常輕鬆地對選項進行排序,更改值,激活,取消激活或刪除特定選項,甚至可以通過一些簡單的更改來支持多種語言。

此外,您還可以使用兩種不同類型的表格來優化存儲容量,一種用於複選框,僅用於整數值,另一種用於混合值(分別爲checkbox_option_int和checkbox_option_text)。

例如以這種方式,將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 

編輯:

您可以保存這樣的答案:

例如

答案

id question_id 
1 1 
2 2 

answer_checkbox

id answer_id checkbox_id 
1 1   1 
2 2   3 

(只有具有值2 =>標籤 「B」 複選框選擇的)

answer_checkbox_int

answser_checkbox_id checkbox_option_int_id 
1     2 

(僅限值爲1 =>標籤複選框,選擇 「是」)

answer_checkbox_text

answser_checkbox_id checkbox_option_text_id 
2     1 
+0

這將幫助我定義自定義字段的表。我的問題是關於如何存儲用戶選擇的值。我認爲我們可以使用單獨的表格,這將作爲複選框和checkbox_option_text之間的多對多關係。我在這裏糾正? –

+0

是的,情況就是這樣。如果將選項分爲2個表格,則必須在應用程序層檢查複選框的類型,但這相對容易。否則,爲了簡單起見,您可以合併2個表格。 –