Chiave esterna

nel contesto dei database relazionali, vincolo di integrità referenziale tra due o più tabelle
(Reindirizzamento da Foreign key)

Una chiave esterna (in inglese foreign key), nel contesto dei database relazionali, è un vincolo di integrità referenziale tra due o più tabelle. Essa identifica una o più colonne di una tabella, detta tabella referenziante, che referenzia una o più colonne di un'altra tabella, detta referenziata.

Descrizione

modifica

I valori di un record delle colonne referenzianti devono essere presenti in un unico record della tabella referenziata. Ciò implica che un record nella tabella referenziante non può contenere valori che non esistono nella tabella referenziata, eccetto nel caso particolare di valori NULL se la colonna referenziante non è obbligatoria. Più record della tabella referenziante possono puntare allo stesso record della tabella referenziata. Nella maggior parte dei casi, ciò corrisponde alla relazione "uno a molti" tra una tabella padre ed una tabella figlio. La tabella referenziante e quella referenziata possono essere la stessa tabella. Una chiave esterna di questo tipo è anche chiamata auto-referenziante o ricorsiva. Una tabella può avere molte chiavi esterne e ogni chiave esterna può referenziare una tabella diversa.

Quando nella tabella referenziata si verifica un cambiamento che interessa la chiave esterna, un'azione può essere eseguita automaticamente dal DBMS per garantire l'integrità. L'azione specifica da eseguire può essere scelta dall'utente, chiave per chiave. Gli eventi che interessano la chiave primaria sono due: ON DELETE si verifica quando viene chiesta la cancellazione di un record nella tabella referenziata; ON UPDATE si verifica quando si tenta di modificare uno o più campi referenziati dalla chiave esterna.

Tipi di corrispondenza

modifica

Gli standard SQL prevedono tre diverse modalità per trovare le corrispondenze tra i record, ognuna delle quali implica un modo diverso di trattare i valori NULL. I tre tipi sono:

  • MATCH FULL: se la chiave esterna è composta da più colonne, non è possibile inserire un valore NULL in una colonna a meno che tutte le colonne non siano NULL. Se la chiave esterna è composta da una sola colonna, è possibile inserire valori NULL.
  • MATCH PARTIAL: Permette di inserire valori NULL. Se la chiave esterna è composta da più colonne, è possibile inserire valori NULL in tutte le colonne o in alcune di esse.
  • MATCH SIMPLE: i valori NULL non sono ammessi.

Esempio

modifica

Consideriamo la seguente dichiarazione DDL:

CREATE TABLE fattura (
  id INTEGER PRIMARY KEY,
  data_acquisto DATE,
  id_cliente INTEGER,
  FOREIGN KEY(id_cliente) REFERENCES cliente(id) ON DELETE CASCADE
)

Questo codice andrà a creare una tabella fattura in cui si potranno specificare un id (chiave primaria), una data_acquisto e un id_cliente. Il vincolo imposto è che id_cliente sia contenuto nella colonna id della tabella cliente.

Segue un esempio di istanza di database legale per la dichiarazione di cui sopra:

fattura
id data_acquisto id_cliente
1 20/03/2018 111
2 20/03/2018 123
3 15/05/2020 111
cliente
id nome
111 Wikimedia Foundation
123 Jimbo S.p.A.
200 Cool gadgets Inc.

Voci correlate

modifica

Collegamenti esterni

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