Mauricio Cabral
a- a+

Tipi di dati

Per un’efficace progettazione di un database, èessenziale considerare la scelta del tipo di“contenitore” dei propri dati. Con una correttadefinizione del tipo di colonna si può rendere undatabase veloce ed economico (in termini di byte). In questocapitolo approfondiremo questa tematica.

Voglio iniziare questo capitolo con un esempio.
Immaginate di essere il responsabile di un magazzino,facciamo di un Ferramenta. Voi dovete organizzare i prodottiin modo che occupino il minor spazio possibile, che sianoorganizzati per tipo e che sia il più facile possibiletrovarli.
Ora il vostrocapo vi ha incaricato di montare uno scaffale nel qualedovrete stoccare gli articoli (bulloni, vite, rondelle,chiavi e tutti gli altri oggetti del caso). Una volta montatolo scaffale, il “capo” vi indica i contenitoriche potrete utilizzare, da una rapida occhiata notate cheavete una vasta scelta.
Sarete d’accordo con me se dico che potete riempiretutto, con i contenitori più grandi che avete,sicuramente potrete stoccare qualsiasi materiale, dalsemplice bullone alla “motosega 3000 turbo”, lospazio disponibile sarà sempre sufficiente. Il fattoè che dovete ricordare della regola di prima!
Se volete un magazzino veramente efficiente dovete fareattenzione a queste regole; per oggetti piccoli - piccolicontenitori, per oggetti grandi – grandi contenitori,oggetti di forma particolare – contenitori adattiall’oggetto. Mi dirette “hai scopertol’acqua calda”, si, la cosa sembra ovvia, ma inun database (per di più MySQL che a volte ècostretto a lavorare su Hardware poco potenti), questasituazione può rendere una applicazione più omeno efficiente, e nei nostri “scaffali digitali”la scelta del tipo di contenitore di dati può esserefatta in modo ancora più preciso, non solo per le lorodimensioni ma anche per il loro utilizzo.

Per capire meglio tutto il discorso, andiamo a vedere qualistrumenti ci offre MySQL.
(alla fine troverete un riepilogo più veloce di tuttii tipi)

Tipo Numerico

I tipi numerici sono destinati a contenere numeri, quindi,come potete ben pensare, se si tenta di inserire una stringao comunque un carattere soltanto, si riceverà comerisposta un errore.
Si può scegliere il tipo di colonna secondo lagrandezza del dato e della memoria che questooccuperà. Le colonne di tipo numerico sono elaboratein maniera più rapida rispetto a quelle di tipostringa.

TINYINT
Può contenere da -128 A 127, se alla colonna vieneassegnata la proprietà UNSIGNED, questa potràmemorizzare soltanto numeri positivi da 0 a 255. La memoriaoccupata sarà di 1 byte.

SMALLINT
Può contenere da -32.768 A 32.767, se alla colonnaviene assegnata la proprietà UNSIGNED, questapotrà memorizzare soltanto numeri positivi da 0 a65.535. La memoria occupata sarà di 2 byte.

MEDIUMINT
Può contenere da -8.388.608 A 8.388.607, se allacolonna viene assegnata la proprietà UNSIGNED, questapotrà memorizzare soltanto numeri positivi da 0 a16.777.215. La memoria occupata sarà di 3 byte.

INT
Può contenere da -2.147.483.648 A 2.147.483.647, sealla colonna viene assegnata la proprietà UNSIGNED,questa potrà memorizzare soltanto numeri positivi da 0a 4.294.967.295. La memoria occupata sarà di 4 byte.

BIGINT
Può contenere da -9.223.372.036.854.775.808 A9.223.372.036.854.775.807, se alla colonna viene assegnata laproprietà UNSIGNED, questa potrà memorizzaresoltanto numeri positivi da 0 a 18.446.744.073.709.550.615.La memoria occupata sarà di 8 byte.


FLOAT(M, D)
Può contenere numeri con virgola mobile. Si possonodefinire certi parametri, come limitare il numero di cifre,prima e dopo la virgola: (M,) definisce il numero di cifreprima della virgola, (, D): definisce il numero di cifre dopola virgola. I decimali contenuti dopo la virgola sarannoarrotondati per difetto. La memoria occupata sarà di 4byte.

DOUBLE(M, D)
Può contenere numeri con virgola mobile. Si possonodefinire certi parametri, come limitare il numero di cifre,prima e dopo la virgola: (M,) definisce il numero di cifreprima della virgola, (, D): definisce il numero di cifre dopola virgola. I decimali contenuti dopo la virgola sarannoarrotondati per difetto. La memoria occupata sarà di 8byte.

