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

Relations un-à-plusieurs dans (Postgre)SQL

Ce que vous avez en fait ici est une relation plusieurs à plusieurs. Pensez-y :chaque tag peut figurer sur plusieurs publications, et chaque publication peut avoir plusieurs balises.

L'architecture relationnelle correcte pour cela consiste à ajouter une autre table au milieu comme ceci :

CREATE TABLE post_tags (
  id INTEGER REFERENCES posts,
  tag VARCHAR REFERENCES tags
);

Déposez ensuite les tags colonne sur votre tableau de messages.

Cela résout tous vos problèmes, car vous pouvez obtenir l'ensemble de balises sur une publication ou l'ensemble de publications avec une balise donnée en joignant contre post_tags dans différentes directions. Vous pouvez également obtenir la liste des balises qui commencent par quelque chose en utilisant une requête LIKE classique, ce qui sera plus difficile si vous avez plusieurs chaînes concaténées dans un champ.