06Ac-Cap03.qxd 24-01-2008 17:47 Pagina 43 3 Oltre le tabelle Chiave primaria Progettare le tabelle di un database Relazioni Join Creare le relazioni Modificare una relazione Eliminare una o tutte le relazioni Report relazioni Fogli dati secondari Dipendenze degli oggetti 06Ac-Cap03.qxd 24-01-2008 17:47 Pagina 44 Access 2007 I Portatili Chiave primaria È importante che i record contenuti all’interno di una stessa tabella si distinguano l’uno dall’altro almeno per il valore di un campo. Il campo, del quale è assicurata l’univocità all’interno di una tabella, prende il nome di Chiave primaria. Una chiave primaria dunque, altro non è che il campo, o la combinazione di campi, che identifica un record di una tabella in modo univoco, ovvero non possono esistere due record con lo stesso valore nel loro campo di chiave primaria. Qualora nessun campo della tua tabella si prestasse al ruolo di chiave primaria, in quanto non è assicurata l’univocità, ne puoi aggiungere uno per lo scopo (per esempio un campo di tipo contatore, che associa a ogni record un numero progressivo). Oppure puoi scegliere una chiave costituita da più campi, in tal caso si parla di chiave composita piuttosto che di chiave semplice. Ora che è un po’ più chiaro il concetto di chiave primaria, andiamo a vedere come si va ad assegnare questo ruolo a un campo. Apri la tabella per la quale vuoi definire un campo di chiave primaria in visualizzazione Struttura. Ti si presenta l’elenco dei campi di cui è costituita la tabella. Posizionati sul campo che deve rappresentare la chiave primaria, quindi, nel riquadro Strumenti della scheda Progettazione, seleziona il pulsante Chiave primaria o scegli l’omonima voce dal menu di scelta rapida che compare premendo il pulsante destro del mouse sul campo. Nel momento in cui un campo diventa Chiave primaria, Access gli associa a sinistra il simbolo di una chiave, in modo tale che possa essere subito individuato (vedi figura 3.1). 44 06Ac-Cap03.qxd 24-01-2008 17:47 Pagina 45 3: Oltre le tabelle Figura 3.1 Simbologia adottata da Access per indicare il campo di chiave primaria in una tabella. Per definire come chiave primaria la combinazione di campi, le procedure sono le medesime, devi però agire solo dopo aver selezionato i campi che concorrono a questo ruolo. Per selezionare campi contigui fai clic sul primo campo, quindi tenendo premuto il tasto MAIUSC fai clic sull’ultimo campo della serie da selezionare. Per selezionare campi non contigui, fai clic sul primo campo, quindi tenendo premuto il tasto CTRL fai clic su tutti gli altri campi che desideri selezionare. Prova pratica: apri la tabella Libri creata all’inizio e assegna al campo IDLibro la funzione di chiave primaria. Svolgimento: ■ apri la tabella Libri in visualizzazione Struttura; ■ posizionati sul campo IDLibro; ■ premi il pulsante Chiave primaria posto nel gruppo Strumenti della scheda Progettazione. Ripeti la stessa operazione per il campo IDOrdine della tabella Ordini. Progettare le tabelle di un database Quando progetti un database devi decidere la suddivisione in tabelle. Ciascuna tabella deve essere tale da contenere informazioni 45 06Ac-Cap03.qxd 24-01-2008 17:47 Pagina 46 Access 2007 I Portatili (campi) relative esclusivamente a un tipo di oggetto, al fine di evitare ridondanze. Che cosa significa? Supponi di voler creare un database per catalogare i libri che possiedi. Tra le varie informazioni a essi associati, desideri vengano riportate anche informazioni riguardanti l’autore. Se crei una sola tabella, nel caso in cui hai più libri scritti da uno stesso autore, le informazioni a esso relative devono essere riportate per ogni suo libro. Cosa che non succederebbe se si progettasse un database con due tabelle: una tabella relativa ai libri e una relativa agli autori. Un altro esempio è quello di un database di una società contenente l’elenco degli ordini effettuati dai diversi clienti. Se si usasse una sola tabella per memorizzare le informazioni relative sia ai clienti che agli ordini, se un cliente effettua più di un ordine (come di solito è e dovrebbe essere), per ciascuno di essi devi ripetere le informazioni relative al cliente. Oltre ad avere informazioni ridondanti, se un cliente cambia un tipo di informazione, sei costretto ad apportare la modifica in tutti i record riguardanti un ordine da lui effettuato. Questo potrebbe essere evitato operando con due tabelle. La tabella Clienti e la tabella Ordini. A questo punto, disponendo i dati in più tabelle distinte, è necessario definire delle relazioni tra queste ultime, in modo tale che i legami tra i dati vengano ristabiliti per rispondere a domande del tipo: Chi è l’autore di un libro? Quale ordine ha effettuato un cliente?. Relazioni I dati contenuti in tabelle diverse possono essere messi in relazione tra loro solo specificando dei campi comuni. Un campo comune è un campo presente in due o più tabelle che consente di unire le informazioni dei record di una tabella con quelle 46 06Ac-Cap03.qxd 24-01-2008 17:47 Pagina 47 3: Oltre le tabelle contenute nei record di un’altra tabella: tale campo prende il nome di Chiave primaria in una tabella, Chiave esterna nell’altra. Per esempio le tabelle Libri e Autori potrebbero entrambe contenere un campo IDLibro che funziona come chiave primaria per la tabella Libri e come chiave esterna per la tabella Autori. In questo modo posso avere informazioni sia sul libro che sull’autore che l’ha scritto. Una volta individuato il campo comune, per mezzo del quale mettere in relazione le tabelle, il compito successivo è quello di esprimere la natura di questa relazione. I tipi di relazioni che possono essere stabilite tra le tabelle sono: ■ ■ ■ uno a uno: a un record della tabella primaria corrisponde un solo record della tabella correlata e viceversa (caso in cui possiedo libri scritti da un solo autore, e per ogni autore possiedo solo un libro); uno a molti: a ogni record di una tabella corrisponde uno o più record di una seconda tabella, ma a ciascun record di questa ultima corrisponde un solo record della prima (caso in cui possiedo libri scritti da un solo autore ma di uno stesso autore ho acquistato più libri). In questo caso la tabella Libri si trova dalla parte “uno” della relazione, mentre la tabella Autori si trova dalla parte “molti”. Un altro esempio di relazione uno a molti è quello delle tabelle Clienti e Ordini: un cliente può effettuare più ordini, un ordine è effettuato da un solo cliente; molti a molti: ogni record di una tabella corrisponde a più record nella seconda tabella e viceversa (caso in cui possiedo libri scritti da più autori e di uno stesso autore ho acquistato più libri). Non potendo essere rappresentate direttamente relazioni di questo tipo, hai bisogno di creare una terza tabella, che faccia da intermediaria tra le due (chiamata tabella di congiunzione), contenente due chiavi esterne, una per ogni tabella, e con la quale entrambe le tabelle sono in rapporto uno a molti. In una relazione si parla anche di integrità referenziale: questo è un concetto che garantisce che ogni valore inserito in una colonna chia- 47 06Ac-Cap03.qxd 24-01-2008 17:47 Pagina 48 Access 2007 I Portatili ve esterna corrisponda a un valore esistente nella colonna chiave primaria correlata. Ovvero tutti i valori di una chiave esterna, devono possedere un equivalente nella chiave primaria. Join Tra due tabelle collegate puoi definire il tipo di join. La parola join significa congiunzione, legame, unione. Il tipo di join indica il tipo di legame che vuoi ottenere tra le tabelle collegate. Esistono tre tipi di join (naturalmente la condizione a priori perché sussista un legame, è che sia presente un legame tra le tabelle che sappiamo essere la presenza di una chiave primaria di una tabella come chiave esterna in un’altra tabella). Join interno o inner join o equi-join: con questo tipo di join, qualora selezioni, mediante una query due tabelle poste in relazione, verrebbero selezionati solo i record che hanno, nei campi collegati, i valori uguali: in poche parole di entrambe le tabelle vengono considerati unicamente i record che hanno lo stesso valore nei campi collegati. Join esterno sinistro o left join: vengono selezionati tutti i record della tabella posta sul lato sinistro della relazione e solo quelli che hanno il valore del campo di collegamento uguale nella tabella del lato destro. Con una join di questo tipo è possibile che il valore in uno dei due campi correlati non compaia nell’altra, in questo caso avrai righe vuote. La selezione contiene tutte le righe della prima tabella anche quelle per cui non esiste corrispondenza nella seconda. Join esterno destro o right join: l’inverso della precedente; vengono selezionati tutti i record della tabella destra e solo quelli collegati (con valore uguale nel campo di collegamento) della tabella di sinistra. Nella maggior parte dei casi l’opzione di base è la prima, cioè il join interno. Per definire il tipo di join utilizza l’omonimo pulsante posto sulla finestra di dialogo Modifica relazione. In questo modo accedi a una ulteriore finestra visualizzata in figura 3.2. 48 06Ac-Cap03.qxd 24-01-2008 17:47 Pagina 49 3: Oltre le tabelle Le tre opzioni presentate corrispondono esattamente ai tre possibili tipi di join. Figura 3.2 Finestra di dialogo Proprietà join. Creare le relazioni Perché sia possibile la creazione di una relazione tra due tabelle, è necessario che in tali tabelle siano disponibili campi abbinabili. Il campo della chiave primaria nella tabella primaria (il lato “uno” della relazione) è infatti correlato a un campo che ha un valore corrispondente nella tabella correlata (il lato “molti”). Se hai verificato la sussistenza di tale condizione, puoi procedere alla creazione della relazione, nel modo descritto qui di seguito: ■ ■ attiva la scheda Strumenti DB, nel gruppo Mostra/Nascondi fai clic sull’icona Relazioni. Si apre la finestra di dialogo Relazioni, una sorta di “piano di lavoro” sul quale dovrai disporre le tabelle per le quali desideri definire una relazione; se non hai ancora selezionato una tabella, si aprirà la finestra di dialogo Mostra tabella (vedi figura 3.3) strutturata in tre schede. Se tale finestra non compare procedi in uno dei modi che seguono per richiamarla: ■ ■ seleziona il pulsante Mostra tabella dal gruppo Relazioni della scheda Struttura; fai clic con il pulsante destro del mouse nella finestra Relazioni, dal menu di scelta rapida così richiamato seleziona Mostra tabella; 49 06Ac-Cap03.qxd 24-01-2008 17:47 Pagina 50 Access 2007 I Portatili Figura 3.3 Finestra di dialogo Mostra tabelle. ■ nella scheda Tabelle trovi l’elenco di tutte le tabelle presenti nel database. Seleziona quella a cui sei interessato, quindi premi il pulsante Aggiungi, per aggiungerla al piano di lavoro. Per ogni tabella aggiunta, nella finestra Relazioni, vengono mostrati gli elenchi dei campi delle tabelle (figura 3.4); Figura 3.4 Finestra Relazioni. 50 06Ac-Cap03.qxd 24-01-2008 17:47 Pagina 51 3: Oltre le tabelle ■ ■ una volta terminato l’inserimento delle tabelle, puoi chiudere la finestra Mostra Tabelle, agendo sul pulsante Chiudi. Quello che devi fare ora è stabilire le relazioni; nella finestra Relazioni, seleziona il campo di chiave primaria nella tabella primaria e, tenendo premuto il pulsante del mouse, trascinalo sul campo chiave esterna della tabella correlata. Non appena lasci il pulsante del mouse, si apre la finestra di dialogo Modifica relazioni mostrata in figura 3.5. Figura 3.5 Finestra di dialogo Modifica relazioni. In tale finestra vengono mostrate le tabelle coinvolte nella relazione: nella casella Tabella/query è presente il nome della tabella primaria, nella casella Tabella/query correlata è presente il nome della tabella correlata. Sotto ciascuna, si trova il nome del campo coinvolto nella relazione. ■ Seleziona la casella di controllo Applica integrità referenziale se vuoi che Access, ogni volta che inserisci un valore nel campo di chiave esterna, verifichi che nella tabella con la chiave primaria corrispondente esista un record con chiave equivalente. Nel nostro esempio per ogni IDLibro della tabella Autori, verifica che nella tabella Libri esista un record con un ID equivalente. In questo caso l’integrità referenziale ci garantisce di evitare la registrazione di un autore relativo a un libro inesistente. Attivando la 51 06Ac-Cap03.qxd 24-01-2008 17:47 Pagina 52 Access 2007 I Portatili casella relativa all’integrità referenziale, vengono abilitate altre due caselle: ■ ■ Aggiorna i campi correlati a catena: attivando questa casella di controllo, sei sicuro che qualsiasi modifica del valore della chiave primaria si rifletterà anche sulla chiave esterna. Tieni presente che tale principio non vale nel caso in cui la chiave primaria sia un campo contatore, poiché questo tipo di campi non accetta modifiche; Elimina i record correlati a catena: attivando questa casella di controllo, sei sicuro che l’eliminazione di qualsiasi record nella tabella primaria porterà automaticamente all’eliminazione dei record corrispondenti nella tabella secondaria. In altre parole, se elimini un libro dalla tabella Libri, elimini l’autore che l’ha scritto. Nel riquadro in fondo della finestra, è riportato il tipo della relazione. Tornando alla finestra relazioni, la relazione appena creata sarà rappresentata da una linea che unisce le due tabelle. Prova pratica: crea una relazione tra la tabella Clienti e la tabella Ordini, tenendo presente che un cliente può effettuare più ordini, un particolare ordine è effettuato da un solo cliente. Svolgimento: ■ ■ ■ ■ 52 attiva la scheda Strumenti DB, nel riquadro Mostra/Nascondi fai clic sull’icona Relazioni; nella finestra Mostra tabelle seleziona la tabella Ordini e premi Aggiungi, quindi ripeti i passaggi per la tabella Clienti (la tabella Libri per ora non ti serve); chiudi la finestra Mostra tabelle premendo il pulsante Chiudi in alto a destra o il pulsante Chiudi; nella finestra Relazioni seleziona il campo IDCliente della tabella Clienti e trascinalo sulla tabella Ordini, sull’omonimo campo. Si apre la finestra Modifica relazioni; 06Ac-Cap03.qxd 24-01-2008 17:47 Pagina 53 3: Oltre le tabelle ■ seleziona la casella di controllo Applica integrità referenziale e premi OK. La finestra Relazioni si presenta come nella figura 3.6. Figura 3.6 Rappresentazione della relazione definita tra la tabella Clienti e la tabella Ordini. E se io volessi mettere in relazione gli ordini con i libri? Trattandosi di una relazione di tipo molti a molti, non possono essere messe in relazione direttamente, è necessario creare una tabella di congiunzione. Chiama tale tabella Dett_Ordini, inserisci al suo interno i campi IDLibro, IDOrdine e Quantità, con i primi due campi definiti come Chiave primaria. A questo punto puoi collegare tra loro tutte le 4 tabelle di cui disponi. La finestra Relazioni risulta come illustrato in figura 3.7. Figura 3.7 Finestre Relazioni per il database di esempio. 53 06Ac-Cap03.qxd 24-01-2008 17:47 Pagina 54 Access 2007 I Portatili Un modo alternativo per creare una relazione, è richiamare la finestra di dialogo Modifica relazione, facendo doppio clic in qualunque area della finestra relazioni. In tale finestra scegli Crea nuova per aprire la finestra di dialogo Crea nuovo oggetto dalla quale puoi procedere alla scelta delle tabelle che devi mettere in relazione, specificando i campi che le legano (figura 3.8). Figura 3.8 Finestra per la creazione di una nuova relazione tra le tabelle. Se desideri attenerti agli esempi e alle prove di questo libro, compila la tabella Dett_Ordini e la tabella Libri con le informazioni riportate nell’appendice B. Modificare una relazione Per modificare una relazione devi riaprire la finestra Modifica relazione. A tale scopo procedi in uno dei seguenti modi: ■ ■ 54 fai doppio clic sulla linea che collega le due tabelle; seleziona Modifica relazione dal menu di scelta rapida che compare se premi il pulsante destro del mouse dopo esserti posizionato sulla linea che rappresenta la relazione; 06Ac-Cap03.qxd 24-01-2008 17:47 Pagina 55 3: Oltre le tabelle ■ scegli Modifica relazione dal riquadro Strumenti della scheda contestuale Struttura. Apporta le modifiche che desideri, quindi premi OK (e non Crea come nel caso precedente). Eliminare una o tutte le relazioni Per qualunque motivo tu abbia bisogno di eliminare una relazione, procedi in uno dei seguenti modi: ■ ■ fai clic sulla relazione che desideri eliminare con il pulsante destro del mouse, quindi scegli Elimina dal menu di scelta rapida; seleziona la relazione, quindi premi CANC. Access ti chiederà di confermare l’eliminazione: premi Sì per procedere. Se invece di eliminare una sola relazione, vuoi eliminarle tutte e ricominciare dall’inizio, utilizza il pulsante Cancella layout nel gruppo Strumenti della scheda Struttura. Procedendo in questa maniera l’area di lavoro relativa alle relazioni viene completamente ripulita: sei pronto per ripartire dall’inizio. Report relazioni Una volta trovata la soluzione giusta, non appena hai terminato di definire le relazioni tra le diverse tabelle, puoi procedere alla stampa del layout che le visualizza, in modo tale da poterlo poi stampare e avere sempre a portata di mano, o addirittura fornirlo a colleghi di lavoro. A tal fine devi prima generare un report che mostra le relazioni esattamente come sono state create: premi il pulsante Report relazioni nel gruppo Strumenti della scheda Struttura per farlo comparire (vedi figura 3.9). Procedi alla sua stampa premendo il pulsante Stampa nell’omonimo gruppo della scheda Anteprima di stampa. Se vuoi conservarlo per un eventuale riutilizzo premi il pulsante 55 06Ac-Cap03.qxd 24-01-2008 17:47 Pagina 56 Access 2007 I Portatili Salva posto sulla barra di accesso rapido. Nella finestra di dialogo che si apre digita il nome che desideri assegnargli. Per visualizzare il report in modalità Struttura premi il pulsante Chiudi anteprima di stampa nell’omonimo gruppo sempre della scheda Anteprima di stampa. Puoi intervenire sul report appena creato esattamente come se fosse un report come tutti gli altri (dei quali parleremo in maniera approfondita nel capitolo 6). Premi il pulsante Chiudi finestra per chiuderlo e tornare alla finestra delle relazioni. Figura 3.9 Report relazioni. Fogli dati secondari Quando metti in relazione uno a molti due tabelle, aprendo la tabella primaria (dal lato “uno” della relazione) in visualizzazione Foglio dati, noterai che Access ha apportato delle modifiche. Più precisamente a sinistra del campo di chiave primaria, è apparsa una colonna aggiuntiva, composta di segni +. Facendo clic su tale segno, si apre il foglio dati secondario, un foglio che contiene dati in relazione con il record sul quale abbiamo operato, contenuti nella tabella correlata. Nel nostro caso, per esempio, per ogni riga della tabella Clienti, appare in tale foglio secondario l’elenco degli ordini, come mostrato in figura 3.10. 56 06Ac-Cap03.qxd 24-01-2008 17:47 Pagina 57 3: Oltre le tabelle Figura 3.10 Visualizzazione Foglio dati per una tabella dal lato uno di una relazione uno-a-molti. In un foglio dati secondario non solo puoi visualizzare i dati in relazione con la metà “Uno”, ma li puoi anche modificare. Dipendenze degli oggetti Un database Access contiene spesso fogli con fogli dati secondari, maschere con sottomaschere, anche a tre livelli, o delle query basate su altre query. Access 2007 ti mette a disposizione il comando Dipendenze oggetti che permette di estrapolare tutti gli oggetti (tabelle, query, maschere o report) che dipendono da quello su cui stai operando. Puoi valutare le dipendenze di un elemento scegliendo Dipendenze oggetti dal gruppo Mostra/Nascondi della scheda Strumenti database. 57 06Ac-Cap03.qxd 24-01-2008 17:47 Pagina 58 Access 2007 I Portatili Appare il riquadro Dipendenze oggetti nel quale trovi gli oggetti raggruppati per tipo, che dipendono dall’elemento selezionato. Nel nostro esempio, al punto in cui siamo del progetto, se esaminiamo la tabella Clienti, essendo essa in relazione con la tabella Ordini, scegliendo la voce Dipendenze oggetti appare, tra le tabelle in relazione con essa, proprio la tabella Ordini (vedi figura 3.11). Quando apporti una modifica (per esempio quando cancelli e/o rinomini un oggetto di un database), dovresti conoscere quali oggetti dipendono dall’oggetto che è stato modificato per apportare anche a questo le modifiche. Con Access 2007 l’aggiornamento degli oggetti che coinvolgono l’elemento modificato è automatica. Figura 3.11 Riquadro relativo alle dipendenze degli oggetti. Per essere sicuro che il riquadro Dipendenze oggetti rifletta la situazione attuale, fai clic sul collegamento Aggiorna presente in alto a destra. 58