Как правильней реализовать combobox в базе?

Комбобокс - это элемент разметки. Выглядит как выпадающий список с возможностью вписать свое значение, если ничего из списка не подошло.

Как реализовать такой функционал лучше всего? Как сохранять в базу новые значение?

Я вижу несколько реализаций, но, как мне кажется, ни одна из них не идеальна.

Первый вариант: "2 поля".
Нужно выбрать цвет при создании нового товара для каталога. Есть 2 таблицы "Товары" и "Цвета". У товара есть поле "ID цвета" и "Другой цвет". В форме создания товара, по сути, 2 поля - одно позволяет выбрать цвет из списка и сохранить его ID, второй поле просто текстовое, позволяет ввести свой цвет, если нужного цвета в списке нет, и сохранить его в "Другой цвет".
Такой способ требует проверки, чтобы у товара был либо указан ID, либо вписан другой цвет.

Второй вариант: "Автоподстановка".
Все тоже самое, только у товара всего одно текстовое поле "Цвет". Выпадающий список просто заполняет это поле. Даже после выбора можно редактировать содержимое, ничего не сломается. Выбор сохраниться в товаре как текст (например, содержимое поля будет "Синий").
При таком способе будет (почти) невозможно отфильтровать товары по цвету. Но этот вариант годится, например, для чата или техподдержки, чтобы выбирать стандартные ответы.

Третий вариант: "Создание на лету".
Если мы ввели в поле такой вариант, которого нет в списке, то он автоматически добавится в таблицу. Соответсвенно для нашего примера, в таблице товаров будет только одно поле — "ID цвета".
В этом способе, после активного использования, в выпадающем списке будет куча хлама, опечаток, ошибочных записей и тп. Но можно добавленные на лету записи выводить только после модерации. В общем, это самый крутой вариант, но самый сложный.

Может быть есть варианты лучше или проще?
И кстати, если у вашего варианта есть html-реализация (плагин, например), буду рад увидеть.
  • Вопрос задан
  • 353 просмотра
Пригласить эксперта
Ответы на вопрос 1
@Fortop
Tech/Team lead
К mysql данный вопрос имеет странное отношение, особенно с учётом просьбы примера в html...

Механизма на самом деле всего три.

1. Любой пользователь может вносить новые значения.
2. Только отдельные люди могут редактировать список добавляя или удаляя значения.
3. Никто не может его изменить, только выбрать из существующих.

Выбор конкретного варианта зависит скорее от бизнеспроцесса.
То есть, если все пользователи это исключительно сотрудники и их немного, то можно им разрешить работать по п.1

Если пользователей много (десятки, сотни, тысячи), то с большой вероятностью лучше п.2, когда лишь ограниченный круг ответственных лиц имеет право на корректировку.

Пункт 3 полезен для тех случаев, когда пользователи системы не являются ответственными лицами для принятия решений и/или их очень много, а отдельно за данными никто не следит. В этом случае лучше ограничить доступное подмножество вариантов выбора, как раз для избегания мусора и бардака в данных.

Во всех трех случаях данные такого вида нужно хранить в отдельной таблице и строить связи с другими по ID характеристики.
Плюс рекомендую учесть возможность пометить их как удалённый при этом не удаляя физически из БД, чтобы не выводить в списке вариантов выбора для пользователей, но при этом иметь адекватный вид в архивах прошлых операций, когда эти данные можно было выбирать.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы