Я работаю над проектом, который является настроенной и определенной CMS. Во внешнем интерфейсе многие поля будут иметь предварительно заполненные варианты. Однако для этих полей должна быть опция «Другое», которая позволяет вводить текстовую строку пользователем. Область проекта не хочет, чтобы эти новые «другие» значения были добавлены в предварительно заполненные списки (сейчас или в дальнейшем). Это просто исключение. Масштаб проекта настаивает на этой гибкости, которая реализована во всем приложении.
У меня есть таблицы базы данных, которые содержат все эти предварительно заполненные списки. Я называю эти таблицы моими таблицами списков (все начинаются с "списка _")
Мой вопрос касается сохранения выбора, который делает пользователь. Если бы не эта гибкость, я бы сохранил значение в качестве внешнего ключа для соответствующей таблицы списка. Однако для этих полей имеет смысл хранить значение (строку), а не ключ. Недостатками являются индексирование (второстепенное), управление контентом (второстепенное), глобальные обновления, то есть изменение значения в таблице списка не приведет к ретроспективному изменению в системе, если не закодировано (довольно большая проблема).
Я также упомяну, что хранение данных в виде значений, а не ключей делает программирование и функции намного проще (я пишу служебный слой, он сокращает объединения и позволяет функциям быть более общими).
Хранить как значение (строку), а не ключ - это курс, по которому хочет идти команда.
Я совершаю большую ошибку, делая это? Или это довольно часто? Есть ли другие вопросы для рассмотрения?
Альтернатива:
Мой альтернативный вариант - добавить строку «Другие» в качестве новой строки в таблицу списков и использовать поле, чтобы сделать ее «скрытой».