Informativa:
questo sito o gli strumenti terzi da questo utilizzati si avvalgono di cookie necessari al funzionamento ed utili alle finalit� illustrate nella cookie policy. Se vuoi saperne di pi� o negare il consenso a tutti o ad alcuni cookie, consulta la cookie policy. Cliccando su "OK" acconsenti all�uso dei cookie.
OK
 torna all'home page
 
  Spazio Culturale
 
MANUALI

accesso diretto
 OFFICE
   access2000
   excel2000
   word2000
   backup
   virus
 TOOLS
   harddisk
   registry
   winzip
   dos
 WEB
   flash5
percorso:: _Home > _Manuali > _ACCESS2000 > _Capitolo 05
 fine testo aumenta dimensioni testo diminuisci dimensioni testo informazioni indice manuale ACCESS2000
     Manuale ACCESS2000
05    RELAZIONI    
 aggiungi ai preferiti

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


     Manuale ACCESS2000
05     RELAZIONI    
 
 inizio testo aumenta dimensioni testo diminuisci dimensioni testo informazioni indice manuale ACCESS2000
 
 
Pubblicità  
 
Applicazioni iPhone















Condizioni d'uso | Informativa Privacy e Cookie Policy | Crediti
Copyright©2005 tutti i contenuti sono proprietà esclusiva di ManualiPc.it

 
Manualipc - Via Casette 13 - Saletto di Breda - 31030 Treviso, Italy - tel. 0422.98135 - email info@manualipc.it - P.I. 03687860266