Integrità dei dati

L'applicazione dell'integrità dei dati garantisce la qualità dei dati stessi nel database. Ad esempio, se a un dipendente viene assegnato l'ID 123, il database non dovrebbe consentire che a un altro dipendente venga assegnato un ID con lo stesso valore. Se si dispone di una colonna employee_rating che può contenere valori compresi tra 1 e 5, il database non dovrebbe accettare un valore non incluso in tale intervallo. Se nella tabella è presente una colonna dept_id in cui viene archiviato il numero di reparto del dipendente, nel database devono essere consentiti solo i valori validi per i numeri di reparto della società.

Due operazioni importanti per la pianificazione di tabelle consistono nell'identificare i valori validi per una colonna e nel determinare come ottenere l'integrità dei dati della colonna. L'integrità dei dati può essere classificata nelle categorie seguenti:

  • Integrità di entità

  • Integrità di dominio

  • Integrità referenziale

  • Integrità definita dall'utente

Integrità di entità

L'integrità di entità definisce una riga come entità univoca per una tabella specifica. L'integrità di entità determina l'integrità delle colonne identificatore o della chiave primaria di una tabella tramite indici UNIQUE, vincoli UNIQUE o vincoli PRIMARY KEY.

Integrità di dominio

L'integrità di dominio è la validità delle voci di una colonna specifica. È possibile applicare l'integrità di dominio per limitare il tipo, utilizzando i tipi di dati, il formato, utilizzando vincoli CHECK e regole, o l'intervallo di valori possibili, utilizzando vincoli FOREIGN KEY, vincoli CHECK, definizioni DEFAULT, definizioni NOT NULL e regole.

Integrità referenziale

L'integrità referenziale mantiene le relazioni definite tra le tabelle quando le righe vengono inserite o eliminate. In SQL Server l'integrità referenziale si basa sulle relazioni tra chiavi esterne e chiavi primarie o tra chiavi esterne e chiavi univoche, tramite i vincoli FOREIGN KEY e CHECK. L'integrità referenziale garantisce che i valori di chiave siano consistenti tra le varie tabelle. Per ottenere tale consistenza, è necessario non fare riferimento a valori inesistenti e, se viene modificato un valore di chiave, tutti i riferimenti a tale valore devono essere modificati in modo consistente in tutto il database.

Quando si applica l'integrità referenziale, in SQL Server non è consentito eseguire le operazioni seguenti:

  • Aggiungere o modificare righe in una tabella correlata se non esiste una riga associata nella tabella primaria.

  • Modificare valori di una tabella primaria creando righe orfane in una tabella correlata.

  • Eliminare righe da una tabella primaria se esistono righe correlate corrispondenti.

Nelle tabelle Sales.SalesOrderDetail e Production.Product del database AdventureWorks2008R2, ad esempio, l'integrità referenziale si basa sulla relazione tra la chiave esterna, ProductID, nella tabella Sales.SalesOrderDetail e la chiave primaria, ProductID, nella tabella Production.Product. Questa relazione garantisce che un ordine di vendita non possa mai fare riferimento a un prodotto che non esiste nella tabella Production.Product.

Integrità referenziale con utilizzo di chiavi esterne/primarie

Integrità definita dall'utente

L'integrità definita dall'utente consente di definire regole business specifiche che non rientrano nelle altre categorie di integrità. Tutte le categorie di integrità supportano l'integrità definita dall'utente, inclusi tutti i vincoli a livello di colonna e di tabella in CREATE TABLE, stored procedure e trigger.