INTRODUZIONE
I database creati con Access sono chiamati RELAZIONALI, le tabelle
definite non sono completamente separate una dall’altra, ma si dice che
sono in RELAZIONE.
Due tabelle, per poter essere in relazione, devono condividere dei valori,
cioè devono avere un campo “uguale”.
ESEMPIO. Relazione.
La figura 5.01 visualizza una tabella clienti (ridotta per esigenze
di spazio).

FIG. 5.01
La figura 5.02 visualizza una tabella degli ordini effettuati dai clienti
(ridotta).

FIG. 5.02
La colonna Cliente, della tabella 5.02, contiene dei dati che
corrispondono a quelli della colonna Codice, della tabella 5.01,
anche se le due colonne non hanno lo stesso nome. Non avrebbe senso
che un ordine fosse effettuato dal cliente 102, in quanto non esiste
un cliente con tale codice: nella colonna Cliente possono essere inseriti
solo valori che sono già presenti nella colonna Codice.
Si dice che esiste una relazione tra le due tabelle (che in realtà
è una relazione tra due campi delle tabelle) per indicare che
i valori della colonna Cliente corrispondono ai valori della colonna
Codice.
La colonna Codice è la chiave primaria della tabella 5.01,
quindi i valori non sono mai ripetuti in questa tabella. La chiave
primaria della tabella 5.02 non è il campo Cliente, ma il campo
IdOrdine, questo significa che i valori della colonna Cliente possono
essere ripetuti, come si vede nella figura. Infatti, nella realtà,
un cliente è un’unica Ditta, rappresentata con un codice univoco.
Ogni ditta può effettuare più ordini. Il numero progressivo
degli ordini non può essere ripetuto nella tabella 5.02, ma il
codice Cliente può essere ripetuto molte volte.
Ci sono quattro tipi di relazioni: uno a molti, molti a uno, molti
a molti e uno a uno.
UNO A MOLTI – MOLTI A UNO
Questi due nomi rappresentano la stessa relazione, guardata
da due punti di vista diversi. Le due tabelle in questione vengono chiamate
lato uno e lato molti, rispettivamente. Il significato è che
un valore della tabella del lato uno può corrispondere a più
valori del lato molti (può corrispondere anche ad un solo o a
nessun valore). Per capire meglio conviene utilizzare degli esempi.
ESEMPIO. Clienti e ordini.
Un cliente può effettuare molti, uno o nessun ordine, mentre
un ordine corrisponde sempre ad un solo cliente. La tabella Clienti
è il lato uno, la tabella Ordini è il lato molti della
relazione. Guardando la relazione dalla tabella Clienti, si ha una relazione
uno a molti (un cliente ha molti ordini). Guardando la relazione dalla
tabella Ordini, si ha una relazione molti a uno (molti ordini corrispondono
allo stesso cliente).
ESEMPIO. Studenti ed esami.
Uno studente può sostenere molti, uno o nessun esame, mentre
un esame è sempre sostenuto da un unico studente. In questo caso
per esame si intende la registrazione del voto con data, ora e materia,
non il corso, che è seguito da più studenti. La tabella
Studenti è il lato uno, la tabella EsamiSostenuti è il
lato molti. Guardando la relazione dalla tabella Studenti, si ha una
relazione uno a molti (uno studente può sostenere molti esami).
Guardando la relazione dalla tabella EsamiSostenuti, si ha una relazione
molti a uno (molti esami corrispondono allo stesso studente).
Per creare una relazione di questo tipo si utilizzano la chiave primaria,
sul lato uno, e un campo chiamato CHIAVE ESTERNA, sul lato molti.
La chiave esterna è il campo della tabella lato molti che contiene
gli stessi valori, che è “uguale”, al campo chiave primaria della
tabella lato uno.
UNO A UNO
Questo tipo di relazione è molto rara, difficilmente si
incontrano. Le due tabelle in questione sono entrambe lato uno, un record
di una tabella corrisponde esattamente ad un record di un’altra tabella.
È difficile trovare esempi semplici di tale relazione, quello
seguente serve solo per capire meglio quanto detto.
ESEMPIO. Agenti e fatturato.
Un agente ha un solo fatturato, un fatturato appartiene ad un solo agente
(non può essere abbinato a più persone).
MOLTI A MOLTI
Questo tipo di relazioni si incontrano spesso, sono definite
solo nello schema, ma non possono essere realizzate. Esistono nella
fase di progettazione, fase 2, ma devono essere trasformate nella fase
di realizzazione, fase 3, si vedrà in seguito in che modo. Le
tabelle in questione si chiamano entrambe lato molti, un record della
prima tabella può corrispondere a molti, uno o nessun record
della seconda tabella, e viceversa.
ESEMPIO. Musicisti e album.
Un musicista può comporre molti, uno o nessun album, un album
può essere composto da uno o più musicisti.
ESEMPIO. Libri e autori.
Un autore può scrivere un libro o molti libri, un testo può
essere scritto da un solo autore o da più autori congiuntamente.
ESEMPIO. Corsi e studenti.
In questo caso, con corsi si intende una materia insegnata. Uno studente
può seguire uno, nessuno o molti corsi, un corso può essere
seguito da uno, nessuno o molti studenti.
Si può pensare questa relazione come se fosse formata da due
relazioni del tipo uno a molti.
ESEMPIO. Libri e autori.
Si consideri la tabella libri. Un libro può essere scritto da
un autore, oppure da più autori: relazione uno a molti.
Si consideri la tabella autori. Un autore può scrivere uno o
più libri: relazione uno a molti.
COME CREARE UNA RELAZIONE
Tramite il seguente esempio si vuole mostrare come si creano
le relazioni.
ESEMPIO.
Si prendono in considerazione le due tabelle Clienti e Ordini, ridotte
a pochi campi più interessanti, visualizzate nella figura 5.03.

