2016-08-25 6 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 стола для такого рода вещей слишком много, но у вас будет много преимуществ от этого. Таким образом, вы можете легко сортировать параметры, изменять значения, активировать, деактивировать или удалить определенные параметры и даже поддерживать многие языки с помощью нескольких простых изменений.

Также вы сможете оптимизировать емкость хранилища, используя 2 разных типа таблиц, один для флажков, которые принимают только и целочисленные значения, а один для смешанных значений (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 

EDIT:

Вы можете сохранить ответы, как это:

например

ответ

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 таблицы для простоты. –