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
[modifica | modifica wikitesto]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
[modifica | modifica wikitesto]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
[modifica | modifica wikitesto]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
[modifica | modifica wikitesto]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
[modifica | modifica wikitesto]Vincolo di integrità referenziale
[modifica | modifica wikitesto]![](http://upload.wikimedia.org/wikipedia/commons/thumb/1/13/Referential_integrity_broken.png/350px-Referential_integrity_broken.png)
artist_id
) nella tabella album
che fa riferimento ad un artista inesistente — in altre parole c'è un valore di una foreign key senza un corrispondente valore di primary key nella tabella di riferimento. Quello che è successo in questo esempio è che un artista chiamato "Aerosmith", con un artist_id
di 4
, è stato cancellato dalla tabella artist
. Però, l'album "Eat the Rich" faceva riferimento a questo artista, conseguentemente questa cancellazione non avrebbe potuto avere luogo.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.
Bibliografia
[modifica | modifica wikitesto]- Paolo Atzeni, Stefano Ceri, Piero Fraternali, Stefano Paraboschi e Riccardo Torlone, Basi di dati, 5ª ed., Milano, McGraw-Hill, 2018, ISBN 978-88-386-9445-5.
Voci correlate
[modifica | modifica wikitesto]Altri progetti
[modifica | modifica wikitesto]Wikiversità contiene risorse sul vincolo di integrità
Collegamenti esterni
[modifica | modifica wikitesto]- (EN) Denis Howe, integrity constraint, in Free On-line Dictionary of Computing. Disponibile con licenza GFDL