FIG. 5.03
Per rispondere a domande del tipo “quale cliente ha fatto un certo
ordine?, Quanti ordini ha fatto il cliente Rossi?”, si deve definire
una relazione tra le due tabelle.
Per prima cosa si deve capire di che tipo di relazione si tratta. Si
è già visto, negli esempi precedenti, che si tratta di
una relazione uno a molti. La tabella Clienti rappresenta il lato uno,
la tabella Ordini rappresenta il lato molti. Le rispettive chiavi primarie
sono IdCliente e IdOrdine e le tabelle non hanno campi in comune, che
contengono gli stessi valori.
Si deve aggiungere un campo, della tabella del lato uno, nella tabella
del lato molti che memorizzi il collegamento (la relazione) con la tabella
del lato uno.
Il campo da aggiungere deve essere tale che i suoi valori siano univoci,
ossia non vengano mai ripetuti nella tabella del lato uno. Il campo
che, per definizione, corrisponde a queste caratteristiche è
la chiave primaria, nel nostro caso IdCliente. Questo campo “non serve”
nella tabella lato molti, per l’esistenza della tabella stessa, ma deve
essere aggiunto per creare la relazione.
Nella tabella lato uno il campo in questione è la chiave primaria,
nella tabella lato molti il campo viene chiamato CHIAVE ESTERNA.
I valori della colonna chiave esterna possono essere ripetuti, infatti
un cliente può effettuare più ordini.
La figura 5.04 visualizza il risultato della relazione.

