У вас есть пара вопросов здесь, поэтому я отвечу на них отдельно:
Мне нужно сохранить количество выбранных элементов в одном поле в базе данных
Мое общее правило: не надо. Это то, что для всех, кроме , требуется вторая таблица (или третья) с внешним ключом. Конечно, сейчас это может показаться проще, но что, если появится вариант использования, когда вам нужно запросить эти элементы по отдельности? Это также означает, что у вас есть больше возможностей для отложенного создания экземпляров, и у вас есть более согласованный опыт работы с несколькими средами / языками. Кроме того, у вас реже возникают проблемы с тайм-аутом соединения (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.