Torna all'elenco degli articoli Articoli
Tempo di lettura: 9 minuti

Quale tipo di dati scegliere per una colonna quando si crea una tabella in SQL

I database memorizzano valori di dati di vario tipo. Ad esempio, è possibile memorizzare il nome di un prodotto come stringa di testo, il prezzo di un prodotto come numero o la data di vendita di un prodotto come valore di data. Questi valori - il nome del prodotto, il prezzo e la data di vendita - sono memorizzati come tipi di dati diversi. In questo articolo spieghiamo diversi tipi di dati SQL con esempi reali.

Creare una tabella in SQL

SQL è un linguaggio per la manipolazione dei dati nei database. Creato all'inizio degli anni '70, dopo 50 anni è ancora in uso in quasi tutti i database relazionali. L'apprendimento dell'SQL rimane molto popolare.

L'SQL è utilizzato come linguaggio standard per la manipolazione e l'interrogazione dei dati nei database più diffusi. Non credo di sbagliare se dico che tutti noi usiamo applicazioni che utilizzano query SQL più volte al giorno sui nostri cellulari o computer senza nemmeno rendercene conto.

L'SQL è anche un linguaggio facile da apprendere, molto simile all'inglese, con una curva di apprendimento ridotta. Prendiamo ad esempio la seguente query SQL:

SELECT employee_id, employee_name FROM employees WHERE salary > 75000

Probabilmente potete indovinare quali dati restituisce: l'ID e il nome dei dipendenti che guadagnano più di 75.000 dollari. Facile, vero?

Tuttavia, prima di poter interrogare i dati di un database, è necessario memorizzare i dati nel database. I database utilizzano le tabelle per memorizzare i record di dati. Una tabella ha un insieme di campi (detti anche colonne).

Per saperne di più sulle tabelle, suggerisco il corso Creare tabelle in SQL. Si tratta di un corso pratico con circa 80 esercizi che vi forniranno tutto il necessario per iniziare a creare tabelle nei database SQL.

Una tipica tabella per memorizzare i dati dei dipendenti può avere campi come employee_id, employee_name e salary. È possibile includere qualsiasi campo nella tabella; si possono includere altri campi in base alle proprie esigenze, come il reparto a cui appartiene il dipendente e la data di nascita del dipendente.

Tuttavia, quando si definisce un nuovo campo in una tabella, è obbligatorio specificarne il tipo di dati. Lo scopo principale di questo articolo è quello di esplorare quale tipo di dati scegliere per un campo quando si crea una tabella in SQL.

Iniziamo creando una semplice tabella chiamata foods per un'azienda di cibo da asporto. Ha solo due colonne o campi: food_name e food_category. Poiché queste due colonne memorizzeranno valori di testo, utilizzeremo il tipo di dati VARCHAR, che serve a memorizzare stringhe di testo di qualsiasi lunghezza. Vediamo la dichiarazione CREATE TABLE:

CREATE TABLE foods (
	food_name 		VARCHAR(50),
	food_category	VARCHAR(20)
);

Entrambe le colonne (food_name e food_category) accettano valori di stringhe di testo. Tuttavia, food_name accetta valori non più lunghi di 50 caratteri. Questa limitazione è specificata in VARCHAR(50); analogamente, food_category non accetta più di 20 caratteri.

Supponiamo di voler creare una nuova versione della tabella con una colonna aggiuntiva. Vogliamo memorizzare la data in cui l'alimento è stato cucinato o preparato. Chiamiamo questa colonna aggiuntiva prepared_on e usiamo il tipo di dati DATE per essa. L'istruzione CREATE TABLE per la nuova versione della tabella è:

CREATE TABLE foods (
	food_name 		VARCHAR(50),
	food_category	VARCHAR(20),
	prepared_on		DATE
);

I valori validi per la colonna prepared_on includono '2022-11-03' e '2022-11-02'. Il formato esatto delle date può variare; altri formati comuni validi sono 'mm/dd/yyyy' e 'yyyymmdd'. La seguente INSERT mostra come creare un record nella tabella foods:

INSERT INTO foods
VALUES ('Chicken with mashed potatoes','Main Dish','11/08/2022');

Per saperne di più su INSERT, consultare questo articolo.

L'istruzione SQL SELECT qui sotto mostra come leggere i record della tabella e come vedere l'aspetto dei record:

SELECT food_name, food_category, prepared_on FROM foods;

Nell'immagine seguente si vede come il client SQL mostri i nomi delle colonne e i tipi di dati per ogni colonna restituita dall'istruzione SELECT:

