Sei sulla pagina 1di 4

Creazione di tabelle in SQL

Il comando CREATE TABLE

La creazione di tabelle SQL avviene mediante il comando CREATE TABLE. Esso consente di definire le componenti strutturali e i vincoli di integrit del modello relazionale. La sintassi pi semplice di questo comando prevede la sola definizione delle colonne della tabella, senza individuazione della chiave primaria e senza vincoli di integrit: CREATE TABLE nome_tabella ( nome_colonna1 tipo_colonna1, nome_colonna2 tipo_colonna2, ...................................................... nome_colonnaN tipo_colonnaN ) Esempio studente nome cognome
Aldo Maria Claudio Neri Rosi Verdi

classe
3A 2B 1A

CREATE TABLE studente ( nome varchar(20), cognome varchar(20), classe char(2) )

Vincoli di integrit

Lintegrit dei dati riferita ai seguenti ambiti: integrit del dominio, integrit dellentit, integrit referenziale. Integrit di dominio Lintegrit di dominio garantita dal fatto che, in ogni istante, i valori assunti da ciascun attributo devono appartenere al dominio o essere il valore NULL. Nellesempio precedente, tutti gli attributi sono stringhe o hanno valore NULL e non possono assumere valori di altro tipo. In caso contrario, il sistema segnala un errore. In alcuni casi, per, pu essere necessario impedire che ad un attributo venga assegnato NULL. Nellesempio mostrato ragionevole pensare che uno studente debba avere sempre un nome e cognome, mentre la classe potrebbe essere specificata in tempi successivi, rispetto allinserimento del nominativo. In tal caso necessario imporre il vincolo che gli attributi nome e cognome non assumano il valore NULL, indicando sulla riga dellattributo il vincolo NOT NULL. Esempio studente nome cognome
Aldo Maria Claudio Neri Rosi Verdi

classe
3A 2B 1A

CREATE TABLE studente ( nome varchar(20) NOT NULL, cognome varchar(20) NOT NULL, classe char(2) )
1

Bocchi Cinzia Ultimo aggiornamento: 15/09/2012

Un ulteriore vincolo determinato dalla necessit di restringere il dominio del tipo di dato ad un sottodominio. Esempio Aggiungiamo la colonna sesso alla tabella studente. studente nome cognome
Aldo Maria Claudio Neri Rosi Verdi

classe sesso
3A 2B 1A M F M

CREATE TABLE studente ( nome varchar(20) NOT NULL, cognome varchar(20) NOT NULL, classe char(2), sesso char(1) )

Lattributo sesso pu assumere solo i valori M ed F 1 e, come si pu notare, il vincolo del tipo di dato non sufficiente a garantire che allattributo non vengano assegnati altri valori di tipo stringa. In altri termini, il dominio dellattributo sesso, che coincide con linsieme formato da tutte le stringhe di lunghezza 1, deve essere ristretto allinsieme {M, F}. La clausola da utilizzare per operare tale restrizione CHECK, la cui sintassi CHECK (espressione) dove espressione una condizione che pu contenere nomi degli attributi, valori costanti, operatori matematici, logici e di confronto. Esempio Vediamo come si trasforma il comando CREATE TABLE se si introduce il vincolo di CHECK su sesso. CREATE TABLE studente ( nome varchar(20) NOT NULL, cognome varchar(20) NOT NULL, classe char(2), sesso char(1) CHECK (sesso = M OR sesso = F) ) Per concludere, possibile specificare il valore di default che deve assumere un attributo, cio il valore da assegnargli se non ne viene fornito uno, mediante la clausola DEFAULT. Esempio Supponiamo che, nel contesto considerato, gli studenti siano prevalentemente maschi. Allora possibile proporre come valore di default di sesso M. CREATE TABLE studente ( nome varchar(20) NOT NULL, cognome varchar(20) NOT NULL, classe char(2), sesso char(1) CHECK (sesso = M OR sesso = F) DEFAULT M )

