Linguaggio SQL – Gestione dei vincoli di integrità con esempi

Vincoli di integrità su una tabella

I vincoli di integrità su una tabella impongono delle regole che devono essere rispettate da tutte le righe (tuple) di una tabella. Tra questi vincoli vi sono quelli per la definizione delle chiavi, tra cui la chiave primaria, e quelli che impongono delle regole sui valori assunti da due o più colonne.

Vincolo di chiave primaria

Il principale vincolo di integrità su una tabella è quello che definisce la sua chiave primaria (PRIMARY KEY); sia che si tratti di una singola colonna (chiave semplice o atomica) o di più colonne (chiave composta o multipla), la chiave primaria è unica.
Se la chiave primaria è semplice, il vincolo di tabella sulla chiave può essere usato anche come vincolo di colonna aggiungendo le parole chiave PRIMARY KEY nella definizione della relativa colonna.

Il vincolo di unicità UNIQUE

Per dichiarare una o più colonne i cui valori devono essere necessariamente distinti all’interno di una tabella e che non formano una chiave primaria, SQL prevede il vincolo; tale clausola UNIQUE definisce una che, a differenza della chiave primaria, può assumere valori nulli (NULL).
In una tabella è possibile specificare più chiavi UNIQUE ma una sola PRIMARY KEY.

Se la superchiave è semplice, il vincolo di tabella di unicità può essere usato anche come vincolo di colonna aggiungendo la keyword UNIQUE nella definizione della relativa colonna.

Vincolo su più colonne con CHECK

La clausola CHECK può essere anche usata per imporre restrizioni su una combinazione dei valori assunti da due oppure più colonne in una tabella.
Nel caso di restrizione su una colonna, CHECK è un vincolo di colonna e può essere scritto o alla fine della dichiarazione della colonna stessa o alla fine della tabella; se le restrizioni riguardano più colonne, CHECK diventa vincolo di tabella e deve essere scritto alla fine della dichiarazione della tabella stessa.

Esempio di utilizzo di alcuni vincoli di integrità su una colonna e integrità su una tabella:

------- 
CREATE TABLE Alunni
(
  Codice CHAR(8) CHECK (Codice LIKE 'Classe-__'),
  CodiceFiscale CHAR(16) UNIQUE,
  Cognome CHAR(20) NOT NULL,
  Nome CHAR(20) NOT NULL,
  DataNascita DATE CHECK (Anno BETWEEN 1995 AND 2016 ) NOT NULL,
  LuogoNascita CHAR(30) DEFAULT 'Castelvenere',
  Classe CHAR(4) CHECK (Classe IN ('IA','IIA','IIIA','IVA','IVB','VA') 
  NOT NULL, 

  PRIMARY KEY(Codice)
)
----- 

Visite: 1352

Pagine: 1 2 3 4