2. Tabelle e record
Un database è formato da zero o più tabelle ed una tabella è formata da zero o più record.
La tabella viene descritta da uno o più campi ripetuti per tutti i record come in tutte
le tradizionali tabelle.
Per rendere il concetto più chiaro, torniamo a phpMyAdmin e creiamo la tabella "utenti", come mostrato nella schermata seguente.
I campi scelti per la tabella "utenti" saranno 4:
Il campo id_utente sarà un numero intero che utilizzeremo
per identificare in modo univoco gli utenti.
Questo perchè due utenti potrebbero avere lo stesso nome e lo stesso cognome e non potremo
quindi riconoscerli in modo efficace.
|
Come identificativo univoco si potrebbe usare anche l'email dal momento che ad una email
può corrispondere uno ed un solo utente. Questo per il semplice fatto che per un computer è molto più semplice comparare un intero piuttosto di una stringa di caratteri, e per altri motivi che affronteremo in fase di progettazione di un database. |
Ma torniamo alla crezione della nostra tabella.
Una volta specificato il nome della tabella e il numero dei campi, cliccando sul
tasto "Esegui", phpMyAdmin rimarrà in attesa di input creando
una tabella apposita che ci consentirà di impostare la struttura vera e propria
della tabella.
Riempitela come segue saltando i campi non specificati, dopodichè analizzeremo assieme le varie impostazioni:
| Campo | Tipo | Lunghezza/Set | Collation | Attributi | Indice | A_I |
| id_utente | INT | 10 | UNSIGNED | PRIMARY | Selezionato | |
| nome | VARCHAR | 150 | utf8_unicode_ci | |||
| cognome | VARCHAR | 150 | utf8_unicode_ci | |||
| VARCHAR | 150 | utf8_unicode_ci | UNIQUE |
Analizziamo velocemente i settaggi che abbiamo scelto per la tabella appena creata:
- Campo - Rappresenta il nome del campo. Lo utilizzeremo ogni volta che dovremo riferirci ad esso per scrivere o leggere il valore contenuto in quel campo, che sia un intero o una stringa, di un determinato record.
- Tipo - Indica a MySQL il tipo di dato che il campo dovrà ospitare. Nella tabella "utenti" appena creata abbiamo visto solo i tipi INT e VARCHAR che rappresentano rispettivamente un numero intero ed una stringa di lunghezza variabile. Vedremo in dettaglio i tipi di dato nel capitolo seguente.
- Lunghezza/Set - Indica lo spazio in byte riservato alla memorizzazione del dato. Per fare un semplice esempio, creando un VARCHAR(5), MySQL ci consentirà di memorizzare in quel campo solo una stringa di lunghezza minore o uguale a cinque.
- Collation - Collation e Character Set li abbiamo già affrontati nel capitolo "Database e siti web".
- Attributi - Gli attributi ci consentono
di specificare dei comportamenti aggiuntivi per un campo. Vediamo i principali:
UNSIGNED indica che il campo non ammette numeri negativi. Di default i campi numerici sono SIGNED quindi un INT(1) accetta valori da -128 a 127 mentre un UNSIGNED INT(1) accetta valori da 0 a 255.
Un altro attributo comune è ZEROFILL applicabile solo agli UNSIGNED (se specificate solo ZEROFILL MySQL considererà comunque il campo anche UNSIGNED).
ZEROFILL indica che il valore del campo deve essere riempito di zeri per i byte mancanti. Esempio: se in un INT(2) ZEROFILL inseriamo il valore 1 esso verrà visualizzato come 01.
Utile per memorizzare giorni e mesi o ancora codici di avviamento postale o ABI e CAB bancari. - Indice - Esistono vari tipi di indici
e modi in cui MySQL li gestisce. Prima di arrivare al capitolo apposito
in cui approfondiremo meglio l'argomento,
diamo un'occhiata veloce agli indici PRIMARY e
UNIQUE.
PRIMARY serve a definire la chiave primaria della tabella, ossia dichiariamo esplicitamente a MySQL che quel campo rappresenta la chiave univoca per identificare tutti i record di quella tabella e che non sono quindi ammessi record con lo stesso valore per quel campo.
Come vedremo più avanti, gli indici possono essere definiti su uno o più campi, ma non è questo il nostro caso.
Anche UNIQUE definisce che non sono ammessi record con lo stesso valore per quel campo.
Vedremo meglio la differenza fra i due tipi di indice quando andremo a vedere come lavorano i motori di memorizzazione e il modo con cui MySQL consente loro di gestire la memoria. - A_I - A_I sta per
Auto Increment. Questa opzione ci consente di dire a MySQL
che deve assegnare automaticamente un valore al campo qualora non venisse
esplicitamente specificato, fornendo come valore un numero intero progressivo.
Man mano che inseriremo record nella tabella quindi, essi avranno il valore del record precedente + 1.
|
La tabella appena proposta è senza dubbio incompleta e discutibile, ma ottima per iniziare a capire come può essere semplice e alla portata organizzare una tabella per memorizzare i nostri utenti o qualunque altro dato. Ma andiamo avanti per vedere i tipi di dato che MySQL ci offre per gestire dati più complessi in modo da poter scrivere poi le nostre prime query MySQL. |
Per chi volesse iniziare a vedere la query MySQL per la creazione della tabella "utenti", ne riporto di seguito il codice:
CREATE TABLE `utenti` ( `id_utente` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY , `nome` VARCHAR(150) CHARACTER SET utf8 COLLATE utf8_unicode_ci NOT NULL , `cognome` VARCHAR(150) CHARACTER SET utf8 COLLATE utf8_unicode_ci NOT NULL , `email` VARCHAR(150) CHARACTER SET utf8 COLLATE utf8_unicode_ci NOT NULL , UNIQUE (`email`) ) ENGINE = MYISAM CHARACTER SET utf8 COLLATE utf8_unicode_ci;
