PostgreSQL array von Elementen, die jeweils einen Fremdschlüssel
Ich bin versucht, erstellen Sie eine DB für meine app und eine Sache möchte ich auf den besten Weg finden, das zu tun, ist das erstellen einer eins-zu-viele-Beziehung zwischen meinem Users
und Items
Tabellen.
Ich weiß, kann ich eine Dritte Tabelle, eine ReviewedItems
, und die Spalten werden ein User
- id und ein Item
- id, aber ich würde gerne wissen, ob es möglich ist, eine Spalte in Users
, sagen wir mal reviewedItems
, die ein integer-array mit Fremdschlüssel zu Items
dass die User
überprüft hat.
Wenn PostgreSQL kann dies tun, lassen Sie es mich bitte wissen! Wenn nicht, werde ich gehen Sie einfach meine Dritte Tabelle route.
- Es wurden patches hinzufügen, um dieses feature zu Postgres, siehe blog.2ndquadrant.com/... (2012) und postgresql.org/message-id/... (2017). Sie wurde noch nicht angenommen, da noch nicht, aber hoffentlich eines Tages.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Nein, das ist nicht möglich.
PostgreSQL ist ein relationalen DBMS, Betriebssystem effizient zu nutzen, richtig auf normalisierten Datenmodellen. Arrays sind - per definition sind Sie bestellt-sets - nicht relationale Datenstrukturen und SQL-standard unterstützt nicht die Definition von Fremdschlüsseln auf array-Elemente, und auch nicht PostgreSQL.
Können Sie, allerdings, erstellen a völlig in Ordnung-Datenbank mit array-Elementen die Verknüpfung zum Primärschlüssel in anderen Tabellen. Diese array-Elemente kann jedoch nicht erklärt werden Fremdschlüssel und das DBMS wird daher nicht die referenzielle Integrität zu erhalten.
reliably in all cases
? Du meinst, manchmal ausgelöst werden können, gescheitert ? Danke.Kann es bald möglich sein, dies zu tun: https://commitfest.postgresql.org/17/1252/ - Mark Rofail getan hat einige ausgezeichnete Arbeit an diesem patch!
Den patch (einmal komplett) ermöglichen
Jedoch, der Autor derzeit braucht Hilfe zur Festsetzung der patch (über meine eigene Fähigkeit), so dass jemand dies liest, der weiß, Postgres Interna bitte helfen Sie, wenn Sie können.
CREATE TABLE FKTABLEFORARRAY ( ftest1 int[], FOREIGN KEY (EACH ELEMENT OF ftest1) REFERENCES PKTABLEFORARRAY, ftest2 int )