DECIMAL(M, D)
Può contenere numeri con virgola mobile. Si possonodefinire certi parametri, come limitare il numero di cifre,prima e dopo la virgola: (M,) definisce il numero di cifreprima della virgola, (, D): definisce il numero di cifre dopola virgola. I decimali contenuti dopo la virgola sarannoarrotondati per difetto. La memoria occupata sarà di M+ 2 byte.

 

Altre caratteristiche

Ci sono altre opzioni che si possono assegnare alle colonnedi tipo numerico:


AUTO_INCREMENT

Definisce una colonna che aumenterà automaticamenteaggiungendo 1 al valore più alto presente, piùconosciuto come “contatore”.

NOT NULL
Indica che la colonna non può contenere un valorenullo.

NULL
Indica che la colonna può contenere un valore nullo.

DEFAULT (V)
Definisce il valore che verrà automaticamenteinserito nel record.

ZEROFILL
Riempie il record di zeri fino all’esaurimento dellamemoria assegnata per la colonna.
Esempio: si inserisce in una colonna INT(10) ZEROFILL ilvalore 755, il database memorizzerà 0000000755.

PRIMARY KEY
Definisce una chiave primaria.

 


Tipi Stringa

Vediamo tutti i tipi di colonne che sono destinate acontenere stringhe alfanumeriche. Si possono definire lecolonne in modo che siano il più veloce possibileelaborarle, scegliendo il tipo più adatto al tipo didati che dovrà memorizzare.
Per i tipi stringa ci sono caratteristiche piùmarcanti.

CHAR
Può contenere caratteri alfanumerici, fino a 255caratteri.
Si può definire il la lunghezza massima dellacolonna, “CHAR (40)”, in questo esempio lacolonna potrà contenere al massimo 40 caratteri. Nelcaso in cui venga inserito nella colonna, una stringa dilunghezza inferiore a quella impostata, il databaseprovvederà a riempire con caratteri il resto delcampo, quindi la colonna occuperà sempre la stessaquantità di memoria che avete definito al momentodella creazione, in questo caso 40 byte.

VARCHAR
Può contenere caratteri alfanumerici, fino a 255caratteri.
Si può definire il la lunghezza massima dellacolonna, “VARCHAR (40)”, come in precedenzaquesta colonna potrà contenere al massimo 40 caratteri(come indicato nella creazione). Ma c’è unadifferenza, se viene inserita una stringa con lunghezzainferiore a quella massima indicata, questa occuperàsolo la sua lunghezza. Se inserisco “Ciaoragazzi”, la colonna verrà occupata solo da 12byte + 1. Lunghezza + 1.

Allora CHAR o VARCHAR?

Si può pensare di usare solo il tipo VARCHAR,poiché occupa solo la lunghezza che viene inserita,non è un ragionamento sbagliato (per un senso), ma siera parlato di rendere una applicazione non solo“leggera” ma anche veloce. E qui c’èil trucco, il tipo VARCHAR occupa meno spazio, ma èelaborato più lentamente rispetto a CHAR (cheoccuperà sempre lo stesso spazio). Potete usare iltipo che più si adatta ai dati che dovete memorizzare,se i dati saranno sempre di lunghezza fissa e conosciuta,usate CHAR(numero_conosciuto), avrete un rendimento miglioredel vostro database. Mentre se avete dei dati che possonovariare di lunghezza e lo spazio a disposizione non èmolto, VARCHAR fa al caso vostro.

TINYTEXT
Può contenere caratteri alfanumerici, fino a 255caratteri.
La memoria occupata è di (lunghezza) + 1

TINYBLOB
Può contenere caratteri alfanumerici, fino a 255caratteri.
La memoria occupata è di (lunghezza) + 1

TEXT
Può contenere caratteri alfanumerici, fino a 65.535caratteri.
La memoria occupata è di (lunghezza) + 2

BLOB
Può contenere caratteri alfanumerici, fino a 65.535caratteri.
La memoria occupata è di (lunghezza) + 2

MEDIUMTEXT
Può contenere caratteri alfanumerici, fino a16.777.215 caratteri.
La memoria occupata è di (lunghezza) + 3

MEDIUMBLOB
Può contenere caratteri alfanumerici, fino a16.777.215 caratteri.
La memoria occupata è di (lunghezza) + 3

LONGTEXT
Può contenere caratteri alfanumerici, fino a4.294.967.295 caratteri.
La memoria occupata è di (lunghezza) + 4

