PostgreSQL
 sql >> Database >  >> RDS >> PostgreSQL

Relazioni uno-a-molti in (Postgre)SQL

Quello che in realtà hai qui è una relazione molti-a-molti. Pensaci:ogni tag può essere su più post e ogni post può avere più tag.

L'architettura relazionale corretta per questo è aggiungere un'altra tabella nel mezzo come questa:

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

Quindi rilascia i tags colonna nella tabella dei tuoi post.

Questo risolve tutti i tuoi problemi, perché puoi ottenere il set di tag su un post o il set di post con un determinato tag unendoti a post_tags in direzioni diverse. Puoi anche ottenere l'elenco dei tag che iniziano con qualcosa usando una normale query LIKE, che sarà più difficile se hai un mucchio di stringhe concatenate in un campo.