In questo breve articolo spiegherò le differenze tra una chiave primaria e una chiave esterna.
Se consideriamo un lungo elenco di persone, come l’elenco del telefono ad esempio, risulta plausibile trovare omonimie tra le persone, questo significa che alla coppia di informazioni nome, cognome corrisponde più di un record (una tupla, una riga). Ricordo che una tupla è un elemento di un database relazionale caratterizzato da uno o più attributi, quindi un record.
Risulta indispensabile allora realizzare un meccanismo che ci permetta di identificare in modo univoco i record, anche se hanno tutti i campi uguali tra loro.
La “chiave primaria”
La soluzione è quella di inserire nella tabella un nuovo campo che funzioni da chiave primaria; è il più importante tra tutti gli attributi e garantisce l’individuazione di un determinato record all’interno di una tabella.
Tipicamente si tratta di un numero intero che viene anche incrementato automaticamente ogni volta che aggiungiamo un record.
Non è sempre indispensabile creare un campo a parte; a volte esiste già un campo che è univoco per natura (ad esempio il codice fiscale) oppure si riescono a raggruppare un gruppo di più campi che presi tutti assieme costituiscono un elemento univoco. Ma è molto più frequente e vantaggioso che la chiave primaria sia un campo numerico, spesso indicato come campo ID (identificatore).
L’unicità di questo campo viene inoltre garantita dal fatto che, quando cancelliamo un record, il suo ID non è più riutilizzato. Ad esempio, se cancelliamo l’impiegato con identificativo 6, quella chiave viene persa per sempre.
La “chiave esterna”
Riportiamo il concetto di chiave primaria nel contesto dei dipartimenti: possiamo immaginare che ogni dipartimento nella tabella dei dipartimenti sia riconoscibile univocamente dagli altri grazie al suo “ID” o “CODICE”. Sarà molto comodo poter indicare solo questo numeretto per raggiungere sicuramente un certo dipartimento.
Abbiamo anche detto che le tabelle possono essere messe in relazione tra loro. Prendiamo ad esempio la relazione tra impiegato e dipartimento:
Impiegato -> lavora nel -> Dipartimento
Supponiamo che in un dipartimento ci siano più impiegati e che un impiegato sia il manager di un dipartimento. Secondo il discorso della chiave primaria la tabella Impiegato
avrà un codice ID che identifica univocamente ogni impiegato. Quindi, per associare un impiegato ad un dipartimento possiamo prevedere un campo, nella tabella Impiegati
che contenga il codice del dipartimento. Questo campo viene detto chiave esterna.
Possiamo pensare di effettuare lo stesso ragionamento anche per la relazione manager del
con il dipartimento: il campo Manager
nella tabella Dipartimenti
è una chiave esterna e corrisponde ad un campo ID (chiave primaria) della tabella Impiegati
.