LONGBLOB
Può contenere caratteri alfanumerici, fino a4.294.967.295 caratteri.
La memoria occupata è di (lunghezza) + 4

Da notare che i tipi BLOB sono sensibili alle letteremaiuscole e alle minuscole, quindi, fate attenzione quandousate questi tipi, un dato inserito come “mysql”sarà diverso da “MySQL”.

 

Altre caratteristiche

Ci sono altre opzioni che si possono assegnare alle colonnedi tipo stringa:


NOT NULL
Indica che la colonna non può contenere un valorenullo.

NULL
Indica che la colonna può contenere un valore nullo.

DEFAULT (V)
Definisce il valore che verrà automaticamenteinserito nel record.

 


Tipi “data” e vari

Data

DATETIME
Memorizza la data e ora, compresi minuti e secondi. Utilizzail formatto YYYY-MM-DD HH:MM:SS, può varia da1000-01-01 00:00:00 a 9999-12-31 23:59:59

DATE
Memorizza l’ora nel formatto YYYY-MM-DD, puòvariare da 1000-01-01 a 9999-12-31

TIME
Memorizza l’ora, può variare da -838:59:59 a838:59:59

YEAR
Memorizza l’anno, può variare da 1901 a 2155

TIMESTAMP
Memorizza in modo automatico ad ogni record inserito, ladata e ora correnti, si può impostare in diversi modi:

TIMESTAMP(14) YYYY-MM-DD HH:MM:SS
TIMESTAMP(12) YY-MM-DD HH:MM:SS
TIMESTAMP(10) YY-MM-DD HH:MM
TIMESTAMP(8) YYYY-MM-DD
TIMESTAMP(6) YY-MM-DD
TIMESTAMP(4) YY-MM
TIMESTAMP(2) YY


Vari


ENUM
Memorizza un elemento di un elenco, un esempio praticoè la creazione di un campo che simuli il True e False,si crea una colonna ENUM (‘Y’, ‘N’),può contenere anche un valore NULL. Il numero dielementi dell’elenco può arrivare fina a 65.535voci, ENUM (‘qwert’, ‘zxz’,‘khk’, ‘ssl’, ....), i valori sempretra apici e separati da virgola
(‘’, ‘’, ‘’).L’elaborazione di queste colonne sono più rapiderispetto a quelle del tipo stringa.

SET
Molto simile a ENUM con la differenza che puòpiù valori dell’elenco, può invececontenere solo 64 voci. SET (‘www’,‘http’, ‘url’), la regola èsempre la stessa, i valori sempre tra apici e separati davirgola (‘’, ‘’, ‘’).


Altre caratteristiche

Ci sono altre opzioni che si possono assegnare alle colonnedi tipo vario:


NOT NULL
Indica che la colonna non può contenere un valorenullo.

NULL
Indica che la colonna può contenere un valore nullo.

DEFAULT (V)
Definisce il valore che verrà automaticamenteinserito nel record.

 

Tipo

Intervalo/Dimensioni

Memoria
TINYINT

-128 a 127 / 0 a 255

1 byte
SMALLINT

-32.768 A 32.767 / 0 a 65.535

2 byte
MEDIUMINT

-8.388.608 A 8.388.607 / 0 a 16.777.215

3 byte
INT

-2.147.483.648 A 2.147.483.647 / 0 a 4.294.967.295

4 byte
BIGINT

-9.223.372.036.854.775.808 A 9.223.372.036.854.775.807 / 0 a 18.446.744.073.709.550.615

8 byte
FLOAT(M, D)

Variabile

4 byte
DOUBLE(M, D)

Variabile

8 byte
DECIMAL(M, D)

Vaviabile

M + 2 byte
Tipo stringa
 
 
 
CHAR

255

M byte
VARCHAR

255

L + 1 byte
TINYTEXT

255

L + 1 byte
TINYBLOB

255

L + 1 byte
TEXT

65.535

L + 2 byte
BLOB

65.535

L + 2 byte
MEDIUMTEXT

16.777.215

L + 3 byte
MEDIUMBLOB

16.777.215

L + 3 byte
LONGTEXT

4.294.967.295

L + 4 byte
LONGBLOB

4.294.967.295

L + 4 byte
Tipo vario
 
 
 
DATETIME

1000-01-01 00:00:00 a 9999-12-31 23:59:59

 
DATE

1000-01-01 a 9999-12-31

 
TIME

-838:59:59 a 838:59:59

 
YEAR

1901 a 2155

 
TIMESTAMP

Variabile

 

 

 



Ti potrebbe interessare anche

commenta la notizia

Ci sono 1 commenti