Come creare una tabella Sql
Un database relazionale è composto da una serie di tavole (table). Per creare una nuova tabella nel linguaggio SQL uso il comando CREATE TABLE
CREATE TABLE nome tabella
(
colonna1 dominio [vincoli] ,
colonna2 dominio [vincoli] ,
[ ... ]
colonna_n dominio [vincoli]
)
Dove nome tabella è il nome della nuova tabella.
Tra parentesi tonde sono elencati i nomi delle colonne con i relativi domini e vincoli.
Nota. Alcuni esempi di vincoli sono PRIMARY KEY, NOT NULL, UNIQUE, REFERENCES. I vincoli sono un'informazione facoltativa. Posso creare una tabella anche senza indicare alcun vincolo. In ogni caso, è sempre possibile modificare la struttura della tabella anche in un secondo momento con il comando ALTER TABLE.
Cosa sono le tabelle nel linguaggio SQL
Le tabelle (o relazione) sono un metodo di organizzazione logica dei dati.
Grazie alle tabelle le informazioni sono strutturate come un insieme di oggetti ( record o righe ) e di proprietà ( campi logici o colonne ).
Esempio
Ogni tavola è composta da un numero di colonne che identificano la qualità del dato (es. nome, cognome ecc.) e da un numero di righe che identificano i dati stessi.
Esempio. Una tavola contiene i nomi degli alunni di una classe. In questo caso, le colonne definiscono le qualità dei dati ( nome, cognome dell'alunno, età, ecc. ) mentre le righe raggruppano tutte le informazioni per ogni singolo alunno.
Ogni riga (tupla) è denominata "record".
Le colonne sono invece conosciute come "campi" o "attributi".
Ogni colonna ha un nome e un dominio ossia può ricevere soltanto un tipo di dato (caratteri, numeri, date, ecc. ).
Esempio. Nella tabella precedente la prima colonna si chiama CodiceCliente e ospita numeri interi. La seconda si chiama Cognome e ospita stringhe. E via dicendo. E' sempre meglio usare dei nomi mnemonici per le colonne della tabella. In questo modo è più facile capire l'informazione che contengono.
A cosa serve una tabella?
Grazie alle tabelle non ci si deve più preoccupare della struttura fisica dei dati all'interno di un file ma soltanto della struttura logica delle informazioni.
Un esempio pratico
Posso creare la tabella "Clienti" del precedente esempio con il comando CREATE TABLE
CREATE TABLE Clienti
(
CodiceCliente NUMBER(5),
Cognome VARCHAR(20),
Nome VARCHAR(20),
Città VARCHAR(20)
);
Le specifiche tra parentesi sono i nomi dei campi della tavola seguiti dalla specifica/dominio del tipo del dato.
Esempio. Il primo campo CodiceCliente è del tipo NUMBER(5), ossia numerico con massimo 5 cifre. Il secondo campo Cognome è invece del tipo VARCHAR(20) e identifica un campo di tipo alfanumerico lungo max. 20 caratteri.
Il risultato è una tabella come la seguente:
Una nuova tabella è sempre vuota. Non ha dati (istanze) al suo interno.
Per inserire i dati nella tabella si usa il comando INSERT INTO.
Nota. Inizialmente soltanto chi crea la tabella ha tutti i privilegi e le autorizzazioni.
Primary Key
Per velocizzare l'accesso ai dati posso anche aggiungere una chiave o un indice logico.
Al momento della creazione della tabella posso anche indicare un attributo chiave con il vincolo PRIMARY KEY.
Esempio
Associo al campo CodiceCliente il vincolo di chiave PRIMARY KEY.
CREATE TABLE Clienti
(
CodiceCliente NUMBER(5) PRIMARY KEY,
Cognome VARCHAR(20),
Nome VARCHAR(20),
Città VARCHAR(20)
);
Not Null
Il vincolo NOT NULL specifica che un attributo della tabella non può ospitare un valore nullo. Deve essere sempre documentato.
Esempio
Associo il vincolo agli attributi Cognome e Nome.
CREATE TABLE Clienti
(
CodiceCliente NUMBER(5) PRIMARY KEY,
Cognome VARCHAR(20) NOT NULL,
Nome VARCHAR(20) NOT NULL,
Città VARCHAR(20)
);
In questa tabella non è possibile aggiungere una riga alla tabella se non sono indicati i valori del Nome e del Cognome.
Il nome della Città può, invece, mancare ed essere sostituito con un vaore nullo (NULL).
Unique
Il vincolo UNIQUE impedisce la ripetizione di un valore in una colonna (attributo) fatta eccezione che per i valori nulli.
Esempio
In questa tabella non possono esserci persone con lo stesso cognome.
CREATE TABLE Clienti
(
CodiceCliente NUMBER(5) PRIMARY KEY,
Cognome VARCHAR(20) UNIQUE,
Nome VARCHAR(20),
Città VARCHAR(20)
);
E' invece possibile che ci siano persone con lo stesso nome o città.
Default
Il vincolo Default indica un valore di default da scrivere nell'attributo quando è vuoto.
Se non è indicato un valore di default, il linguaggio SQL utilizza il valore nullo (NULL).
Esempio
In questa tabella l'attributo figli ha un valore di default pari a zero.
CREATE TABLE persone (
nome varchar(20),
cognome varchar(20),
figli integer(2) DEFAULT 0
)
Quando inserisco nella tabella una nuova riga senza indicare nulla nell'attributo figli, il DBMS scrive automaticamente 0 nell'attributo figli.
I tipi di dati delle colonne
Il dominio di una colonna può ospitare diversi tipi di dati.
Ecco i principali tipi di domini.
- CHAR(n) / VARCHAR(n)
stringa alfanumerica lunga n. - SMALLINT
numero compreso tra -32.767 e +32.767 - INTEGER
numero compreso tra -2.147.483.647 e +2.147.483.647 - DECIMAL[(m[,n])]
numero in virgola mobile con m valori significativi e con n valori decimali - SMALLFLOAT
numero in virgola mobile - FLOAT
numero in virgola mobile corrispondente al tipo double - DATE
campo in formato data
E così via