Nella precedente lezione abbiamo spiegato cosโรจ un database e abbiamo detto che, per immagazzinare i dati, esso ricorre a tabelle a loro volta organizzate in colonne e righe. Allโinterno di ogni colonna i dati immagazzinati devono essere tra loro omogenei, cioรจ essere dello stesso tipo.
Dichiarare i tipi di dato
Quando si definisce la struttura di una tabella bisogna dichiarare, per ciascuna colonna, il tipo di dato che essa dovrร ospitare: testo, numeri, date, ecc.
La dichiarazione del tipo di dato deve essere fatta al momento della creazione della tabella ma puรฒ essere cambiata anche successivamente. La modifica del tipo di dato, tuttavia, รจ una operazione non sempre semplicissima quando la tabella ospita giร dei dati al suo interno: per cambiare il tipo di dato, infatti, รจ necessario che i dati giร presenti nella colonna siano compatibili con esso!
Eโ bene, quindi, prestare la massima attenzione in fase di creazione delle tabelle nella definizione dei giusti tipi di dato.
I tipi di dato di SQL
Ogni DBMS ha i "suoi" tipi di dato, di seguito elencheremo le tipologie piรน diffuse che risultano essere presenti in tutti i principali database in commercio tralasciando, invece, i tipi di dati peculiari di specifici DBMS per i quali si rimanda a documentazioni dedicate.
Tipi di dati numerici
- INT, BIGINT e SMALLINT: INT rappresenta i valori interi (senza cifre decimali), BIGINT e SMALLINT rappresentano, rispettivamente, numeri interi molto grandi o non troppo grandi (BIGINT e SMALLINT vengono usati in casi specifici)
- NUMERIC e DECIMAL: sono utilizzati per rappresentare i numeri decimali
- REAL, DOUBLE e FLOAT: sono utilizzati per i numeri approssimativi
Facciamo qualche esempio: se una colonna viene dichiarata come INT potrร ospitare al suo interno solo valori numerici interi. Se viene dichiarata NUMERIC (o DECIMAL) sarร possibile definirne precisione e scala:
NUMERIC(precisione, scala)
Queste rappresentano, rispettivamente, il numero di cifre totali che ospiterร il campo e il numero di cifre dopo la virgola, piรน precisamente:
- precisione รจ il numero totale di cifre (>= 0)
- scala (> 0 e < precisione)
Tipi di dati stringa (testo)
- CHAR: รจ utilizzato per ospitare stringhe di lunghezza fissa; il valore minimo รจ 1 il massimo cambia a seconda del DBMS utilizzato (in MySQL รจ 255)
- VARCHAR: รจ utilizzato per ospitare stringhe di lunghezza variabile (viene specificata la lunghezza massima)
Facciamo un esempio: se una colonna viene dichiarata CHAR(5) essa potrร ospitare stringhe di testo lunghe sempre 5 caratteri. Se viene inserito un valore testuale piรน corto il sistema aggiungerร automaticamente degli spazi per raggiungere la lunghezza definita. Se si prova ad archiviare una stringa piรน lunga di 5 caratteri, viceversa, si riceverร un errore.
Nel caso di VARCHAR, invece, lโunica discriminante รจ la lunghezza massima.
Tipi di dato temporali
SQL definisce dei tipi temporali per permettere la gestione di date e ore. Eโ importante precisare che il formato usato รจ quello anglosassone, cioรจ:
ANNO-MESE-GIORNO
e
ORA:MINUTI:SECONDI
- DATE: rappresenta le date espresse come anno (4 cifre), mese (2 cifre comprese tra 1 e 12), giorno (2 cifre comprese tra 1 e 31 con ulteriori restrizioni a seconda del mese, ad es. febbraio puรฒ essere massimo 28 o 29 a seconda che lโanno sia bisestile o meno); i valori sono separati dal trattino (-)
- TIME: rappresenta gli orari espressi nel formato ora (2 cifre), minuti (2 cifre) e secondi (2 cifre) separati dal simobolo dei due punti (:)
- DATETIME: rappresenta data e orario, questโultimo con la precisione al millisecondo.
Tipi boleani
SQL prevede un tipo BOOLEAN appositamente previsto per la gestione di valori booleani (VERO/FALSO). Accetta come valore: TRUE, FALSE, 0 e 1.
Non tutti i DBMS supportano campi di questo tipo. In MySQL, ad esempio, per i valori booleani si รจ soliti utilizzare un campo numerico โ TINYINT(1) โ che verrร valorizzato come 0 (falso) o 1 (vero).
Il valore NULL
Valore NULL รจ una speciale costante presente in tutti i DBMS: esso rappresenta lโassenza di informazione. Ogni campo non valorizzato, a prescindere dal tipo di dato, puรฒ essere NULL.