Check in SQL

Nel linguaggio SQL la clausola CHECK introduce i vincoli di integrità generici.

CHECK condizione

La condizione indicata tra parentesi nella clausola CHECK deve essere sempre soddisfatta dalla base dati.

Dove va inserita?

E' una clausola aggiuntiva del comando CREATE TABLE.

Posso indicarla come vincolo aggiuntivo di un attributo o come vincolo di tabella.

A cosa serve?

Evita di dover sviluppare applicazioni esterne per realizzare vincoli aggiuntivi oltre quelli predefiniti.

Nota. La clausola è stata introdotta con la versione SQL-2 per ampliare i vincoli applicabili sugli attributi e le tabelle. Quindi, non è presente nelle prime versioni del linguaggio SQL.

Un esempio pratico

Creo una tabella con due campi

  1. CREATE TABLE Studenti (
  2. Matricola Int(5)
  3. Facoltà Varchar(20) CHECK(
  4. Matricola like "1%" OR Facoltà = (SELECT Facoltà T1 FROM Univ WHERE Matricola=T1.Matricola)
  5. )
  6. )

Nel campo Facoltà uso la clausola CHECK con un vincolo generico con una disgiunzione OR.

Il DBMS verifica se il campo Facoltà della tabella Studenti è uguale a quello corrispondente alla stessa matricola nella tabella Univ.

Tuttavia, se la matricola inizia per 1 il vincolo non è applicato.

Nota. Nel linguaggio SQL-1 un controllo del genere avrebbe richiesto lo sviluppo di un'applicazione esterna con un linguaggio di programmazione tradizionale (Cobol, C, Java, ecc. ).

E' un esempio di costrutto ottenibile con la clausola CHECK.

La differenza tra vincoli generici e vincoli predefiniti

I vincoli generici possono anche sostituire i vincoli di integrità predefiniti (Not Null, Default, Unique, Primate Key, References, Foreign Key)

Tuttavia, sarebbe del tutto poco pratico usarli per questo, perché i vincoli predefiniti hanno una sintassi molto più compatta rispetto al costrutto del vincolo generico.

L'utilità dei vincoli generici è sopratutto nella possibilità di creare dei nuovi costrutti, oltre i vincoli predefiniti.

Esempio

Questo costrutto CHECK realizza la PRIMARY KEY sull'attributo Matricola

  1. CREATE TABLE Studenti (
  2. Matricola Int(6) CHECK(
  3. Matricola IS NOT NULL AND 1 = (SELECT COUNT(*) FROM Studenti T1 WHERE Matricola=T1.MAtricola )
  4. )
  5. Nome Varchar(20) NOT NULL
  6. Cognome Varchar(20) NOT NULL
  7. )

E' molto più semplice usare il vincolo predefinito

  1. CREATE TABLE Studenti (
  2. Matricola Int(6) PRIMARY KEY
  3. Nome Varchar(20) NOT NULL
  4. Cognome Varchar(20) NOT NULL
  5. )

E così via

 


 

Segnalami un errore, un refuso o un suggerimento per migliorare gli appunti

FacebookTwitterLinkedinLinkedin
knowledge base

SQL