5.2.1 Relazioni tra tabelle   1

5.2.4.1 Creare una relazione uno-a-uno, uno-a-molti tra tabelle  9

Il grado di un verso di un’associazione indica quanti record della tabella di partenza si associano ad un record della tabella di arrivo. 9

5.2.4.2 Cancellare relazioni fra tabelle  23

5.2.4.3 Applicare una o più regole ad una relazione tali che i campi coinvolti nella relazione non possono essere cancellati finché esistono dati che collegano le tabelle. 25

 

5.2.1 Relazioni tra tabelle

In un database complesso risulta spesso più conveniente suddividere le informazioni fra più tabelle. Vediamo il seguente esempio

Esso contiene informazioni su oggetti venduti all’asta. La tabella Oggetti

contiene informazioni quali il prezzo attuale, il prezzo di vendita, ecc. Vorremo che ad ogni oggetto venduto venissero associate anche informazioni circa il venditore dell’oggetto e il cliente che lo ha acquistato. Preferiamo, però, porre le informazioni relative al cliente in una tabella a parte

e le informazioni sul venditore in un’altra tabella

Ora le informazioni sugli oggetti contenuti nella prima tabella vanno associate alle informazioni sul cliente contenute nella seconda tabelle e a quelle sul venditore contenute nella terza tabella. Come può apparire intuitivo, pensando ad un esempio di un archivio cartaceo, l’associazione si ha se nella tabella Oggetto vi è un campo che contiene un codice che identifica il cliente

Naturalmente vi deve essere lo stesso codice nella tabella Cliente che identifica in maniera univoca il cliente

Naturalmente, come appare ovvio, il codice cliente deve essere univoco, cioè due clienti non possono avere lo stesso codice.

In maniera analoga possiamo collegare le informazioni sugli oggetti e quelle sui venditori, ponendo nella tabella Oggetti un campo che contiene un codice di riferimento al venditore

Tale codice dovrà avere il suo corrispondente in un campo codice venditore nella tabella corrispondente

5.2.4.1 Creare una relazione uno-a-uno, uno-a-molti tra tabelle

Le relazioni fra tabelle possono essere di natura diversa, a seconda del grado del verso dell’associazione.

Il grado di un verso di un’associazione indica quanti record della tabella di partenza si associano ad un record della tabella di arrivo.

Cerchiamo di spiegarci con un esempio. Nel nostro database, come appare logico, un singolo venditore può aver venduto più oggetti, mentre un singolo oggetto non può essere venduto da più venditori. La relazione che lega la tabella Vendite e la tabella Oggetti è allora del tipo uno-a-molti: un solo venditore è associato a più oggetti.

Come conseguenza logica, si ha che il codice venditore nella tabella Vendite deve essere univoco (indice che non ammette duplicati o chiave primaria), per cui non vi possono essere più record con lo stesso valore nel campo corrispondente al codice (Venditore ID nel nostro caso)

Il campo corrispondente al codice del venditore non deve essere invece univoco nella  tabella Oggetti. Più record corrispondenti ad oggetti diversi potranno contenere lo stesso campo venditore poiché possono essere stati venduti dalla stessa persona

Per creare una relazione, dobbiamo naturalmente informare il nostro computer circa le tabelle da collegare. Occorre far riferimento al menu Strumenti

e pi al comando Relazioni

Appare la seguente finestra che mostra le tabelle presenti nel database e i loro campi

Lo stesso comando si può attivare con il pulsante omonimo della barra

Per creare una relazione fra la tabella Oggetti e la tabella Vendite basta selezionare il campo che identifica il venditore nella tabella Oggetti e trascinarlo sul campo che identifica il venditore nella tabella Vendite, oppure viceversa. Si apre la seguente finestra

Come si può notare, il programma Access, avendo notato che il campo Venditore ID è una chiave primaria nella tabella Vendite (quindi è univoco) mentre il campo corrispondente nella tabella Oggetti non è univoco, stabilisce automaticamente che la relazione deve essere uno-a-molti dalla tabella Vendite alla tabella Oggetti.

Se, nella fase di creazione della relazione chiedo ad Access di applicare L’integrità referenziale, selezionando la corrispondente opzione

Access, nella finestra Relazioni indica anche il tipo della relazione

Un altro tipo di relazione è quello uno-ad-uno. In questo caso ogni record della prima tabella deve essere associato ad uno solo record della seconda tabella. Nel nostro database di esempio, una relazione di questo tipo si può avere fra la tabella Vendite e la tabella Dati privati che contiene informazioni personali su ogni venditore. E’ evidente che ad un venditore corrisponde un solo record di dati personali. I campi che collegheranno le due tabelle devono essere univoci in entrambe.

Il metodo per creare la relazione è il medesimo. Ancora una volta Access sarà in grado di stabilire da solo il tipo di relazione da creare. Supponiamo in un primo momento che il campo codice nella tabella Dati personali non sia univoco

quando andiamo a creare la relazione, Access le assegnerà il tipo uno-a-molti nel verso dalla tabella Vendite alla tabella Dati privati

Se, però, rendiamo univoco il campo chiave nella tabella Dati privati, facendolo diventare, ad esempio, chiave primaria

e proviamo a creare la relazione, Access la stabilirà di tipo uno-a-uno

5.2.4.2 Cancellare relazioni fra tabelle

Per cancellare una relazione esistente fra due tabelle basta selezionare il collegamento che rappresenta graficamente la relazione e cliccare su di esso con il tasto destro del mouse

nel menu che appare si seleziona poi il comando Elimina

In maniera alternativa si può utilizzare il comando Elimina dal menu Modifica

5.2.4.3 Applicare una o più regole ad una relazione tali che i campi coinvolti nella relazione non possono essere cancellati finché esistono dati che collegano le tabelle.

Come si può intuire, è teoricamente possibile che l’utente stabilisca relazioni fra tabelle che non abbiano però senso, come nell’esempio seguente in cui si è associato il campo contenente il nome dell’oggetto al campo cognome del venditore

Per evitare gli errori più grossolani si può impostare l’integrità referenziale quando si crea una relazione.

L'integrità referenziale è un sistema di regole utilizzate per assicurare che le relazioni tra i record delle tabelle correlate siano valide e che non vengano eliminati o modificati per errore i dati correlati.

Innanzitutto i campi da collegare devono essere dello stesso tipo. Unica eccezione è costituita dalla possibilità di stabilire una relazione collegando un campo di tipo contatore ed un campo di tipo numerico, formato intero lungo.

Supponiamo, ad esempio, che il campo codice venditore nella tabella Oggetti sia di tipo testo

mentre il campo Venditore ID nella tabella Vendite è di tipo contatore

se proviamo a creare una relazione applicando l’integrità referenziale otteniamo un messaggio di errore

Quando si applica l’integrità referenziale si possono impostare due opzioni ulteriori

La prima opzione è “Aggiorna campi correlati a catena”.

Questa opzione fa in modo che, quando modifichiamo nella tabella di partenza, il valore di un campo associato in una relazione, tale modifica si propagherà anche ai campi associati nelle tabelle collegate. Facciamo un esempio. Innanzitutto modifichiamo il campo Cliente ID nella tabella Cliente in tipo numerico in modo da poterlo impostare a nostro piacimento

Creiamo ora una relazione fra la tabella clienti e la tabella Oggetti, applicando le opzioni su accennate

Supponiamo di voler modificare il codice identificativo del cliente finora identificato col numero 24 in 240

Dovremmo ora modificare tutti i record della tabella Oggetti che fanno riferimento a quel cliente ma ci accorgiamo che questo compito è stato già svolto in automatico da Access, grazie all’opzione che avevamo impostato prima

Intuitiva è la funzione dell’ultima opzione

Supponiamo di voler eliminare, nella tabella Clienti, il cliente contrassegnato dal numero 21. Non avrebbe senso lasciare nella tabella Oggetti due record che fanno riferimento a tale cliente