1 Linguaggio SQL
2 Notazione
1
• 0 o più occorrenze: *
• opzioni mutuamente esclusive: tra { }, separate da |
3 Tipi di dato
4 Creazione di relazioni
dove:
– <nome colonna> è il nome della colonna, che deve essere distinto da quelli di
altre colonne della stessa relazione;
– <dominio> è il dominio della colonna, scelto tra i tipi di dato SQL;
2
– valore default è un valore appartenente al dominio, assunto dalle tuple
se queste vengono inserite senza specificare alcun valore per la colonna (in
assenza di un valore di default, viene usato NULL, se questo è ammesso nella
colonna, altrimenti il DBMS rifiuta l’inserimento e segnala un errore).
4.1 Esempio
I dati contenuti in una base di dati sono corretti se soddisfano un insieme di regole di cor-
rettezza. Le operazioni di modifica dei dati definiscono un nuovo stato della base di dati,
che non è necessariamente corretto. Per questo, quando si effettuano queste operazioni
bisogna verificare la correttezza del nuovo stato. Tale verifica può essere effettuata:
• dalle procedure applicative;
• dal DBMS, mediante la definizione di vincoli di integrità.
Vantaggi:
Svantaggi:
3
• I controlli devono essere implementati separatamente in tutti i casi in cui si ef-
fettuano modifiche alla base di dati. Siccome, però, la conoscenza delle regole di
correttezza è tipicamente “nascosta” nelle applicazioni esistenti, alcuni control-
li potrebbero essere dimenticati in eventuali nuove applicazioni (soprattutto se
sviluppate da programmatori/team diversi).
Svantaggi:
In SQL, quando si definisce una relazione, è possibile specificare diversi tipi di VI:
• obbligatorietà di colonne (NOT NULL);
• chiavi (PRIMARY KEY e UNIQUE);
• chiavi esterne (FOREIGN KEY);
• vincoli CHECK, che sfruttano il linguaggio di interrogazione.
1
Una possibile soluzione, utile soprattutto per i programmi di data entry, consiste nell’implementare i
controlli semplici sia nelle applicazioni che mediante vincoli di integrità, migliorando così i tempi di
risposta nel caso degli errori più comuni e facili da individuare.
4
7 Obbligatorietà di colonne
Per specificare che una colonna è obbligatoria, cioè che non può assumere valori nulli, è
sufficiente includere NOT NULL nella specifica di tale colonna.
7.1 Esempio
8 Chiavi
5
8.1 Esempi
Osservazione: Non è necessario specificare NOT NULL per gli attributi che compongono
la chiave primaria, dato che l’obbligatorietà di tali colonne è già specificata dal vincolo
di PRIMARY KEY.
6
9 Chiavi esterne
Le chiavi esterne si specificano mediante la clausola opzionale FOREIGN KEY del comando
CREATE TABLE:
9.1 Esempi
7
dataNol DATE DEFAULT CURRENT_DATE,
codCli DECIMAL(4) NOT NULL REFERENCES Cliente
-- altro...
);
9.2.1 Esempi
2
Per gli inserimenti e le modifiche nella tabella referente non è possibile specificare alcuna opzione: se i
nuovi valori delle chiavi esterne non sono validi, l’operazione viene sempre rifiutata.
8
FOREIGN KEY (titolo, regista) REFERENCES Film
ON DELETE NO ACTION
);
10 Cancellazione di relazioni
10.1 Esempio
9
colloc DECIMAL(4) PRIMARY KEY,
titolo VARCHAR(30) NOT NULL,
regista VARCHAR(20) NOT NULL,
tipo CHAR NOT NULL DEFAULT 'd',
FOREIGN KEY (titolo, regista) REFERENCES Film
);
dove:
10
DROP CONSTRAINT <nome vincolo> {RESTRICT | CASCADE}
11.1 Esempi
11