Vous avez quelques questions ici, je vais donc les aborder séparément :
J'ai besoin de stocker un certain nombre d'éléments sélectionnés dans un champ d'une base de données
Ma règle générale est :non. C'est quelque chose qui, sauf exige une deuxième table (ou troisième) avec une clé étrangère. Bien sûr, cela peut sembler plus facile maintenant, mais que se passe-t-il si le cas d'utilisation se présente où vous devez réellement interroger ces éléments individuellement ? Cela signifie également que vous avez plus d'options pour l'instanciation paresseuse et que vous avez une expérience plus cohérente sur plusieurs frameworks/langages. De plus, vous êtes moins susceptible d'avoir des problèmes de délai de connexion (30 000 caractères, c'est beaucoup).
Vous avez mentionné que vous envisagez d'utiliser ENUM. Ces valeurs sont-elles fixes ? Les connaissez-vous d'avance ? Si oui, ce serait ma structure :
Table de base (ce que vous avez maintenant) :
| id primary_key sequence
| -- other columns here.
Tableau des articles :
| id primary_key sequence
| descript VARCHAR(30) UNIQUE
Tableau de la carte :
| base_id bigint
| items_id bigint
La table de mappage aurait des clés étrangères, donc base_id correspond à la table de base et items_id correspond à la table des éléments.
Et si vous souhaitez un moyen simple de récupérer ceci à partir d'une base de données, créez une vue qui effectue les jointures. Vous pouvez même créer des règles d'insertion et de mise à jour afin de ne traiter pratiquement qu'une seule table.
Quel format dois-je utiliser pour stocker les données ?
Si vous devez faire quelque chose comme ça, pourquoi ne pas simplement utiliser une chaîne délimitée par des caractères ? Cela prendra moins de puissance de traitement qu'un CSV, XML ou JSON, et ce sera plus court.
Quel type de colonne dois-je utiliser pour stocker les données ?
Personnellement, j'utiliserais TEXT
. Il ne semble pas que vous gagneriez beaucoup en en faisant un BLOB
, et TEXT
, d'après mon expérience, est plus facile à lire si vous utilisez une forme d'IDE.