PostgreSQL
 sql >> Base de données >  >> RDS >> PostgreSQL

Comment stocker un tableau ou plusieurs valeurs dans une colonne

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.