Oltre le tabelle

Transcript

Oltre le tabelle
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