2016-04-28 5 views
1

In meinem PostgreSQL zu speichern habe ich zwei Tabellen board und cards Tabellen mit OneToMany Beziehung zwischen ihnen (ein board können mehrere haben cards).PostgreSQL effektiver Weg, um eine Liste von IDs

Der Benutzer kann ein paar Karten auf dem Brett halten. Um diese Funktionalität in der Regel zu implementieren, würde ich eine andere Tabelle namens cards_on_hold mit OneToMany Beziehung erstellen und Karten auf Hold-IDs in diese Tabelle platziert. Um diese Daten für Board zu holen, würde ich JOIN zwischen und cards_on_hold verwenden.

Gibt es in PostgreSQL einen effektiveren Weg, Karten mit gehaltenen IDs zu speichern? Vielleicht zum Beispiel eine Funktion zum Speichern dieser Liste in board Tabelle? Ich werde diese ID-Liste später in IN SQL-Klausel verwenden müssen, um Kartensatz zu filtern.

Antwort

2

Postgres tut Unterstützung Arrays von ganzen Zahlen (unter der Annahme Ihrer IDs sind ganze Zahlen):

http://www.postgresql.org/docs/9.1/static/arrays.html

jedoch, dass die Daten zu manipulieren ist ein wenig hart im Vergleich zu einer separaten Tabelle. Zum Beispiel können Sie mit einer separaten Tabelle eine Eindeutigkeitsgarantie erstellen, so dass Sie keine Duplikate von IDs haben (vorausgesetzt, Sie möchten das). Um dasselbe mit einem Array zu erreichen, müssten Sie eine gespeicherte Prozedur erstellen, um Duplikate zu erkennen (zum Beispiel beim Einfügen). Das wäre schwer (wenn überhaupt möglich) so effizient wie einfach zu sein. Ganz zu schweigen davon, dass Sie Konsistenzgarantie verlieren, weil Sie keine Fremdschlüsselbeschränkung für ein solches Array festlegen können.

Also in der Regel Konizität wäre ein Problem mit Inline-Liste. Zur gleichen Zeit bezweifle ich, dass Sie einen bemerkenswerten Leistungsgewinn bekommen würden. Nach alle Arrays sollte nicht als "aggregierter Fremdschlüssel" IMHO verwendet werden.

Alles in allem: Ich schlage vor, Sie bleiben bei einer separaten Tabelle.

Verwandte Themen