Как одному полю в таблице SQL задать больше одного значения (или иначе как лучше реализовать БД)?

В проекте есть таблица SQLite, в которой указана информация о человеке: имя, фамилия, итп. У человека есть значение "интересы", которое предполагает наличие нескольких строковых значений. Причём по мере существования проекта могут быть добавлены новые типы интересов, то есть их количество фиксировано.

Как в одно поле записать несколько строковых значений, или если практика плохая (что вероятно) как реализовать таблицу по-другому?

По аналогии в коде мне нужен List


Ответы (1 шт):

Автор решения: Sergey

Как в одно поле записать несколько строковых значений

Так делать нельзя ни в коем случае! Если это не так, то это является нарушением первой нормальной формы:

https://habr.com/ru/articles/254773/

Решить поставленную Вами задачу легко с помощью с помощью связанных таблиц. Грубо говоря:

  1. Создаём дополнительную таблицу "Интересы" в которой перечислены все известные Вам виды интересов. Эта таблица состоит из ID интереса и его текстового названия.
  2. Создаём таблицу "Интересы людей". Эта таблица состоит из двух колонок:
    • ID человека
    • ID интереса этого человека.

Таким образом, сначала заводим список людей и интересов, а потом заполняем таблицу "Интересы людей". Каждая строка в этой таблице говорит о том, что человек с ID человека имеет интерес с ID интереса.

Это - единственно правильное решение.Называется "Таблица связей". Она связывает человека с интересом.

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

Точно так же в любой момент можно править таблицу "Интересы", добавляя туда новые интересы или удаляя ставшими ненужные.

При использовании такого решения, необходимо в структуру БД добавить ограничение на удаление строк из таблицы "Интересы", если ID удаляемой записи ещё используется где-то в таблице связи. За этим будет следить сам SQL сервер.

→ Ссылка