CHIAVE PRIMARIA
Il modello relazionale ha un “difetto”: i record di una tabella possono essere ripetuti. Non esiste un sistema, semplice e pratico, per controllare che lo stesso record non sia digitato due volte, su due righe diverse della stessa tabella. Questo può comportare gravi errori nel lavoro del database, si rischia di ottenere risultati sbagliati.
ESEMPIO.
Le tabelle utilizzate sono state semplificate.
SI utilizza un archivio per registrare gli iscritti ai corsi di informatica, il
database è composto da più tabelle (questa situazione non è reale). La figura
4.06 visualizza la tabella dei partecipanti.
FIG. 4.06
Come si vede, l’impiegato che
ha registrato le iscrizioni ha commesso un errore: ha ripetuto due volte il
signor Rossi Mario. La figura 4.07 visualizza la tabella dei corsi, con i
relativi iscritti.
FIG. 4.07
Il problema, che il database non può risolvere, è: l’iscritto al corso di Access Rossi Mario, corrisponde al primo record della tabella 4.06 o al quarto?
Ogni volta che si verifica una
situazione di questo tipo, il database “va in crash”, o comunque non si comporta
correttamente. Per evitare questo problema, è necessario definire, in ogni
tabella, una chiave primaria.
Ogni tabella di un database relazionale (e in particolare di Access) dovrebbe
avere una chiave primaria. La CHIAVE PRIMARIA è un campo della tabella,
scelto dal realizzatore, che identifica in modo univoco ogni record della
tabella stessa. In ogni tabella si deve trovare un campo i cui valori non
siano mai ripetuti nelle righe dell’intera tabella, esempi di valori simili
possono essere la partita IVA, il codice fiscale, la targa e il numero di serie.
Se non esiste un campo con tali caratteristiche, si deve aggiungerne uno: di
solito si usa un identificatore, per esempio IdPersona, IdCliente, IdProdotto.
Nella fase di progettazione, dopo aver definito le tabelle e i relativi campi,
si deve scegliere una chiave primaria per ogni tabella. Può succedere di
incontrare tabelle senza chiave primaria, ma è una situazione anomala e
rarissima.
La chiave primaria non risolve completamente il problema dell’esempio
precedente, ma solo una parte.
ESEMPIO. Chiave primaria.
La figura 4.08 visualizza la stessa tabella dei partecipanti dell’esempio
precedente, con l’aggiunta di una chiave primaria (codice).
FIG. 4.08
La figura 4.09 visualizza la
tabella degli iscritti.
FIG. 4.09
In questo caso è ovvio che il
numero 1 nella tabella 4.09 corrisponde alla prima riga della tabella 4.08, non
alla quarta. La chiave primaria garantisce che i dati della tabella 4.09 siano
sempre coerenti con i dati della tabella 4.08.
Il problema che rimane, e che non può essere risolto con mezzi semplici, è che
per errore si potrebbe iscrivere Rossi Mario, con numero 4, al corso di Excel,
invece di Rossi Mario, con numero 1. Questo non genera errori gravissimi, come
nel caso precedente, ma comunque si possono generare situazioni anomale. Si
supponga di stampare un elenco delle persone e dei corsi da loro frequentati, il
risultato sarebbe quello visualizzato nella figura 4.10.
FIG. 4.10
Mentre Bianchi e Verdi
risultano iscritti a due corsi, Rossi Mario, numero 1, risulta iscritto ad un
solo corso. Non ha importanza che ci sia un altro record con gli stessi dati
(valori), numero 4, infatti, ogni record corrisponde ad una persona diversa.
In una tabella ci possono essere più campi candidati ad essere la chiave primaria: CHIAVI CANDIDATE. In termini più semplici, possono esistere nella stessa tabella più colonne i cui valori non sono mai ripetuti, ognuna di queste potrebbe diventare la chiave primaria. Spetta a chi progetta la base di dati stabilire quale campo deve essere definito chiave primaria, la scelta non dipende solo dalle caratteristiche del campo stesso, ma anche dalle “funzioni” del database.
ESEMPIO. Codice fiscale.
Il campo codice fiscale è potenzialmente valido come chiave primaria, in quanto
non possono esistere due persone con lo stesso valore di codice. Non è detto
però che si possa o si debba necessariamente definire il codice fiscale come la
chiave primaria di una tabella. Come si è visto negli esempi precedenti, il
valore della chiave primaria viene riportato anche su altre tabelle, con il
codice fiscale risulterebbe un’operazione onerosa in termini di tempo.
L’impiegato addetto ad inserire i dati dovrebbe ricordare i codici fiscali di
centinaia o migliaia di persone diverse, in caso contrario dovrebbe consultare
la lista e copiare il codice. Sarebbe molto più semplice ricordare un numero o
una sigla (molto più corti del codice fiscale). Si può anche incontrare il
problema di iscritti stranieri, provenienti da una nazione senza il codice
fiscale, in quel caso il campo dovrebbe rimanere vuoto. Ma, proprio perché per
definizione la chiave primaria non può avere ripetizioni, non è permesso saltare
il valore del campo chiave primaria, si deve inserire per forza un valore.
È possibile definire più campi insieme come chiave primaria, ma di solito non si usa, perché, come si è visto poco fa, i valori della chiave primaria sono ripetuti anche su altre tabelle, con grande spreco di memoria e tempo per inserire i dati ripetuti.
ESEMPIO.
Si definisce una tabella Persone con i seguenti campi: Cognome, Nome, Indirizzo,
Cap, Città, Data di nascita, Numero di telefono e Indirizzo Internet. Si vuole
definire la chiave primaria, ma nessuno dei campi può essere considerato chiave
candidata, in quanto tutti possono avere ripetizioni. Si potrebbero definire
come chiave primaria i campi Cognome, Nome, Data di nascita e Città
contemporaneamente, cioè tutti insieme, è molto difficile avere ripetizioni,
considerando i valori di questi quattro campi insieme. Questo è possibile e
corretto per un database, ma, come detto sopra, comporta grossi sprechi se si
devono indicare le persone in altre tabelle (per esempio quella delle
iscrizioni), in quanto si devono riportare tutti quattro i campi.