Definizione e tipologie dei vincoli di integrità dei dati

Definizione e tipologie dei vincoli di integrità dei dati

Vincoli di integrità dei dati

Un database SQL non deve solamente memorizzare i dati; deve garantire che i dati memorizzati siano corretti. Se i dati sono imprecisi o incoerenti, l’integrità di tali dati può essere violata, ponendo seri dubbi sull’affidabilità del database.
Per garantire l’integrità dei dati (data integrity), SQL fornisce vari vincoli di integrità, regole che vengono applicate alle tabelle base e che vincolano i valori che possono essere inseriti. E’ possibile applicare vincoli su singole colonne o anche su più tabelle.

L’integrità dei dati, praticamente, impone delle restrizioni sui valori assunti da colonne e tabelle in un database. I vincoli di integrità di dati possono essere di tre tipi:

  1. integrità sui domini (colonne)
  2. integrità sulle entità (tabelle)
  3. integrità referenziale

Inoltre, i vincoli di integrità possono comparire:

  • dopo la definizione di una colonna, quando riguardano un solo attributo;
  • al termine della dichiarazione di tutte le colonne, quando riguardano l’intera tabella e, quindi, più di un attributo.

Definizione e tipologie dei vincoli di integrità dei dati

Vincoli di integrità sulle colonne (NOT NULL, CHECK)

Può darsi che in certe situazioni, determinati valori all’interno di una riga non siano ammissibili, a seconda del contesto a cui si riferisce la tabella. I vincoli interni alla tabella sono quelli che possono essere risolti senza conoscere informazioni esterne alla tabella stessa.
I vincoli sono proprietà speciali che impongono l’integrità dei dati e creano tipi di
indici particolari per le tabelle e le relative colonne.
Un indice è un oggetto di database che consente di accedere in modo rapido ai dati delle righe di una tabella in base a valori chiave e di identificare ciascuna riga in modo univoco.

Vincolo NOT NULL

Per ogni colonna della tabella si può indicare se può accettare o meno valori nulli. Come impostazione predefinita, tutte le colonne possono accettare valori nulli. Tuttavia utilizzando il vincolo NOT NULL la colonna non accetterà valori nulli.

Vincolo CHECK

Il vincolo CHECK non è supportato da Microsoft Jet (ACCESS, DAO).

Il vincolo CHECK è un vincolo che impone l’integrità di dominio tramite la limitazione dei valori che è possibile inserire in una o più colonne. Tale vincolo, quindi, consente di specificare quali valori possono messere inclusi in una colonna. Si può, pertanto, definire un intervallo di valori, un elenco di valori o varie altre condizioni che limitano esattamente i valori che possono essere introdotti in una colonna.
I vincoli CHECK sono i più flessibili di tutti i vincoli e spesso diventano anche i più complessi. Ciononostante, la sintassi di base utilizzata per i vincoli CHECK è relativamente semplice.

Vincoli di integrità sulle tabelle (UNIQUE, PRIMARY KEY)

Vincolo UNIQUE

Vincolo che consente di impostare l’integrità di univocità per una chiave non primaria impedendo che nelle colonne per cui è impostato il vincolo vengano immessi valori doppi.
Il vincolo UNIQUE permette, quindi, di imporre che un gruppo di colonne deve rappresentare dati unici in ogni riga, cioè che non siano ammissibili righe che per quel gruppo di colonne abbiano dati uguali.
Il vincolo UNIQUE, pertanto, richiede che una colonna o un insieme di colonne contenga solo valori univoci.
E’ possibile creare un vincolo UNIQUE sia su colonne che sulla tabella.

Vincolo PRIMARY KEY

Quando una colonna, o un gruppo di colonne, costituisce un riferimento importante per identificare le varie righe che compongono la tabella, si può utilizzare il vincolo PRIMARY KEY, che può essere utilizzato una sola volta (il vincolo UNIQUE può essere, invece, utilizzato più volte). Questo vincolo stabilisce anche che i dati contenuti, oltre a non poter essere doppi, non possono essere indefiniti. Anche se non si specifica la clausola NOT NULL nella definizione della colonna, tale colonna deve comunque contenere dei dati.
Il motivo di queste restrizioni è il ruolo giocato dalle chiavi primarie in una tabella in cui ogni riga deve essere univoca. Questo significa che una colonna o una combinazione di colonne devono contenere valori univoci. Questa colonna (o gruppo di colonne) è chiamata chiave candidata.

