Relazioni Tra Tabelle SQL

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. Nella pratica, questo tipo di relazioni sono poco usate, dato che nella maggior parte dei casi, le informazioni delle due tabelle possono essere contenute in un’unica tabella.

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.

(Visited 54 times, 2 visits today)

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *