# Vincolo di integrità

In informatica i vincoli di integrità rappresentano una classe di proprietà che dovrebbero essere sempre soddisfatte dalle istanze delle basi di dati, pena la perdita dei dati conservati o la comparsa di errori di elaborazione. La verifica e la preservazione di questi vincoli rientra nei compiti dei sistemi di gestione delle basi di dati.
Dal punto di vista formale un vincolo è un predicato sulla base di dati o di un suo elemento. Valutando il predicato è possibile rilevare se la base di dati soddisfa o meno un dato vincolo. In generale a uno schema di base di dati si associa un insieme di vincoli e si considerano corrette solo le istanze che soddisfano tutti i vincoli specificati.
Esistono due grandi tipologie di vincoli: quelli intra-relazionali che interessano una sola relazione e quelli inter-relazionali o extra-relazionali che definiscono legami tra relazioni differenti.

## Vincoli intra-relazionali

Fanno parte dei vincoli intrarelazionali tutti quei vincoli il cui soddisfacimento è definito per singole relazioni, ovvero tutte le istanze di una relazione devono soddisfare tutti i vincoli che sono definiti sulla relazione stessa.

### Chiave primaria

Una chiave primaria ('primary key') serve a identificare univocamente le righe della tabella ove essa è definita. Può essere specificato una sola volta per tabella, dichiarando uno o più attributi o campi dato come chiave primaria. Due righe distinte non possono avere lo stesso valore sui campi scelti come 'primary key'. Ovviamente non può assumere valore nullo (falso).

### Chiave univoca

Una chiave univoca (unique key) implementa una caratteristica simile alla chiave primaria, con la particolarità che gli attributi coinvolti possono assumere il valore nullo. Si può definire il vincolo su uno o più attributi della tabella.

### Vincoli di tupla

Un vincolo di tupla o record è un vincolo che può essere valutato su ciascuna tupla indipendentemente dalle altre. Un vincolo definito con riferimento a singoli valori viene detto vincolo su valori o vincolo di dominio in quanto impone una restrizione sul dominio dell'attributo.
Un esempio è il vincolo not NULL, usato per dichiarare che un dato attributo non può assumere il valore nullo. Solitamente questo attributo viene corredato da un valore di default, che viene assegnato automaticamente all'atto della creazione di una nuova tupla.

## Vincoli inter-relazionali o extra-relazionali
### Vincolo di integrità referenziale

L'integrità referenziale è una proprietà che se soddisfatta assicura che le relazioni tra tabelle siano coerenti. Più nello specifico, la proprietà richiede che per ogni istanza di un certo attributo in una relazione esista un corrispettivo dello stesso tipo in un'altra relazione.
In SQL, i vincoli di integrità referenziale si esprimono solitamente tramite il costrutto foreign key. Affinché sia rispettata l'integrità referenziale, ogni campo in una tabella che sia stato dichiarato come foreign key può contenere solo valori della chiave primaria o chiave candidata di una tabella "madre" relazionata.
Per esempio, cancellare un record che contiene un valore a cui fa riferimento una foreign key di un'altra tabella violerebbe l'integrità relazionale. Alcuni RDBMS possono garantire l'integrità relazionale, o cancellando le rispettive righe di foreign key (Cascade), interrompendo l'operazione e non effettuando la cancellazione (No Action), ponendo a NULL i campi contenenti la rispettiva foreign key (Set Null) oppure ponendoli al valore di default (Set Default). Spesso si può scegliere quale metodo usare attraverso un vincolo di integrità relazionale definito in un data dictionary.