Quale tipo di dati scegliere per una colonna quando si crea una tabella in SQL?

Ulteriori informazioni sull'istruzione SELECT sono disponibili qui.

Se non avete mai avuto a che fare con i database, vi consiglio di seguire il corso Tipi di dati in SQL. In questo corso si apprendono i tipi di dati più comuni in SQL Server, MySQL, Oracle e PostgreSQL. Se siete venuti qui in cerca di informazioni sulla creazione di tabelle, il corso molto completo Le basi della creazione di tabelle in SQL vi insegna gli elementi fondamentali della creazione di tabelle in MySQL, SQL Server, Oracle e PostgreSQL. Infine, si consiglia di leggere il corso SQL per principianti nell'articolo Perché seguire il corso "SQL per principianti": il motivo per cui è stato creato questo corso online, la filosofia alla base e i contenuti.

Tipi di dati numerici

Ora che la data di preparazione di ogni alimento è presente nella tabella, supponiamo di voler includere una colonna per memorizzare quanti giorni un alimento può essere venduto prima della sua scadenza. Si tratta di un numero; finora non abbiamo incluso alcuna colonna numerica nella tabella. foods.

Nei database SQL esistono diversi tipi di dati numerici. È necessario analizzare il tipo di numero che abbiamo per sapere come procedere.

Se i valori che si vogliono memorizzare nella colonna sono numeri senza decimali, il tipo di dati da utilizzare è INTEGER. Esempi di valori interi sono 10, 1, 1234, 302123, 0, e anche numeri negativi come -10 e -90. La regola è semplice: qualsiasi numero senza decimali è un valore valido da memorizzare come tipo di dati INTEGER. Includiamo la colonna valid_days come tipo di dati INTEGER:

CREATE TABLE foods (
	food_name 		VARCHAR(50),
	food_category	VARCHAR(20),
	prepared_on		DATE,
	valid_days		INTEGER
);

Supponiamo ora di voler includere nella tabella una colonna per memorizzare il prezzo di ciascun prodotto alimentare. Creiamo una colonna chiamata price. Questa colonna avrà valori numerici con decimali, quindi utilizzeremo il tipo di dati NUMERIC. Questo tipo di dati accetta numeri decimali con qualsiasi numero di cifre dopo la virgola. Quindi, la creazione della tabella foods si presenta come segue:

CREATE TABLE foods (
	food_name 		VARCHAR(50),
	food_category	VARCHAR(20),
	prepared_on		DATE,
	valid_days		INTEGER,
	price			NUMERIC(6,2)
);

Nell'istruzione CREATE TABLE di cui sopra, utilizziamo il tipo di dati NUMERIC(6,2) per memorizzare prezzi con una lunghezza massima di 6 cifre, di cui 2 dopo la virgola. Ad esempio, 10.25, 1.3 e 1234.56 sono valori validi per NUMERIC(6,2).

Il tipo di dati booleano

Un altro importante tipo di dati è BOOLEAN. Questo tipo di dati viene utilizzato per rappresentare o memorizzare in una tabella uno dei due soli valori possibili: TRUE o FALSE.

Supponiamo di voler identificare quali prodotti alimentari sono certificati biologici. Possiamo includere una colonna denominata is_organic_certified del tipo di dati BOOLEAN. Come si può immaginare, il valore TRUE nella colonna is_organic_certified indica che l'alimento è certificato biologico. La nuova versione dell'istruzione CREATE TABLE è:

CREATE TABLE foods (
	food_name 			VARCHAR(50),
	food_category		VARCHAR(20),
	prepared_on			DATE,
	valid_days			INTEGER,
	price				NUMERIC(6,2),
	is_organic_certified	BOOLEAN
);

A questo punto, abbiamo una tabella con varie colonne. Creiamo un nuovo record utilizzando INSERT come abbiamo fatto in precedenza:

INSERT INTO foods VALUES ('Apple Pie','Dessert','11/07/2022',3,3.78, True);

E ancora, facciamo un SELECT per vedere i dati nella tabella.

SELECT food_name, food_category, prepared_on,
       valid_days, price, is_organic_certified
FROM foods;
Quale tipo di dati scegliere per una colonna quando si crea una tabella in SQL?

Prima di concludere questa sezione, vorrei raccomandare due articoli sui tipi di dati numerici. Il primo è Capire i tipi di dati numerici in SQL e tratta dei diversi tipi di dati numerici disponibili nei database SQL. Il secondo è "Numeric vs. Decimal Data Types in SQL" con un'interessante spiegazione delle differenze tra i tipi di dati NUMERIC e DECIMAL in SQL.

