Avanti Indietro Indice

Tabelle

A differenza di una definizione di relazione a livello logico, la definizione di una tabella presuppone anche l'associazione delle colonne ai relativi domini atomici. Un dominio atomico corrisponde sostanzialmente ad un tipo di dato semplice dei linguaggi di programmazione. I principali domini atomici offerti da SQL sono:

SQL-3 ha anche introdotto il dominio boolean con valore true e false, il dominio BLOB (Binary Large Object) per oggetti di gradi dimensioni costituiti da sequenze di valori binari (ad esempio una immagine) e il dominio CLOB (Character Large Object) per oggetti di gradi dimensioni costituiti da sequenze di caratteri (ad esempio un documento di testo). Gli valori di tipo BLOB e CLOB solitamente memorizzati in una zona apposita separata dagli altri dati.

E' possibile costruire nuovi domini atomici con il costrutto create domain. Seguono due esempi:

create domain voto as smallint
check (voto >= 18 and voto <=30)

Una colonna con dominio voto può assumere solo valori interi da 18 a 30.

create domain tipoBiglietto as varchar(8)
default "Intero"
check (tipoBiglietto in ("Intero", "Ridotto", "Studenti"))

Una colonna con dominio tipoBiglietto può assumere solo le stringhe 'Intero', 'Ridotto' o 'Studenti'. Se in ingresso il valore non è specificato si assume il valore 'Intero'.

Vediamo quindi come è possibile definire le tabelle in SQL. Innanzitutto, è possibile definire uno schema di base di dati con il comando create schema:

create schema TeatroSQL 
{definizione delle componenti}

Il comando ha creato uno schema dal nome TeatroSQL. Tra parentesi grafe vanno inserite le definizioni delle varie componenti, vale a dire domini, tabelle, vincoli di integrità e viste. Le componenti possono essere associate ad uno schema anche in un secondo momento. I nomi delle componenti all'interno di uno schema devono essere univoci. Schemi diversi possono però avere componenti con lo stesso nome. Gli schemi possono dunque essere usati per mantenere versioni diverse della stessa base di dati. Se non viene specificato nessuno schema viene usato uno schema di default associato all'utente che si è connesso alla base di dati.

Per definire una tabella esiste il comando create table. Occorre specificare il nome della tabella e, per ogni attributo, il nome, il dominio e un possibile valore predefinito. Segue un esempio:

create table dipendente
(
  cf               char(16), 
  nome             varchar(20), 
  cognome          varchar(20), 
  dataDiNascita    date, 
  luogoDiNascita   varchar(20), 
  età              smallint, 
  sesso            char,
  statoCivile      varchar(10) default 'libero'
) 

Il valore predefinito (default) è il valore che assume l'attributo qualora il suo valore non sia specificato in fase di inserimento di una riga nella tabella. Se il valore di dafault non è specificato, si assume che esso sia il valore nullo (NULL). Se vogliamo associare la tabella ad uno schema specifico, occorre far precedere al nome della tabella il nome dello schema separato da un punto, ad esempio TeatroSQL.dipendente.

Una volta definiti, un dominio e una tabella possono essere modificati con il comando alter. In particolare, è possibile aggiungere e rimuovere colonne da una tabella come nel seguente esempio:

alter table dipendente add column residenza varchar(30) not null

alter table dipendente drop column statoCivile

E' anche possibile rimuovere uno schema, un dominio e una tabella con il comando drop. Esistono due opzioni: restrict, che rimuove il componente solo se vuoto e cascade che rimuove comunque il componente. Quest'ultima opzione è da usare con cautela in quanto genera una reazione a catena per cui tutti i componenti che dipendono dal componente rimosso sono anch'essi cancellati. Segue un esempio:

drop table dipendente restrict
Avanti Indietro Indice
Basi di dati - Massimo Franceschet