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

So speichern Sie ein Array oder mehrere Werte in einer Spalte

Sie haben hier ein paar Fragen, also werde ich sie separat ansprechen:

Ich muss eine Reihe ausgewählter Elemente in einem Feld in einer Datenbank speichern

Meine allgemeine Regel lautet:nicht. Das ist etwas, was fast erfordert wird eine zweite Tabelle (oder dritte) mit einem Fremdschlüssel. Sicher, es mag jetzt einfacher erscheinen, aber was ist, wenn der Anwendungsfall kommt, bei dem Sie diese Elemente tatsächlich einzeln abfragen müssen? Es bedeutet auch, dass Sie mehr Optionen für die verzögerte Instanziierung haben und eine konsistentere Erfahrung über mehrere Frameworks/Sprachen hinweg haben. Außerdem ist die Wahrscheinlichkeit von Verbindungszeitüberschreitungsproblemen geringer (30.000 Zeichen sind viel).

Sie haben erwähnt, dass Sie über die Verwendung von ENUM nachdenken. Sind diese Werte fest? Kennst du sie vorher? Wenn ja, wäre das meine Struktur:

Basistabelle (was Sie jetzt haben):

| id primary_key sequence
| -- other columns here.

Artikeltabelle:

| id primary_key sequence
| descript VARCHAR(30) UNIQUE

Kartentabelle:

| base_id  bigint
| items_id bigint

Die Zuordnungstabelle hätte Fremdschlüssel, sodass base_id der Basistabelle zugeordnet wäre und items_id der Artikeltabelle zugeordnet wäre.

Und wenn Sie dies auf einfache Weise aus einer Datenbank abrufen möchten, erstellen Sie eine Ansicht, die die Verknüpfungen durchführt. Sie können sogar Einfüge- und Aktualisierungsregeln erstellen, sodass Sie praktisch nur mit einer Tabelle arbeiten.

In welchem ​​Format soll ich die Daten speichern?

Wenn Sie so etwas tun müssen, warum verwenden Sie nicht einfach eine Zeichenkette? Es benötigt weniger Rechenleistung als eine CSV-, XML- oder JSON-Datei und ist kürzer.

Welchen Spaltentyp soll ich zum Speichern der Daten verwenden?

Ich persönlich würde TEXT verwenden . Es klingt nicht so, als würden Sie viel gewinnen, wenn Sie dies zu einem BLOB machen , und TEXT , ist meiner Erfahrung nach einfacher zu lesen, wenn Sie irgendeine Form von IDE verwenden.