Vediamo come risulta fondamentale capire come le tabelle in un database possano essere correlate tra loro. Questo concetto rappresenta uno step fondamentale per utilizzare al meglio i sistemi di Business Intelligence.
Indice operativo: tabelle e Business Intelligence
Relazioni tra tabelle
Breve panoramica sui database
- Relazione One-to-One
- Esempio di relazione One-to-One
- Relazione One-to-many
- Esempio di relazione One-to- many
- Relazione Many-to-many
Relazioni tra tabelle
Le relazioni rappresentano associazioni significative tra tabelle contenenti informazioni correlate e di fatto rappresentano ciò che rende utili i database.
Lavorare senza relazioni tra tabelle di un database equivarrebbe a svolgere attività con diversi fogli di calcolo piuttosto che con un sistema di database unitario.
Breve panoramica sui database
I database sono collezioni di tabelle aventi dei campi (detti anche colonne). Ogni tabella contiene un campo noto come chiave di entità (o chiave primaria), che identifica le righe all’interno della tabella. Per creare una relazione tra le tabelle di interesse, basta “comunicare” al database che i valori chiave di una tabella corrispondono ai valori dell’altra. Una volta create, queste relazioni consentono di eseguire potenti query su diverse tabelle facenti parte dello stesso database. Nel momento in cui la chiave di entità di una tabella viene collegata ad una seconda tabella essa diventa la chiave esterna in questa seconda tabella.
L’identificazione delle connessioni necessarie tra le tabelle fa parte del processo di Data Modelling (Modellazione dei dati) o Schema Design, ovvero del processo che consiste nel capire come i dati si adattano tra loro e come configurare esattamente le tabelle e i campi di pertinenza. Questo processo spesso comporta la creazione di un diagramma delle relazioni tra entità o ERD, una rappresentazione visiva delle tabelle e delle loro relazioni con notazioni diverse che specificano i tipi di relazioni.
Relazioni di tra tabelle
Le relazioni tra le tabelle possono essere di diverso tipo:
One-to-One (Da uno a uno)
One-to-many (Da uno a molti)
Many-to-many (Molti a molti)
Pensare a come le tabelle debbano relazionarsi tra loro aiuta a garantire l’integrità e l’accuratezza dei dati e a ridurre al minimo i dati ridondanti.
Relazione One-to-One
In una relazione One-to-One, un record di una tabella può corrispondere a un solo record contenuto in un’altra tabella (o, in alcuni casi, a nessun record). Questo tipo di relazioni non sono le più comuni, poiché in molti casi è possibile memorizzare informazioni corrispondenti nella stessa tabella. La scelta di suddividere le informazioni in più tabelle dipende dal modello generale dei dati e dalla metodologia di progettazione; se le tabelle sono il più possibile limitate (come in un database normalizzato), le relazioni Uno-a-uno possono essere utili.
1.1 Esempio di relazione One-to-One
Supponiamo che si stiano organizzando le informazioni relative ai dipendenti della propria azienda e che si voglia tener traccia anche del computer di ciascun dipendente. Dato che ogni dipendente potrebbe possedere un solo computer non condivisibile con gli altri colleghi, si potrebbero aggiungere alla tabella denominata “dipendenti” più campi contenenti diverse informazioni come la marca, l’anno e il sistema operativo di ogni computer utilizzato dai dipendenti.
Tuttavia, questo può rivelarsi un pasticcio dal punto di vista semantico visto che le informazioni sui computer non sono ascrivibili, dal punto di vista di coerenza semantica, alla tabella relativa ai dipendenti. La decisione a questo punto spetta a chi crea la tabella. Un’altra opzione possibile potrebbe essere quella di creare una tabella denominata “computer” con una relazione One-to-One con la tabella “dipendenti”, come esplicitato nell’immagine seguente:
Fig. 1. Relazione One-to-One tra tabelle. PK sta per “primary key” o chiave primaria, FK sta per “foreign key” o chiave esterna.
In questo caso, la chiave di entità della tabella “dipendenti” serve come chiave esterna per la tabella “Computers”. Alcuni dei computers aziendali potrebbero non essere ancora stati assegnati ai dipendenti e questa particolare formattazione garantisce il mantenimento dei record nella tabella computer. Inoltre, nel caso in cui un dipendente lasciasse l’azienda, sarà sufficiente aggiornare un solo campo della tabella per collegare facilmente un computer a un nuovo dipendente.
La formattazione esatta delle linee utilizzate per collegare le tabelle in un ERD (nota come notazione a zampa di gallina) varia; a volte si vedranno linee semplici che indicano una relazione Uno-a-uno, altre volte tali linee avranno dei tratteggi incrociati, come nella figura 1.
Le relazioni Uno-a-uno possono essere utili anche per motivi di sicurezza, come nel caso in cui si vogliano memorizzare informazioni sensibili sui clienti in una tabella separata e collegata alla tabella principale “Clienti” con una chiave esterna.
Relazione One–to–many
Le relazioni One-to-many sono il tipo più comune di relazioni tra tabelle in un database. In questo tipo di relazione (talvolta chiamata Many–to–one o Molti-a-uno), un record di una tabella corrisponde a zero, uno o molti record appartenenti ad un’altra tabella.
2.1 Esempio di relazione One–to–many
Ad esempio, si pensi alle tabelle dei clienti e dei loro ordini, come nell’esempio di seguito, dove un record della tabella Persone può essere collegato a molti record della tabella Ordini. In questo caso, un cliente può effettuare molti ordini, e questi record di ordini multipli si collegano tutti a un singolo record della tabella Persone. Questo collegamento è codificato attraverso il campo Utente_ID che è una chiave primaria nella tabella Persone e una chiave esterna nella tabella Ordini.
La figura seguente mostra come queste due tabelle si relazionano tra loro:
Fig. 2. Una relazione One-to-many tra esempi di tabelle “Persone” e “0rdini”
Come è possibile notare, una persona può essere collegata a molti ordini ma non si verifica il contrario: gli ordini sono collegati a un solo record della tabella Persone e non corrispondono a molti clienti.
Relazione Many-to-many (Molti-a-molti)
Una relazione Molti-a-molti indica che più record di una tabella sono collegati a più record di un’altra tabella. Questi record possono essere associati a un solo record (o a nessuno), ma la chiave è che possono e spesso sono collegati a più di uno. Questo tipo di relazioni non sono molto comuni nei casi pratici di utilizzo dei database, poiché l’adesione alla normalizzazione spesso comporta la suddivisione delle relazioni Molti-a-molti in tabelle separate e più specifiche.
In effetti, il sistema di database in possesso potrebbe non consentire la creazione di una relazione diretta Molti-a-molti, ma è sempre possibile aggirare il problema creando una terza tabella, nota come tabella di join, e creando relazioni Uno-a-molti tra questa e le due tabelle di partenza.
In questo senso, la tabella Ordini nel database funge da tabella di unione, creando un collegamento intermedio tra “Persone” e “Prodotti”. Un ERD del database sarebbe simile all’immagine seguente, dove ogni relazione è specificata dal tipo di linea utilizzata per collegare le tabelle:
Fig. 3. Un modello E-R che mostra un esempio di Database
Tecnicamente le tabelle “Prodotti” e “Ordini” hanno una relazione Uno-a-molti, in quanto un prodotto può essere associato a molti ordini. Ma secondo il database della nostra azienda fittizia, le persone sembrano ordinare solo un singolo. Un’implementazione reale (e forse più attenta al business) di questo database probabilmente includerebbe una tabella di join tra i due, in modo che gli ordini possano contenere molti prodotti diversi.