Le costanti esplicite di tipo stringa devono essere racchiuse tra apici o virgolette.

Bocchi Cinzia Ultimo aggiornamento: 15/09/2012

Integrit dellentit La regola di integrit dellentit stabilisce che tutti gli attributi che costituiscono la chiave primaria non possono assumere valore NULL. La clausola che consente di indicare quali attributi costituiscono la chiave primaria e, nello stesso tempo, di imporre la condizione NOT NULL PRIMARY KEY. Esempio Supponiamo che ogni studente sia dotato di matricola univoca e che questa corrisponda a un intero. studente matricola nome
1 2 3 Aldo Maria Claudio

cognome
Neri Rosi Verdi

classe sesso
3A 2B 1A M F M

Essendo la matricola chiave primaria, il comando SQL diventa: CREATE TABLE studente ( matricola smallint PRIMARY KEY, nome varchar(20) NOT NULL, cognome varchar(20) NOT NULL, classe char(2), sesso char(1) CHECK (sesso = M OR sesso = F) DEFAULT M ) Osserviamo che la chiave primaria un numero intero progressivo. Possiamo far s che il numero si incrementi automaticamente ad ogni nuovo inserimento utilizzando la clausola AUTO_INCREMENT2. CREATE TABLE studente ( matricola smallint PRIMARY KEY AUTO_INCREMENT, nome varchar(20) NOT NULL, cognome varchar(20) NOT NULL, classe char(2), sesso char(1) CHECK (sesso = M OR sesso = F) DEFAULT M ) La chiave primaria pu essere formata da pi attributi. In tal caso la dichiarazione deve essere inserita a livello di tabella e non di colonna. Esempio Supponiamo che ogni studente sia identificato mediante nome e cognome, scelta decisamente sconsigliata per eventuali ononimie, ma adatta per lesemplificazione.

AUTO_INCREMENT si usa in MySQL. In SQL Server si usa IDENTITY, in Access AUTOINCREMENT, in Oracle CREATE SEQUENCE.
Bocchi Cinzia Ultimo aggiornamento: 15/09/2012

studente nome cognome


Aldo Maria Claudio Neri Rosi Verdi

classe sesso
3A 2B 1A M F M

In tal caso il comando SQL diventa: CREATE TABLE studente ( nome varchar(20) NOT NULL, cognome varchar(20) NOT NULL, classe char(2), sesso char(1) CHECK (sesso = M OR sesso = F) DEFAULT M, PRIMARY KEY (nome, cognome) ) In alcune situazioni si pu desiderare che un attributo o combinazione di attributi, non chiave primaria, contenga comunque valori unici. Per esempio, lindirizzo di posta elettronica degli utenti registrati a un sito normalmente unico, anche se lidentificazione avviene mediante username e password. A tale scopo si usa la clausola UNIQUE. Esempio utente username password
user1 user2 user3 pwd1 pwd2 pwd3

email
user1@..... user2@..... user3@.....

CREATE TABLE utente ( username varchar(20), password varchar(20), email varchar(50) NOT NULL UNIQUE, PRIMARY KEY (username, password) ) Gli attributi della chiave primaria non devono essere dichiarati come UNIQUE poich questo sottointeso nella clausola PRIMARY KEY. Se esiste pi di un attributo unique in una tabella occorre dichiarare un vincolo di tabella. Affronteremo lintegrit referenziale in seguito, quando parleremo di giunzione tra tabelle.

Quest'opera stata rilasciata con licenza Creative Commons Attribution-ShareAlike 3.0 Unported. Per leggere una copia della licenza visita il sito web http://creativecommons.org/licenses/by-sa/3.0/ o spedisci una lettera a Creative Commons, 171 Second Street, Suite 300, San Francisco, California, 94105, USA.

Bocchi Cinzia Ultimo aggiornamento: 15/09/2012