Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
Annotazioni
Principiante: richiede la conoscenza dell'interfaccia utente nei computer a utente singolo. Questo articolo si applica solo a un database di Microsoft Access (.mdb o accdb).
Riassunto
Questo articolo descrive come definire le relazioni in un database di Microsoft Access. L'articolo include:
- Che cosa sono le relazioni tra tabelle?
- Tipi di relazioni tra tabelle
- Relazioni uno-a-molti
- Relazioni molti-a-molti
- Relazioni uno a uno
- Come definire relazioni tra tabelle
- Come definire una relazione uno-a-molti o uno-a-uno
- Come definire una relazione molti-a-molti
- Integrità referenziale
- Aggiornamenti ed eliminazioni a catena
- Tipi di join
Che cosa sono le relazioni tra tabelle?
In un database relazionale le relazioni consentono di evitare dati ridondanti. Ad esempio, se si progetta un database che tiene traccia delle informazioni sui libri, potrebbe essere presente una tabella denominata "Titoli" che archivia informazioni su ogni libro, ad esempio il titolo del libro, la data di pubblicazione e l'editore. È anche possibile archiviare informazioni sull'editore, ad esempio il numero di telefono, l'indirizzo e il codice postale dell'editore. Se si archiviano tutte queste informazioni nella tabella "Titoli", il numero di telefono dell'editore verrà duplicato per ogni titolo stampato dall'editore.
Una soluzione migliore consiste nell'archiviare le informazioni dell'editore una sola volta, in una tabella separata denominata "Editori". Inserire quindi un puntatore nella tabella "Titoli" che fa riferimento a una voce nella tabella "Editori".
Per assicurarsi che i dati rimangano sincronizzati, è possibile applicare l'integrità referenziale tra le tabelle. Le relazioni di integrità referenziale consentono di assicurarsi che le informazioni in una tabella corrispondano alle informazioni in un'altra. Ad esempio, ogni titolo nella tabella "Titoli" deve essere associato a un server di pubblicazione specifico nella tabella "Publishers". Non è possibile aggiungere un titolo al database per un editore che non esiste nel database.
Le relazioni logiche in un database consentono di eseguire query sui dati in modo efficiente e creare report.
Tipi di relazioni tra tabelle
Una relazione funziona associando i dati nelle colonne chiave, in genere colonne (o campi) con lo stesso nome in entrambe le tabelle. Nella maggior parte dei casi, la relazione connette la chiave primaria o la colonna dell'identificatore univoco per ogni riga, da una tabella a un campo in un'altra tabella. La colonna nell'altra tabella è nota come "chiave esterna". Se, ad esempio, si vuole tenere traccia delle vendite di ogni titolo del libro, si crea una relazione tra la colonna chiave primaria ,denominata title_ID, nella tabella "Titoli" e una colonna nella tabella "Sales" denominata title_ID. La colonna title_ID nella tabella "Sales" è la chiave esterna.
Esistono tre tipi di relazioni tra tabelle. Il tipo di relazione creato dipende dalla modalità di definizione delle colonne correlate.
Relazioni uno-a-molti
Una relazione uno-a-molti è il tipo di relazione più comune. In questo tipo di relazione, una riga nella tabella A può avere molte righe corrispondenti nella tabella B. Tuttavia, una riga nella tabella B può avere una sola riga corrispondente nella tabella A. Ad esempio, le tabelle "Publishers" e "Titles" hanno una relazione uno-a-molti. Ovvero, ogni editore produce molti titoli. Ma ogni titolo proviene da un solo editore.
Viene creata una relazione uno-a-molti se solo una delle colonne correlate è una chiave primaria o ha un vincolo univoco.
Nella finestra della relazione in Access il lato chiave primaria di una relazione uno-a-molti è indicato da un numero 1. Il lato chiave esterna di una relazione è indicato da un simbolo infinito.
Relazioni molti-a-molti
In una relazione molti-a-molti, una riga nella tabella A può avere molte righe corrispondenti nella tabella B e viceversa. Si crea una relazione di questo tipo definendo una terza tabella denominata tabella di giunzione. La chiave primaria della tabella di collegamento è costituita dalle chiavi esterne della tabella A e della tabella B. Ad esempio, la tabella "Authors" e la tabella "Titles" hanno una relazione molti-a-molti definita da una relazione uno-a-molti da ognuna di queste tabelle alla tabella "TitleAuthors". La chiave primaria della tabella "TitleAuthors" è la combinazione della colonna au_ID (chiave primaria della tabella "Authors") e della colonna title_ID (chiave primaria della tabella "Titles").
Relazioni uno a uno
In una relazione uno-a-uno, una riga nella tabella A non può avere più di una riga corrispondente nella tabella B e viceversa. Viene creata una relazione uno-a-uno se entrambe le colonne correlate sono chiavi primarie o hanno vincoli univoci.
Questo tipo di relazione non è comune, perché la maggior parte delle informazioni correlate in questo modo si troverebbe in una tabella. È possibile usare una relazione uno-a-uno per eseguire le azioni seguenti:
- Dividere una tabella con molte colonne.
- Isolare una parte di una tabella per motivi di sicurezza.
- Archiviare i dati di breve durata e che possono essere facilmente eliminati eliminando la tabella.
- Archiviare le informazioni applicabili solo a un subset della tabella principale.
In Access il lato chiave primaria di una relazione uno-a-uno è indicato da un simbolo di chiave. Anche il lato chiave esterna è indicato da un simbolo di chiave.
Come definire relazioni tra tabelle
Quando si crea una relazione tra tabelle, i campi correlati non devono avere gli stessi nomi. Tuttavia, i campi correlati devono avere lo stesso tipo di dati, a meno che il campo chiave primaria non sia un campo Numerazione automatica. È possibile associare un campo Autonumerico con un campo Numerico solo se la proprietà DimensioneCampo di entrambi i campi corrispondenti è la stessa. Ad esempio, è possibile trovare una corrispondenza tra un campo Numerazione automatica e un campo Numero se la proprietà FieldSize di entrambi i campi è Intero lungo. Anche quando entrambi i campi corrispondenti sono campi Number, devono avere la stessa impostazioneFieldSizeproperty.
Come definire una relazione uno-a-molti o uno-a-uno
Per creare una relazione uno-a-molti o uno-a-uno, seguire questa procedura:
Chiudere tutte le tabelle. Non è possibile creare o modificare relazioni tra tabelle aperte.
In Access 2002 o Access 2003 seguire questa procedura:
- Premere F11 per passare alla finestra Database.
- Scegliere Relazioni dal menu Strumenti.
In Access 2007, Access 2010 o Access 2013 fare clic su Relazioni nel gruppo Mostra/Nascondi nella scheda Strumenti di database .
Se non sono ancora state definite relazioni nel database, verrà visualizzata automaticamente la finestra di dialogo Mostra tabella . Se si desidera aggiungere le tabelle da correlare, ma la finestra di dialogo Mostra tabella non viene visualizzata, scegliere Mostra tabella dal menu Relazioni .
Fare doppio clic sui nomi delle tabelle da correlare e quindi chiudere la finestra di dialogo Mostra tabella . Per creare una relazione tra una tabella e se stessa, aggiungere tale tabella due volte.
Trascinare il campo da correlare da una tabella al campo correlato nell'altra tabella. Per trascinare più campi, premere CTRL, fare clic su ogni campo e trascinarli.
Nella maggior parte dei casi, si trascina il campo chiave primaria (questo campo viene visualizzato in grassetto) da una tabella a un campo simile (questo campo ha spesso lo stesso nome) denominato chiave esterna nell'altra tabella.
Verrà visualizzata la finestra di dialogo Modifica relazioni . Assicurarsi che i nomi dei campi visualizzati nelle due colonne siano corretti. Se necessario, è possibile modificare i nomi.
Impostare le opzioni di relazione, se necessario. Se è necessario disporre di informazioni su un elemento specifico nella finestra di dialogo Modifica relazioni , fare clic sul pulsante punto interrogativo e quindi fare clic sull'elemento. Queste opzioni verranno illustrate in dettaglio più avanti in questo articolo.
Fare clic su Crea per creare la relazione.
Ripetere i passaggi da 4 a 7 per ogni coppia di tabelle da correlare.
Quando si chiude la finestra di dialogo Modifica relazioni , Access chiede se si desidera salvare il layout. Se si salva il layout o non si salva il layout, le relazioni create vengono salvate nel database.
Annotazioni
È possibile creare relazioni non solo nelle tabelle, ma anche nelle query. Tuttavia, l'integrità referenziale non viene imposta attraverso le query.
Come definire una relazione molti a molti
Per creare una relazione molti-a-molti, segui questa procedura:
Creare le due tabelle che avranno una relazione molti-a-molti.
Creare una terza tabella. Questa è la tabella di giunzione. Nella tabella di giunzione aggiungere nuovi campi con le stesse definizioni dei campi chiave primaria di ogni tabella creata nel passaggio 1. Nella tabella di giunzione, i campi della chiave primaria funzionano come chiavi esterne. È possibile aggiungere altri campi alla tabella di giunzione, esattamente come è possibile per qualsiasi altra tabella.
Nella tabella di giunzione impostare la chiave primaria per includere i campi chiave primaria delle altre due tabelle. Ad esempio, in una tabella di giunzione "TitleAuthors", la chiave primaria sarà costituita dai campi OrderID e ProductID .
Annotazioni
Per creare una chiave primaria, seguire questa procedura:
Aprire una tabella in visualizzazione Struttura.
Selezionare il campo o i campi da definire come chiave primaria. Per selezionare un campo, fare clic sul selettore di riga per il campo desiderato. Per selezionare più campi, tenere premuto CTRL e quindi fare clic sul selettore di riga per ogni campo.
In Access 2002 o in Access 2003 fare clic su Chiave primaria sulla barra degli strumenti.
In Access 2007 fare clic su Chiave primaria nel gruppo Strumenti della scheda Progettazione .
Annotazioni
Se si desidera che l'ordine dei campi in una chiave primaria a più campi differisca dall'ordine di tali campi nella tabella, fare clic su Indici sulla barra degli strumenti per visualizzare la finestra di dialogo Indici e quindi riordinare i nomi dei campi per l'indice denominato PrimaryKey.
Definire una relazione uno-a-molti tra ogni tabella primaria e la tabella di giunzione.
Integrità referenziale
L'integrità referenziale è un sistema di regole usate da Access per assicurarsi che le relazioni tra i record nelle tabelle correlate siano valide e che non vengano accidentalmente eliminati o modificati i dati correlati. È possibile impostare l'integrità referenziale quando tutte le condizioni seguenti sono vere:
- Il campo corrispondente della tabella primaria è una chiave primaria o ha un indice univoco.
- I campi correlati hanno lo stesso tipo di dati. Esistono due eccezioni. Un campo Numerazione automatica può essere correlato a un campo Numero con un'impostazione
FieldSize
della proprietà Long Integer e un campo Numerazione automatica con un'impostazioneFieldSize
della proprietà ID replica può essere correlato a un campo Number con un'impostazioneFieldSize
della proprietà ID replica. - Entrambe le tabelle appartengono allo stesso database di Access. Se le tabelle sono tabelle collegate, devono essere tabelle in formato Access ed è necessario aprire il database in cui sono archiviate per impostare l'integrità referenziale. Non è possibile applicare l'integrità referenziale per le tabelle collegate dai database in altri formati.
Quando si usa l'integrità referenziale, si applicano le regole seguenti:
- Non è possibile immettere un valore nel campo chiave esterna della tabella correlata che non esiste nella chiave primaria della tabella primaria. È tuttavia possibile immettere un valore Null nella chiave esterna. Specifica che i record non sono correlati. Ad esempio, non è possibile avere un ordine assegnato a un cliente che non esiste. Tuttavia, è possibile avere un ordine assegnato a nessuno immettendo un valore Null nel campo CustomerID .
- Non è possibile eliminare un record da una tabella primaria se i record corrispondenti esistono in una tabella correlata. Ad esempio, non è possibile eliminare un record dipendente dalla tabella "Dipendenti" se sono presenti ordini assegnati al dipendente nella tabella "Ordini".
- Non è possibile modificare un valore di chiave primaria nella tabella primaria se tale record contiene record correlati. Ad esempio, non è possibile modificare l'ID di un dipendente nella tabella "Dipendenti" se sono presenti ordini assegnati a tale dipendente nella tabella "Ordini".
Aggiornamenti ed eliminazioni a catena
Per le relazioni in cui viene applicata l'integrità referenziale, è possibile specificare se si desidera che Access esegua automaticamente l'aggiornamento a catena o l'eliminazione a catena dei record correlati. Se si impostano queste opzioni, le operazioni di eliminazione e aggiornamento che in genere verrebbero impedite dalle regole di integrità referenziale sono abilitate. Quando si eliminano record o si modificano i valori di chiave primaria in una tabella primaria, Access apporta le modifiche necessarie alle tabelle correlate per mantenere l'integrità referenziale.
Se si fa clic per selezionare la casella di controllo Aggiorna campi correlati a catena quando si definisce una relazione, ogni volta che si modifica la chiave primaria di un record nella tabella primaria, microsoft Access aggiorna automaticamente la chiave primaria al nuovo valore in tutti i record correlati. Ad esempio, se si modifica l'ID di un cliente nella tabella "Clienti", il campo CustomerID nella tabella "Ordini" viene aggiornato automaticamente per ogni ordine del cliente in modo che la relazione non venga interrotta. Accedere a aggiornamenti a catena senza visualizzare alcun messaggio.
Annotazioni
Se la chiave primaria nella tabella primaria è un campo Numerazione automatica, la casella di controllo Aggiorna campi correlati a catena non ha alcun effetto perché non è possibile modificare il valore in un campo Numerazione automatica.
Se si seleziona la casella di controllo Elimina record correlati a catena quando si definisce una relazione, ogni volta che si eliminano i record nella tabella primaria, Access elimina automaticamente i record correlati nella tabella correlata. Ad esempio, se si elimina un record cliente dalla tabella "Clienti", tutti gli ordini del cliente vengono eliminati automaticamente dalla tabella "Ordini". Sono inclusi i record nella tabella "Dettagli ordine" che sono correlati ai record "Ordini". Quando si eliminano record da una maschera o da un foglio dati con la casella di controllo Elimina record correlati a catena selezionata, Access avvisa che è possibile eliminare anche i record correlati. Tuttavia, quando si eliminano record usando una query di eliminazione, Access elimina automaticamente i record nelle tabelle correlate senza visualizzare un avviso.
Tipi di join
Esistono tre tipi di join. È possibile visualizzarli nella schermata seguente:
L'opzione 1 definisce un "inner join". Un inner join è un join in cui i record di due tabelle vengono combinati nei risultati di una query solo se i valori nei campi uniti soddisfano una condizione specificata. In una query, il join predefinito è un inner join che seleziona i record solo se i valori nei campi uniti corrispondono.
L'opzione 2 definisce una giunzione esterna sinistra. Un left outer join è un join in cui tutti i record dal lato sinistro dell'operazione LEFT JOIN nell'istruzione SQL della query vengono aggiunti ai risultati della query, anche se non sono presenti valori corrispondenti nel campo unito dalla tabella a destra.
L'opzione 3 definisce un right outer join. Un right outer join è un join in cui tutti i record dal lato destro dell'operazione RIGHT JOIN nell'istruzione SQL della query vengono aggiunti ai risultati della query, anche se non sono presenti valori corrispondenti nel campo unito dalla tabella a sinistra.