sql >> Database >  >> RDS >> PostgreSQL

Hoe array of meerdere waarden in één kolom op te slaan

Je hebt hier een paar vragen, dus ik zal ze afzonderlijk behandelen:

Ik moet een aantal geselecteerde items in één veld in een database opslaan

Mijn algemene regel is:niet doen. Dit is iets dat alles behalve vereist een tweede tafel (of derde) met een externe sleutel. Natuurlijk lijkt het nu misschien eenvoudiger, maar wat als de use-case zich voordoet waarbij u daadwerkelijk naar die items afzonderlijk moet zoeken? Het betekent ook dat je meer opties hebt voor luie instantiëring en dat je een meer consistente ervaring hebt in meerdere frameworks/talen. Verder heb je minder kans op verbindingstime-outproblemen (30.000 tekens is veel).

U zei dat u erover dacht ENUM te gebruiken. Staan deze waarden vast? Ken jij ze van tevoren? Zo ja, dan zou dit mijn structuur zijn:

Basistabel (wat je nu hebt):

| id primary_key sequence
| -- other columns here.

Artikeltabel:

| id primary_key sequence
| descript VARCHAR(30) UNIQUE

Kaarttabel:

| base_id  bigint
| items_id bigint

De kaarttabel zou externe sleutels hebben, dus base_id verwijst naar de basistabel en items_id verwijst naar de tabel met items.

En als je een gemakkelijke manier wilt om dit uit een DB op te halen, maak dan een weergave die de joins doet. Je kunt zelfs regels voor invoegen en bijwerken maken, zodat je praktisch maar met één tabel te maken hebt.

Welk formaat moet ik gebruiken om de gegevens op te slaan?

Als je zoiets als dit moet doen, waarom zou je dan niet gewoon een tekenreeks gebruiken? Het kost minder verwerkingskracht dan een CSV, XML of JSON, en het zal korter zijn.

Welk kolomtype moet ik gebruiken om de gegevens op te slaan?

Persoonlijk zou ik TEXT . gebruiken . Het klinkt alsof je niet veel zou winnen door hier een BLOB van te maken , en TEXT , is naar mijn ervaring gemakkelijker te lezen als je een of andere vorm van IDE gebruikt.



  1. Dict-object toevoegen aan postgresql

  2. CURRENT_DATE Voorbeelden – MySQL

  3. psql - sla de resultaten van de opdracht op in een bestand

  4. MySQL DROP-KOLOM