sei sul sito di Giovanni Fraterno
In questo modulo imparerete:
3.1) cos'è e a cosa serve una chiave primaria
3.2) come definire una chiave primaria in
una tabella
3.3) come istituire una relazione tra due tabelle
3.4) cosa sono i database relazionali
3.1) Cos'è e a
cosa serve una chiave primaria
E' tempo di fare ora un
importante passo in avanti nella nostra comprensione delle basi di dati.
Parleremo così di chiavi
primarie e del concetto di database relazionale.
Riprendiamo a questo scopo
la tabella chiamata "Videoteca", ma questa volta dal file “prova1.mdb”.
Dopo aver
aperto il suddetto file già esistente, fare clic sul nome della tabella
"Videoteca" per visualizzarne il contenuto.
Come potrà osservarsi, la
tabella, che prima era vuota, all’interno di questo nuovo file “preva2.mdb”, contiene adesso sei record.
Osserviamo innanzitutto la
struttura di questa tabella.
Come è facile comprendere, campi quali: genere, regista,
attori, durata del film, anno di produzione possono contenere informazioni
duplicate.
Nella nostra tabella illustrativa
vediamo ad esempio che il genere "drammatico" ed il genere
"fantascienza" si ripetono due volte.
E così anche “anno” e “data di registrazione” si
ripetono uguali in più record.
E persino i campi
"regista" e "protagonisti" potrebbero contenere più
volte i medesimi nomi, se solo avessimo inserito più titoli di film nella
nostra tabella.
L'unico campo che non si
presta facilmente a duplicati è il campo titolo.
E' tuttavia possibile che vi
siano due film con lo stesso titolo, ad esempio E.T. nella versione originale
ed in quella recentemente restaurata.
Insomma, nessuno dei campi
della nostra tabella può essere una vera e propria chiave primaria.
Ma che cosa intendiamo
precisamente con questa espressione ?
Una chiave primaria è un campo di una tabella dotato delle successive proprietà:
- tutte le sue celle sono
piene, nessuna cioè ha valore nullo, insomma il valore
di tutte le celle è sempre espresso
- non può avere lo stesso
valore in due celle differenti, se ad esempio la chiave primaria è un numero,
deve trattarsi di un numero diverso per ogni cella.
Ma a cosa serve definire una
chiave primaria ?
Essenzialmente a due scopi,
di cui il primo è funzionale al raggiungimento del secondo:
- rendere assolutamente
unico, e perciò riconoscibile, ciascun record di una tabella
- consentire di mettere in
relazione tra loro tabelle differenti.
Come ciò possa
avvenire, lo vedremo in seguito.
Per ora basti sapere che in
una tabella i campi definiti come chiavi primarie possono essere anche più di
uno.
3.2) Come
definire una chiave primaria in una tabella
Ora che sappiamo cos'è e a
cosa serve una chiave primaria, poiché vogliamo che i record della nostra
tabella possano essere messi in relazione con i record di altre
tabelle, procediamo con il definire una chiave primaria.
La tabella
"Videoteca" aperta in visualizzazione "foglio dati", è una modalità nella quale si possono inserire, cambiare o
cancellare dati, ma nella quale non è possibile effettuare modifiche
strutturali ai campi o al formato dei dati.
Per definire una chiave
primaria, occorre attivare la modalità visualizzazione
struttura.
Possiamo farlo cliccando
sull'icona con la squadra e la matita, la prima a sinistra sulla barra degli strumenti.
Come è stato appena detto, nessuno dei campi della tabella
si presta a divenire una chiave primaria, perché nessuno di essi contiene
informazioni veramente univoche.
Dobbiamo allora inserire un
nuovo campo, dotato delle caratteristiche giuste.
Per fare ciò, posizioniamo il puntatore sulla freccina alla sinistra del
campo "titolo", il primo della lista, e clicchiamo il tasto destro
del mouse, in modo da far comparire il menu contestuale.
Scegliamo poi la voce
"inserisci righe", che crea una riga vuota, cioè
lo spazio per un nuovo campo, al di sopra del campo "titolo", e attribuiamo
il nome "Film ID", cioè identificativo dei film, al nuovo campo
appena generato.
Nell'elenco dei tipi di
dati, scegliamo la voce "contatore".
Notate che, tra le opzioni di formato, in basso nella finestra, abbiamo accanto
a INDICIZZATO, il valore SI', e tra parentesi l'indicazione che i duplicati
sono ammessi.
A questo punto clicchiamo
con il tasto destro sulla scritta "Film ID" e, dal menu contestuale,
scegliamo la prima voce, cioè "chiave primaria".
Nella colonna di sinistra
accanto al nome del campo, compare l'iconcina di una chiave, a ricordare che
questo campo è adesso una chiave primaria.
E' importante osservare che,
non appena abbiamo trasformato il contatore in una chiave primaria, il valore
dell'opzione di formato esaminata prima, cioè
INDICIZZATO, è cambiato.
Indica adesso che i
duplicati NON sono più ammessi.
Ciò perché, come abbiamo
spiegato, tutti i valori di un campo che è chiave primaria
devono essere unici ed irripetibili.
Per concludere
la procedura di definizione della chiave primaria, clicchiamo sulla solita X in
alto a destra della finestra visualizzazione struttura e rispondiamo SI' alla
domanda se vogliamo salvare i cambiamenti di struttura apportati.
Aprendo ora la tabella
"Videoteca" in modalità foglio dati,
possiamo vedere che è ora presente sulla sinistra il nuovo campo FilmID, e che
questo campo identifica univocamente, mediante numeri progressivi da 1 a 6,
tutti i record della tabella.
3.3) Come
istituire una relazione tra due tabelle
Abbiamo detto che una delle
ragioni per definire delle chiavi primarie è la necessità di mettere più
tabelle in comunicazione reciproca.
Abbiamo preparato un piccolo
esempio che mostra come stabilire una relazione fra due tabelle.
Apriamo il file "prova1.mdb".
Qui abbiamo due tabelle:
"Videoteca", che già conoscete, ed una nuova tabella denominata
"Film Spielberg".
Aprendola con un doppio clic,
notiamo che contiene un elenco con alcuni dei principali film realizzati dal
regista Steven Spielberg.
La prima colonna,
"FilmID", è la chiave primaria.
Contiene un elenco di numeri
identificativi, analogo a quello creato in precedenza,
ed ora presente nell'altra tabella.
Chiudiamo momentaneamente
questa tabella e attiviamo il comando RELAZIONI dal menu STRUMENTI.
Compare una finestra nella
quale sono presenti due altre piccole finestre che rappresentano le due tabelle
esistenti attualmente nel database, ciascuna con i
relativi campi.
Vogliamo istituire una
relazione tra i rispettivi campi FilmID, in modo che gli stessi numeri
identificativi dei film valgano per entrambe le tabelle.
Per ottenere questo
risultato, premiamo il tasto sinistro del mouse in corrispondenza della scritta
"FilmID" nella tabella Videoteca e, sempre tenendo premuto il
pulsante, trasciniamo il puntatore fin sopra l'analoga scritta FilmID
nell'altra tabella.
Si apre a questo punto una
finestra di dialogo che consente di definire meglio le caratteristiche della
relazione che vogliamo istituire.
Lasciamo invariati i
parametri predefiniti e premiamo il pulsante CREA.
Il risultato positivo dell'operazione è testimoniato dalla doppia freccia
nera che collega le due tabelle.
Se ora apriamo la tabella "Film Spielberg"
possiamo vedere che alla sinistra del primo campo è comparso in ogni riga un
segno +.
Cliccando su questo segno,
si apre il record corrispondente dell'altra tabella, cioè
il record definito dal medesimo valore di FilmID.
Cliccando ad esempio sul
segno + nel record contenente il film E.T. visualizziamo
tutte le informazioni su questo film presenti nella tabella Videoteca.
3.4) Cosa sono i database relazionali
Come suggerisce
l'aggettivo, la loro caratteristica principale è di stabilire relazioni complesse
tra tabelle.
Le basi di dati più
elementari, come può esserlo una semplice agendina di indirizzi
e numeri di telefono, esauriscono il loro compito con il fornire
all'utilizzatore i mezzi per archiviare i dati in tabelle singole e per
estrarli in seguito dalle stesse.
Programmi viceversa come
Access permettono di creare complesse ramificazioni di rapporti tra tabelle,
allargando enormemente le possibilità di impiego delle
informazioni.
Se, ad
esempio, le tabelle contenenti ognuna gli elenchi telefonici di città diverse
sono, per un database NON relazionale, entità indipendenti e non confrontabili,
per un database relazionale, queste tabelle sono invece in grado di interagire
in vari modi.
Predisponendo infatti correttamente le relazioni tra le tabelle, si può ad
esempio garantire che una nuova attribuzione di numero di telefono non sia il
duplicato di qualche numero già attivo.
Perché questo complicato
meccanismo funzioni correttamente, le basi di dati relazionali devono
rispettare le cosiddette regole di INTEGRITA' REFERENZIALE.
L'applicazione di tali
regole garantisce che i dati conservati in tabelle collegate siano
sempre coerenti tra loro.
Se ad esempio si cancella l'abbonato Rossi dalla tabella A, perché ha cambiato città o
fornitore, un programma come Access è in grado di cancellare automaticamente
tutti i suoi numeri di telefono.
Il non applicare queste
regole creerebbe evidentemente un problema di coerenza, perché continuerebbero
a risultare impegnati dei numeri di telefono a cui non
corrisponde più un titolare.
Attenzione
che un errore di cancellazione può però causare, in virtù dei collegamenti a
cascata tra tabelle, disastrose perdite di dati.
Per evitare ciò, oltre ad
un'accurata progettazione delle relazioni tra le tabelle, è indispensabile effettuare periodicamente copie di sicurezza di tutti i
propri archivi elettronici.