Как одному полю в таблице SQL задать больше одного значения (или иначе как лучше реализовать БД)?
В проекте есть таблица SQLite, в которой указана информация о человеке: имя, фамилия, итп. У человека есть значение "интересы", которое предполагает наличие нескольких строковых значений. Причём по мере существования проекта могут быть добавлены новые типы интересов, то есть их количество фиксировано.
Как в одно поле записать несколько строковых значений, или если практика плохая (что вероятно) как реализовать таблицу по-другому?
По аналогии в коде мне нужен List
Ответы (1 шт):
Как в одно поле записать несколько строковых значений
Так делать нельзя ни в коем случае! Если это не так, то это является нарушением первой нормальной формы:
https://habr.com/ru/articles/254773/
Решить поставленную Вами задачу легко с помощью с помощью связанных таблиц. Грубо говоря:
- Создаём дополнительную таблицу "Интересы" в которой перечислены все известные Вам виды интересов. Эта таблица состоит из ID интереса и его текстового названия.
- Создаём таблицу "Интересы людей". Эта таблица состоит из двух колонок:
- ID человека
- ID интереса этого человека.
Таким образом, сначала заводим список людей и интересов, а потом заполняем таблицу "Интересы людей". Каждая строка в этой таблице говорит о том, что человек с ID человека имеет интерес с ID интереса.
Это - единственно правильное решение.Называется "Таблица связей". Она связывает человека с интересом.
Таким образом, у каждого человека может быть сколько угодно интересов, их список можно менять без проблем в любое время, просто добавив (или удалив) строку из таблицы связи.
Точно так же в любой момент можно править таблицу "Интересы", добавляя туда новые интересы или удаляя ставшими ненужные.
При использовании такого решения, необходимо в структуру БД добавить ограничение на удаление строк из таблицы "Интересы", если ID удаляемой записи ещё используется где-то в таблице связи. За этим будет следить сам SQL сервер.