Relazioni "molti a molti"
Una relazione "molti a molti" si verifica quando più record in una tabella sono associati a più record in un'altra tabella. Ad esempio, tra clienti e prodotti è presente una relazione "molti a molti": i clienti possono acquistare diversi prodotti e i prodotti possono essere acquistati da diversi clienti.
In genere i sistemi di database relazionali non consentono di implementare una relazione "molti a molti" diretta tra due tabelle. Si consideri l'esempio della gestione delle fatture. Se ci fossero più fatture con lo stesso numero e uno dei clienti chiedesse spiegazioni in merito a quel numero di fattura, non si riuscirebbe a capire a quale starebbe facendo riferimento. Questo è uno dei motivi per cui è necessario assegnare un valore univoco a ogni fattura.
Per evitare questo problema, è possibile scomporre la relazione "molti a molti" in due relazioni "uno a molti" utilizzando una terza tabella, detta tabella associativa. Ogni record in una tabella associativa include un campo di confronto che contiene il valore delle chiavi primarie delle due tabelle che unisce. (Nella tabella associativa, questi campi di confronto sono chiavi esterne). In questi campi chiave esterna i dati vengono inseriti mano a mano che nella tabella associativa vengono creati dei record dalle due tabelle che unisce.
Un esempio tipico di relazione "molti a molti" è quello tra studenti e corsi. Uno studente può iscriversi a più corsi e un corso può avere più studenti.
L'esempio di seguito comprende una tabella Studenti, contenente un record per ogni studente, e una tabella Corsi, contenente un record per ogni corso. Una tabella associativa Iscrizioni crea due relazioni "uno a molti", una per ognuna delle due tabelle.
La chiave primaria ID studente identifica in modo univoco ogni studente nella tabella Studenti. La chiave primaria ID corso identifica in modo univoco ogni corso nella tabella Corsi. La tabella Iscrizioni contiene le chiavi esterne ID studente e ID corso.
Per configurare una tabella associativa per una relazione "molti a molti":
- Utilizzando l'esempio riportato sopra, creare una tabella Iscrizioni. Questa sarà la tabella associativa.
- Nella tabella Iscrizioni, creare un campo ID studente e un campo ID corso.
Le tabelle associative solitamente contengono campi che potrebbe non avere senso inserire in nessuna delle altre tabelle. È possibile aggiungere campi alla tabella Iscrizioni, come un campo Data per tenere traccia di quando uno studente ha iniziato un corso e un campo Costo per tenere traccia di quanto uno studente ha pagato per seguire un corso.
- Creare una relazione tra i due campi ID studente nelle tabelle. Quindi creare una relazione tra i due campi ID corso nelle tabelle.
In questo modo, se uno studente si iscrive a tre corsi, avrà un record nella tabella Studenti e tre record nella tabella Iscrizioni, uno per ogni corso a cui si è iscritto.
Note
- Le tabelle associative possono accedere ai campi e ai dati contenuti nelle tabelle senza dover creare una relazione distinta. Ad esempio, per visualizzare un elenco di tutti i corsi a cui si è iscritto uno studente, creare un portale su un formato basato sulla tabella Studenti. Progettare il portale in modo che mostri i record correlati della tabella Corsi. Quindi aggiungere i campi da Corsi al portale. Scorrendo i record nel formato Studenti, il portale visualizza tutti i corsi a cui un determinato studente è iscritto.