CodeGym /Corsi /SQL SELF /Introduzione agli array: cosa sono e quando usarli

Introduzione agli array: cosa sono e quando usarli

SQL SELF
Livello 35 , Lezione 0
Disponibile

Sicuramente hai già sentito parlare di array. In diversi linguaggi di programmazione significano quasi la stessa cosa. Ma ci sono delle sfumature.

Un array in PostgreSQL è un tipo di dato che ti permette di salvare un insieme di valori dello stesso tipo in una sola colonna di una tabella. È come se invece di scrivere un solo valore, mettessi una vera e propria "scatola" di dati in una cella. Può essere una lista di numeri, stringhe, date o anche oggetti più complessi.

Parlando in modo astratto, un array si può paragonare a una cassetta degli attrezzi. Invece di portarti dietro tutto il set di chiavi in mano (ogni chiave come una colonna/riga separata), le metti in una valigetta comoda (una colonna che contiene un array).

Due modi per creare array

In PostgreSQL ci sono due sintassi principali per creare array. È come avere due modi diversi di fare la valigia — il risultato è lo stesso, ma il metodo cambia:

  1. Sintassi con le parentesi graffe {}

Questo è il modo più compatto e spesso usato:

-- Array di stringhe
'{"mela", "banana", "ciliegia"}'

-- Array di numeri
'{1, 2, 3, 4, 5}'

-- Array di date
'{"2023-01-01", "2023-01-02", "2023-01-03"}'
  1. Sintassi con il costruttore ARRAY[]

Un modo più esplicito e leggibile:

-- Array di stringhe
ARRAY['mela', 'banana', 'ciliegia']

-- Array di numeri
ARRAY[1, 2, 3, 4, 5]

-- Array di date
ARRAY['2023-01-01'::DATE, '2023-01-02'::DATE, '2023-01-03'::DATE]
Importante:

entrambi i modi funzionano allo stesso modo! La scelta dipende dalle tue preferenze e dal contesto. È un po' come scegliere tra i cicli for e while in altri linguaggi di programmazione — a livello funzionale sono equivalenti, ma uno può essere più comodo in una situazione specifica.

Quando usare gli array

Gli array sono una superpotenza di PostgreSQL che ti permette di risolvere problemi dove sarebbe scomodo creare tabelle o colonne aggiuntive. Sono perfetti per:

  1. Salvare liste, tag o categorie

Immagina di creare un database per un negozio online. Ogni prodotto può avere diversi tag, per esempio:

  • Per una t-shirt i tag potrebbero essere: ["abbigliamento", "uomo", "sport"].
  • Per delle cuffie i tag: ["elettronica", "wireless", "gadget"].

Con gli array puoi salvare questi tag in una sola colonna senza dover creare una tabella separata per i tag, risparmiando spazio e semplificando la struttura dei dati.

-- Tabella prodotti con array di tag
CREATE TABLE products (
    id SERIAL PRIMARY KEY,
    name TEXT NOT NULL,
    tags TEXT[]  -- Array di stringhe per i tag
);

-- Esempio di dati
INSERT INTO products (name, tags)
VALUES
    ('T-shirt', ARRAY['abbigliamento', 'uomo', 'sport']),
    ('Cuffie', ARRAY['elettronica', 'wireless', 'gadget']);
  1. Salvare la lista degli ordini

Se lavori con gli ordini, un array può aiutarti a salvare la lista dei prodotti in un singolo ordine:

-- Tabella ordini con array di ID dei prodotti
CREATE TABLE orders (
    id SERIAL PRIMARY KEY,
    customer_name TEXT,
    product_ids INTEGER[]  -- Array di identificatori dei prodotti
);

-- Esempio di dati
INSERT INTO orders (customer_name, product_ids)
VALUES
    ('Anna', ARRAY[1, 2, 3]),
    ('Otto', ARRAY[4, 5]);

Ora ogni ordine ha la lista dei prodotti che sono stati acquistati. Comodo, vero?

  1. Configurazioni e impostazioni semplici

    Quando devi salvare semplici liste di impostazioni o preferenze utente:

    CREATE TABLE user_preferences (
    user_id INTEGER PRIMARY KEY,
    notification_types TEXT[],
    allowed_days INTEGER[]  -- giorni della settimana: 1-7
    );
    

Confronto tra array e altri tipi di dati

Qui è importante capire che gli array sono semplicemente un altro strumento nell'arsenale di PostgreSQL, che non va bene per tutto. Per esempio, un'alternativa agli array può essere una tabella di relazioni (relazione "molti a molti") o l'uso del tipo di dato JSON/JSONB.

Array vs JSONB

Gli array sono comodi quando sai esattamente che salverai più valori dello stesso tipo. Sono più semplici, veloci e occupano meno spazio.

JSONB è adatto per strutture più complesse, ad esempio se devi salvare oggetti con una struttura flessibile. Però JSONB può essere più complicato da gestire.

Esempio di array e JSONB per lo stesso set di dati:

-- Array
ARRAY['abbigliamento', 'uomo', 'sport']

-- JSONB
'["abbigliamento", "uomo", "sport"]'::JSONB

Se ti serve spesso fare cose come ordinare, filtrare o indicizzare, gli array sono la scelta migliore.

Esempio di uso degli array in problemi reali

Facciamo un esempio: stai sviluppando un'app per la gestione delle presenze all'università. Ogni lezione ha una lista di studenti che l'hanno frequentata, ma non serve creare una tabella separata per collegare studenti e lezioni. Invece puoi usare gli array:

-- Tabella lezioni con array di studenti
CREATE TABLE lectures (
    id SERIAL PRIMARY KEY,
    topic TEXT NOT NULL,
    students INTEGER[]  -- Array di identificatori degli studenti
);

-- Esempio di dati
INSERT INTO lectures (topic, students)
VALUES
    ('Basi di dati', ARRAY[101, 102, 103]),
    ('Algoritmi', ARRAY[104, 105]);

Ora puoi facilmente chiedere la lista degli studenti per ogni lezione, e anche aggiungere o togliere uno studente dall'array.

Cose importanti da ricordare quando usi gli array in PostgreSQL

  1. Il tipo di dato dentro l'array deve essere omogeneo. PostgreSQL non ti permette di mischiare, per esempio, stringhe e numeri nello stesso array.
-- Funziona
ARRAY[1, 2, 3]  -- Array di numeri

-- Errore: mix di stringhe e numeri
ARRAY['mela', 42, 'ciliegia']
  1. L'indicizzazione degli elementi dell'array parte da 1, non da 0. Ricordalo se sei abituato a linguaggi dove l'indice parte da 0 (Python, JavaScript, C++ ecc.).
  2. Supporto per NULL: gli array possono contenere valori NULL
  3. Multidimensionalità: PostgreSQL supporta array multidimensionali
Commenti
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION