Integrità referenziale

Da Wikipedia, l'enciclopedia libera.
Jump to navigation Jump to search
Un esempio di database che non ha garantito integrità relazionale. In questo esempio c'è un valore di foreign key (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.

Nell'ambito delle basi di dati relazionali, l'integrità referenziale è una proprietà che assicura che le relazioni tra tabelle siano coerenti. Più nello specifico, la proprietà richiede che vengano rispettati determinati vincoli di integrità di tipo interrelazionale, i quali impongono che ogni valore di un attributo (colonna) di una relazione (tabella) esista come valore di un altro attributo in un'altra relazione.[1]

In SQL, i vincoli di integrità referenziale si esprimono solitamente tramite 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.

Formalizzazione[modifica | modifica wikitesto]

Un vincolo d'inclusione su due predicati (eventualmente coincidenti) e è indicato con , dove i vari , sono attributi (nomi delle colonne) di e , rispettivamente. Ciò implica che le tuple di valori nell'insieme ordinato di attributi in devono apparire anche come tuple di valori nell'insieme ordinato di attributi di .

Tale vincolo è una forma particolare di tuple-generating dependency (TGD) dove in entrambi i lati della regola c'è un solo atomo relazionale.[2] In logica del primo ordine è esprimibile come , dove è il vettore (di lunghezza ) delle variabili condivise tra gli atomi e e nessuna variabile compare più volte nel corpo né nella testa del vincolo.

Note[modifica | modifica wikitesto]

  1. ^ (EN) Mike Chapple, Referential Integrity, su databases.about.com. URL consultato il 17 marzo 2011 (archiviato dall'url originale il 25 settembre 2004).
    «Definition: Referential integrity is a database concept that ensures that relationships between tables remain consistent. When one table has a foreign key to another table, the concept of referential integrity states that you may not add a record to the table that contains the foreign key unless there is a corresponding record in the linked table.»
  2. ^ (EN) Phokion G. Kolaitis, A Tutorial on Database Dependencies (PDF), su knaw.nl, University of California Santa Cruz & IBM Research - Almaden, p. 5. URL consultato il 10 dicembre 2021.

Collegamenti esterni[modifica | modifica wikitesto]

  Portale Informatica: accedi alle voci di Wikipedia che trattano di informatica