Una chiave candidata è un insieme di una o più colonne che identificano univocamente ogni riga. Inoltre, una chiave candidata può essere definita come un vincolo UNIQUE o un vincolo PRIMARY KEY. Tuttavia ciascuna tabella dovrebbe includere una chiave primaria anche se non sono definiti vincoli UNIQUE.
Poiché una chiave primaria non può accettare valori nulli, si comporta da indicazione certa dell’univocità di una riga. Le chiavi primarie sono utili anche quando una tabella fa riferimento ad un’altra tramite l’impiego di chiave esterne (vedere il vincolo FOREIGN KEY).

Per definire la chiave primaria occorre utilizzare il vincolo PRIMARY KEY per specificare quale colonna o quale gruppo di colonne fungerà da chiave primaria della tabella.

Vincoli di integrità referenziale (FOREIGN KEY)

I vincoli esterni alla tabella riguardano principalmente la connessione con altre tabelle e la necessità che i riferimenti a queste siano validi. I vincoli interni riguardano, come visto, l’integrità dei dati all’interno della singola tabella. Al contrario il vincolo FOREIGN KEY riguarda le relazioni fra i dati di una tabella e quelli di un’altra tabella e per questo motivo è chiamato vincolo referenziale, poiché da riferimento ad un’altra tabella.
Le tabelle di una database relazionale sono connesse fra loro in modo da garantire l’integrità dei dati. Questa associazione fra le tabelle forma una relazione che garantisce l’integrità referenziale fra le tabelle. L’integrità referenziale impedisce che la manipolazione dei dati di una tabella alteri in modo non legittimo i dati di una tabella.

L’integrità referenziale (Referential Integrity) consente, in altre parole, di assicurare che, per ciascuna riga di una tabella chiave esterna, esista una riga corrispondente nella tabella chiave primaria e di impedire che una riga di una tabella chiave primaria venga eliminata quando esiste una relazione con una tabella chiave esterna.

La chiave primaria è una colonna o combinazione di colonne che identifica in modo univoco una riga di una tabella. Non può contenere valori NULL ed è necessario associarvi sempre un indice univoco. Una chiave primaria consente di correlare una tabella alle chiavi esterne di altre tabelle.

La chiave esterna è una colonna o combinazione di colonne i cui valori corrispondono alla chiave primaria di un’altra tabella. Le chiavi esterne non devono essere necessariamente univoche. In effetti sono spesso incluse in una relazione molti-auno con una chiave primaria. I valori della chiave esterna devono essere copie dei valori della chiave primaria. Ad eccezione di NULL, infatti, la chiave esterna deve includere soltanto valori che esistono anche nella chiave primaria. Una chiave esterna può essere NULL.

In aggiunta a quanto detto, un vincolo FOREIGN KEY deve obbedire a varie regole:

  • Le colonne referenziate devono essere la chiave candidata della tabella referenziata. Per le colonne referenziate viene principalmente utilizzata la chiave primaria. In altri termini, la colonna utilizzata come chiave esterna nella tabella referenziante deve far riferimento alla colonna utilizzata come chiave primaria nella tabella referenziata.
  • La chiave esterna della tabella referenziata deve includere lo stesso numero di colonne referenziate e le colonne referenzianti devono essere configurate con gli stessi tipi di dati delle colonne referenziate. Tuttavia, le colonne referenzianti non devono avere lo stesso nome delle colonne referenziate.
  • Se non si specificano le colonne referenziate quando si definisce un vincolo FOREIGN KEY, allora come colonne referenzianti verranno utilizzate le colonne definite come chiave primaria della tabella referenziata.
  • Un vincolo FOREIGN KEY può essere creato come vincolo sulla colonna o vincolo sulla tabella. Se si crea una chiave esterna quale vincolo sulla colonna, si può includere una sola colonna. Se si crea una chiave esterna come vincolo sulla tabella è possibile includere una o più colonne.

Pubblicato da Vito Lavecchia

Lavecchia Vito Ingegnere Informatico (Politecnico di Bari) Email: [email protected] Sito Web: https://vitolavecchia.altervista.org

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *