5.2.4.1
Creare una relazione uno-a-uno, uno-a-molti tra tabelle
5.2.4.2
Cancellare relazioni fra 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
Le relazioni fra tabelle possono essere di natura diversa, a seconda del grado del verso dell’associazione.
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
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
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