Tipi di dati relativi a data e ora

Abbiamo già introdotto il tipo di dati DATE per memorizzare un singolo valore di data in una tabella SQL. In questa sezione presentiamo altri due tipi di dati relativi ai valori di data e ora.

Il primo è TIMESTAMP per memorizzare un punto nel tempo con la data e l'ora. Ad esempio, possiamo memorizzare la data e l'ora di nascita di una persona come '1998-03-03 11:23:15' in una colonna del tipo di dati TIMESTAMP.

Proviamo con la nostra tabella foods. Supponiamo di voler memorizzare non solo la data di preparazione dell'alimento, ma anche l'ora, perché in alcuni casi l'ora specifica può essere importante per la scadenza degli alimenti. Quindi, l'istruzione CREATE TABLE diventa:

CREATE TABLE foods (
	food_name 			VARCHAR(50),
	food_category		VARCHAR(20),
	prepared_at			TIMESTAMP,
	valid_days			INTEGER,
	price				NUMERIC(6,2),
	is_organic_certified	BOOLEAN
);

Quando si memorizza un nuovo record nella tabella foods, il valore di prepared_at deve seguire un formato come '2022-11-03 11:30:45'. Detto questo, non abbiamo bisogno di memorizzare i secondi perché questo livello di dettaglio non è necessario per la scadenza degli alimenti. Pertanto, possiamo omettere i secondi e utilizzare valori simili a '2022-11-03 11:30'. La colonna TIMESTAMP accetterà questo valore e memorizzerà '2022-11-03 11:30:00' nel database.

Un altro tipo di dati correlato alla data e all'ora è INTERVAL, utilizzato per rappresentare un periodo di tempo. Ad esempio, il valore '11:30' del tipo INTERVAL rappresenta un periodo di 11 ore e 30 minuti, mentre il valore '1:20:35.145' rappresenta 1 ora, 20 minuti, 35 secondi e 145 millisecondi.

Questi non sono gli unici formati validi per i valori di INTERVAL. Esistono molti formati diversi per specificare un valore del tipo INTERVAL, a seconda delle unità di tempo (giorni, ore, minuti o secondi) che si vogliono includere.

Applichiamo questo tipo di dati alla nostra tabella foods. Supponiamo di avere un periodo di scadenza per ogni alimento: 8 ore per un'insalata, 24 ore per il purè di patate, ecc. Per memorizzare queste informazioni, includiamo la colonna expiration_period del tipo di dati INTERVAL. L'istruzione CREATE TABLE modificata si presenta come segue:

CREATE TABLE foods (
	food_name 			VARCHAR(50),
	food_category		VARCHAR(20),
	prepared_at			TIMESTAMP,
	valid_days			INTEGER,
	price				NUMERIC(6,2),
	is_organic_certified	BOOLEAN,
	expiration_period		INTERVAL
);

Raccomando l'articolo "A cosa serve l'SQL?", che spiega perché le competenze sui dati come l'SQL sono così importanti. C'è anche un interessante articolo intitolato "An Overview of MySQL Data Types" che spiega i tipi di dati più importanti disponibili in MySQL.

Imparare i tipi di dati SQL e creare le proprie tabelle

In questo articolo abbiamo trattato i principali tipi di dati SQL. Abbiamo iniziato con i tipi di dati testuali, poi abbiamo discusso i tipi di dati numerici e abbiamo concluso con i tipi di dati più specifici come BOOLEAN, INTERVAL e TIMESTAMP.

Vorrei inoltre suggerire alcuni altri articoli. Il primo è "Che cos'è SQL?", dove si trovano le risposte a domande di alto livello come "Che cos'è SQL?" o "Perché dovrei impararlo?". Il secondo è "Sintassi di SQL", per coloro che stanno iniziando il processo di apprendimento di SQL. Nelle scienze informatiche, la sintassi del linguaggio è una delle ragioni principali di un apprendimento frustrante, quindi è importante iniziare bene con la sintassi SQL.

Ci sono altri argomenti importanti legati ai tipi di dati che non abbiamo trattato in questo articolo. Per esempio, esiste una tecnica chiamata casting che ha a che fare con il cambiamento del tipo di dati di un dato in un altro tipo di dati valido.

SQL è un linguaggio facile da imparare. Tuttavia, ci sono molti concetti o tecniche, come il casting, da padroneggiare per sfruttare tutta la potenza del linguaggio. Continuate a imparare l'SQL, fate pratica con l'SQL, investite nelle vostre capacità e investite in voi stessi!