Ответ 1
У вас здесь пара вопросов, поэтому я буду обращаться к ним отдельно:
Мне нужно сохранить несколько выбранных элементов в одном поле в базе данных
Мое общее правило: не надо. Это то, что требует все, кроме второй таблицы (или третьей) с внешним ключом. Несомненно, теперь это может показаться более простым, но что, если прецедент приходит, где вам нужно действительно запрашивать эти предметы отдельно? Это также означает, что у вас больше возможностей для ленивого создания экземпляра, и у вас есть более последовательный опыт работы с несколькими фреймворками/языками. Кроме того, у вас меньше шансов на тайм-аут подключения (30 000 символов много).
Вы упомянули, что думали об использовании ENUM. Установлены ли эти значения? Вы их заранее знаете? Если так, то это будет моя структура:
Базовая таблица (что у вас есть):
| id primary_key sequence
| -- other columns here.
Таблица элементов:
| id primary_key sequence
| descript VARCHAR(30) UNIQUE
Таблица карт:
| base_id bigint
| items_id bigint
Таблица карт будет иметь внешние ключи, поэтому base_id будет сопоставляться с базой, а items_id будет отображаться в таблице элементов.
И если вам нужен простой способ получить это из БД, тогда создайте представление, которое объединяет. Вы даже можете создавать правила вставки и обновления, так что вы практически имеете дело только с одной таблицей.
Какой формат следует использовать для хранения данных?
Если вам нужно сделать что-то подобное, почему бы просто не использовать символьную строку? Это займет меньше вычислительной мощности, чем CSV, XML или JSON, и это будет короче.
Какой тип столбца следует использовать для хранения данных?
Лично я использовал бы TEXT
. Похоже, что вы сильно выиграли, сделав это BLOB
, а TEXT
, по моему опыту, легче читать, если вы используете какую-то форму IDE.