In un database relazionale, le relazioni, tra tabelle, possono essere di tre tipi:
- uno a molti;
- uno a uno;
- molti a molti.
Relazione uno a uno
Ciascun record di una tabella può essere associato un solo record di un’altra tabella e viceversa.
Esempio:
un’azienda ha la necessità di distinguere tra dati pubblici dei dipendenti e dati privati. Si crea una tabella per i dati pubblici, a cui possono accedere tutti, e un’altra per quelli privati, ad accesso controllato; infine si lega le due tabelle con una relazione uno a uno definendo in entrambe le tabelle con la stessa chiave primaria.
Relazione uno a molti
Immaginiamo di voler memorizzare su una tabella tutti gli esami sostenuti dagli studenti, ossia un insieme di informazioni del tipo:
Un database strutturato in questo modo non è efficiente. I dati dello studente sono ripetuti più volte, occupando cosi tanto spazio inutile e aumentando la possibilità di errore durante l’inserimento dati.
Per risolvere questa problematica, creiamo una tabella Studenti, contenente solo i dati degli studenti, e una tabella Esami_Di_laurea, in cui ci sono solo i dati relativi agli esami sostenuti ( data, voto, etc) . Queste due tabelle vengono legate con una relazione uno a molti, ossia per ogni studente esistono molti esami sostenuti e per ogni esame sostenuto esiste uno studente. In sql, questo si traduce nel mettere un campo idStudente (id_s) nella tabella Esami_Di_laurea, con una chiave esterna verso studente:
La relazione uno a molti è il tipo più comune di relazione.
Relazione Molti-A-Molti
Ad ogni record di una delle due tabelle coinvolte possono corrispondere più record nell’altra tabella e viceversa.
Riconsiderando l’esempio precedente, si ha la necessita di memorizzare ulteriori informazioni relative ad ogni singola materia d’esame, creiamo, quindi, una tabella MaterieEsame:
Tra le due tabelle non esistono informazioni comuni. Vogliamo creare una relazione che ci dica quali materie ha sostenuto ogni studente; ossia, per ogni materia d’ esame esisteranno molti studenti e, viceversa, per ogni studente esisteranno molte materie.
In altre parole, vogliamo creare una relazione di tipo Molti-A-Molti.
Per realizzare questa relazione creiamo una nuova tabella, chiamata esamiStudenti, che lega gli studenti e le materieDEsame tramite una doppia relazione:
- relazione 1-M tra MaterieDEsame (lato 1) e EsamiStudenti (lato M)
- relazione 1-M tra Studenti (lato 1) e EsamiStudenti(lato M)
La tabella EsamiStudenti di fatto è la relazione di tipo Molti-A-Molti tra Studenti e MaterieDEsame, e avrà le colonne:
Id, IdMat, IdStudente
Ci sarànno due foreign key: una sulla colonna IdMat con materieDEsame e un’altra su IdStudente con la tabella Studente.