PostgreSQL
 sql >> Datenbank >  >> RDS >> PostgreSQL

Eins-zu-Viele-Beziehungen in (Postgre)SQL

Was hier tatsächlich vor sich geht, ist eine Viele-zu-Viele-Beziehung. Denken Sie darüber nach:Jedes Tag kann sich auf mehreren Beiträgen befinden, und jeder Beitrag kann mehrere Tags haben.

Die richtige relationale Architektur dafür besteht darin, eine weitere Tabelle in der Mitte wie folgt hinzuzufügen:

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

Dann lassen Sie die tags fallen Spalte in Ihrer Beitragstabelle.

Dies löst alle Ihre Probleme, da Sie den Satz von Tags für einen Beitrag oder den Satz von Beiträgen mit einem bestimmten Tag erhalten können, indem Sie sich in verschiedenen Richtungen mit post_tags verbinden. Sie können die Liste der Tags, die mit etwas beginnen, auch mit einer normalen LIKE-Abfrage abrufen, was schwieriger ist, wenn Sie eine Reihe von Zeichenfolgen in einem Feld verkettet haben.