Corso MySQL – foreign key

mysql-logo

Questa parte del corso MySQL è leggermente più avanzata delle precedenti, qui parleremo di cosa sono e cosa servono le foreign key. In parole povere una foreign key è un indice che punta ad una colonna di un altra tabella che ti permette di mantenere l’integrità referenziale dei dati.

In questa definizione ho usato molti paroloni, ma vedremo tra poco che, a conti fatti, si tratta di cose molto semplici. Incominciamo a parlare di questa bestia strana, l’integrità referenziale dei dati. Cosa è?

Un database relazionale si chiama così perché ha più tabelle legate tra loro da relazioni. Queste relazioni si ottengono con un campo di una tabella (in genere un ID) che punta ad un campo uguale di un’altra tabella.

Nel nostro esempio abbiamo la colonna d_id della tabella dati_personali che corrisponde (si referenzia) alla colonna dip_id della tabella dati_dipendente. Questo vuol dire che qualsiasi valore della colonna d_id deve esistere nella colonna dip_id. Se questo è vero, l’integrità referenziale è soddisfatta.

Facciamo un esempio, cancelliamo il la riga con id 4 (Alessandro Manzoni) dalla tabella dati_dipendente;

A questo punto abbiamo una riga (4) nella tabella dati_personali con i dati personali di Alessandro Manzoni che non si riferiscono più a niente perché è stata cancellata l’informazione della tabella principale.

In questo momento non abbiamo nemmeno il nome di questa persona:

Cosa che invece abbiamo se usiamo un altro ID:

In questo momento nel nostro database non abbiamo più l’integrità referenziale dei dati. Per adesso rimettiamo le cose a posto cancellando la riga con ID 4 dalla tabella dati_personali:

Adesso diamo questo comando:

Otterremo:

Abbiamo creato una foreign key. Adesso cancelliamo la riga con ID 5 (Marie Curie) da dati_dipendente:

MySQL si rifiuta di cancellare la riga della tabella dati_dipendente, per poter mantenere l’integrità referenziale dei dati. Con il comando dato in precedenza abbiamo creato una chiave esterna (foreign key). La foreign key ci assicura il mantenimento dell’integrità referenziale dei dati impedendoci di cancellare una informazione utilizzata da un’altra tabella.

Se volessimo comunque cancellare Marie Curie dal nostro database, dovremmo prima cancellare la riga dalla tabella dati_personali:

e poi cancellare la riga dalla tabella dati_dipendente:

In questo modo va bene, MySQL ci consente di cancellare i dati in questo ordine, perché l’integrità referenziale dei dati rimane assicurata.

Nota. Abbiamo creato il database stabilendo che la tabella dati_dipendente è quella principale poiché contiene il nome e cognome del dipendente. La tabella dati_personali è subordinata e in teoria può esistere un dipendente che non abbia informazioni personali disponibili. Per questo motivo MySQL ci consente la cancellazione di un record di dati_personali.

Questa è solo una introduzione alle foreign key, per maggiori approfondimenti consiglio di consultare la guida di riferimento di MySQL.

Tags:

About the Author

Post a Reply

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

Top