FIG. 5.04
Non è sufficiente avere i due campi sulle tabelle per definire
le relazioni, i due campi devono essere “uguali”. Per uguali si intendono
due campi che hanno le stesse caratteristiche, cioè lo stesso
tipo di dati e la stessa dimensione. Nell’esempio i campi chiave primaria
e chiave esterna sono entrambi di tipo numerico, più avanti si
approfondirà quanto detto.
Non è necessario che i due campi abbiano lo stesso nome, possono
avere nomi diversi, ma devono avere lo stesso tipo di dati (p.e. testo)
e la stessa dimensione (p.e. 20 caratteri).
Bisogna creare espressamente la relazione con gli strumenti di Access,
non è sufficiente avere i due campi. Access non crea automaticamente
una relazione ogni volta che trova due campi con le caratteristiche
dette sopra. Si possono incontrare dei casi in cui ci siano campi con
lo stesso nome, lo stesso tipo di dati, la stessa dimensione, eppure
non ci sia una relazione. Per esempio si pensi a due tabelle, una per
i clienti e una per i fornitori, la maggior parte dei campi corrispondono,
ma non c’è nessuna relazione tra le due tabelle.
Per questo motivo, è necessario creare a mano ogni relazione
definita nella fase di progettazione.
La figura 5.05 mostra come Access visualizzerebbe la relazione dell’esempio.

FIG. 5.05
UN
CASO PARTICOLARE: MOLTI A MOLTI
In fase di progettazione, quando si definisce lo schema della
base di dati, si incontrano tabelle con la relazione di tipo molti a
molti. Ma, questo tipo di relazioni non possono essere create né
con Access, né con altri RDBMS, esistono solo nella seconda fase.
Quando si incontrano relazioni molti a molti, queste devono essere trasformate.
Si deve usare il seguente metodo: considerare la relazione molti a molti
come l’unione di due relazioni, uno a molti e molti a uno (come affermato
nel paragrafo MOLTI A MOLTI). È necessario aggiungere una tabella
in più all’archivio, che memorizzi la relazione in questione.
Infine si devono creare due relazioni tra le tabelle iniziali e quella
nuova. Anche questa volta conviene vedere il tutto con un esempio.
ESEMPIO. Trasformazione relazione molti a molti.
Si vuole rappresentare la relazione tra studenti e corsi, intesi come
materie seguite dagli studenti. Uno studente può seguire più
corsi, un corso può essere seguito da più studenti: la
relazione è molti a molti. In fase di progettazione questo non
è un problema, anzi è la definizione corretta.
La figura 5.06 rappresenta le tabelle Studenti e Corsi, senza la relazione.

FIG. 5.06
È necessario creare la relazione per rispondere a domande del
tipo: “quali corsi segue lo studente Rossi?” “Quali studenti seguono
il corso Analisi I?”.
Per creare una relazione si deve aggiungere un campo nella tabella lato
molti (chiave esterna), il problema è che entrambe le tabelle
in questione sono il lato molti della relazione.
Proviamo ad aggiungere la chiave esterna nella tabella studenti. ERRORE:
il campo Materia, in questo modo, verrebbe a contenere più valori
(vedremo nel prossimo capitolo che non deve succedere), figura 5.07.

FIG. 5.07
Proviamo ad aggiungere la chiave esterna nella tabella corsi. ERRORE:
il campo Matricola contiene più valori, figura 5.08.

FIG. 5.08
Per risolvere questa situazione si deve creare una terza tabella che
memorizzi la relazione. Questa tabella deve contenere le chiavi esterne
delle due relazioni uno a molti (che insieme compongono la relazione
molti a molti). Sarà inoltre in relazione con ognuna delle tabelle
di partenza, rappresenterà sempre il lato molti. Quindi si crea
una nuova tabella con due campi, che sono le chiavi esterne delle tabelle
iniziali.
La chiave primaria della tabella relazione sono le due chiavi esterne
insieme, contemporaneamente. Questo serve per evitare ripetizioni nei
record della relazione.
La figura 5.09 visualizza la tabella relazione, con alcuni record.

FIG. 5.09
Dopo aver creato la nuova tabella, si devono definire due relazioni
uno a molti tra le tabelle iniziali (lato uno) e quella nuova (lato
molti). La figura 5.10 visualizza il risultato finale della trasformazione.

FIG. 5.10
|