Cardinalità e integrità referenziale

La configurazione di un’origine dati, indipendentemente dal modo in cui si combinano i dati, richiede la comprensione della struttura dei dati di ogni tabella e di come possono essere combinati. Vi sono diversi elementi chiave che dovrebbero essere considerati: 

  • Livello di dettaglio: quanto sono dettagliati i dati, ovvero la loro granularità. Equivale a rispondere alla domanda: "cosa definisce una riga?". Per maggiori informazioni sulla granularità, consulta Strutturare i dati per l’analisi
  • Campo condiviso: deve essere presente almeno un campo utilizzabile per formare il collegamento tra le tabelle. Per un join, questi campi definiscono la clausola di join. Nelle tabelle correlate stabiliscono la relazione.
  • Cardinalità: quanti valori univoci esistono per il campo condiviso (univocità). Per maggiori informazioni, vedi la sezione seguente.
  • Integrità referenziale: un valore in una tabella ha sicuramente una corrispondenza nell’altra tabella. In altre parole, non può essere presente un record in una tabella che non ha un record corrispondente nell’altra tabella. Per maggiori informazioni, vedi di seguito.

Cardinalità

La cardinalità in una singola colonna o un campo si riferisce all’univocità dei relativi valori. Una bassa cardinalità indica che sono presenti solo pochi valori univoci (ad esempio, in un campo per il colore degli occhi). Un’alta cardinalità indica che sono presenti molti valori univoci (ad esempio, in un campo per i numeri di telefono).

La cardinalità tra tabelle è simile, ma si riferisce al fatto che una riga di una tabella potrebbe essere collegata a più righe di un’altra tabella. È importante ricordare che la cardinalità non tiene conto degli eventuali dati mancanti nelle tabelle. La presenza o l’assenza di dati mancanti è l’integrità referenziale. Sebbene questi concetti operino insieme, sono due attributi diversi della relazione.

Le opzioni sono uno-a-uno, uno-a-molti, molti-a-uno o molti-a-molti.

Uno-a-uno

  • Definizione: ogni valore del campo condiviso in una tabella è correlato al massimo a un valore nel campo condiviso nell’altra tabella. 
  • Abbreviazione: 1:1

Esempio: ogni auto ha la propria targa e una targa è specifica per una singola auto. La relazione tra le auto e le targhe è di tipo uno-a-uno.

Tieni presente che se un’auto non è registrata o un numero di targa non è ancora stato assegnato a un’auto, tale discrepanza è descritta dall’integrità referenziale. Un’auto può avere una sola targa e una targa può essere assegnata a una sola auto, quindi la cardinalità rimane uno-a-uno.

 

Uno-a-molti o molti-a-uno

  • Definizione: ogni valore del campo condiviso in una tabella può essere correlato a più righe dell’altra tabella (il valore è ripetuto nell’altra tabella).
  • Abbreviazione: m:1 o 1:m
  • L’ordine delle tabelle determina se di tratta di una relazione molti-a-uno o uno-a-molti (simile ai join sinistro e destro).

Esempi: molti dipendenti hanno lo stesso manager. La relazione tra i dipendenti e il manager è di tipo molti-a-uno. La relazione tra il manager e i dipendenti è di tipo uno-a-molti.

 

Molti-a-molti

  • Più valori del campo condiviso in una tabella possono essere correlati a più righe nell’altra tabella (i valori del campo condiviso possono essere ripetuti in più righe in entrambe le tabelle).
  • Abbreviato in m:m.
  • Questa è l’impostazione predefinita se non vengono rilevate altre impostazioni nell’origine dati.

Esempi: un attore compare in molti film e un film è interpretato da molti attori. La relazione tra attori e film è di tipo molti-a-molti. Più libri possono essere acquistati nella stessa transazione e un libro può essere acquistato più volte. La relazione tra codici ISBN e ID ordine è di tipo molti-a-molti.

 

La cardinalità può essere specificata nelle impostazioni delle opzioni per le prestazioni. Per maggiori informazioni, consulta Ottimizzare le query di relazione utilizzando le opzioni per le prestazioni.

Integrità referenziale

Esiste un concetto correlato denominato integrità referenziale, che indica che una riga in una tabella avrà sempre una riga corrispondente nell’altra tabella, come determinato dal valore dei campi condivisi. Se il database non contiene record per auto senza targhe o targhe senza auto, tale relazione dispone di integrità referenziale.

In Tableau, l’integrità referenziale è configurata su ciascun lato della relazione. Nelle impostazioni delle opzioni per le prestazioni, il messaggio Alcuni record corrispondono indica che l’integrità referenziale non è presente (o non si sa se è presente). Tutti i record corrispondono indica che è presente l’integrità referenziale. L’impostazione predefinita è di non presupporre l’integrità referenziale (Alcuni record corrispondono).

Per maggiori informazioni, consulta Ottimizzare le query di relazione utilizzando le opzioni per le prestazioni.

Mettiti alla prova

Sei in grado di definire la cardinalità e l’integrità referenziale per ogni diagramma? Che cosa significa in termini descrittivi? 

Esempio:

 

Se abbiamo impostato la tabella di sinistra come libri e la tabella di destra come autori collegati in base ad AuthorID, traduci il diagramma in termini descrittivi: 

  • Un libro può avere più autori (i record viola mostrano una riga nella tabella dei libri a sinistra corrispondente a più record nella tabella degli autori a destra).
  • Nessun autore ha più di un libro (ogni record di un autore a destra è correlato a un solo libro a sinistra).
  • Non sono presenti libri senza autori (non esiste alcun record a sinistra che non abbia un record corrispondente a destra).
  • Alcuni autori potrebbero non avere libri (il record dell’autore grigio a destra non ha un record di un libro corrispondente a sinistra).

Fai clic su ogni sezione seguente per espanderla.

Verifica le tue conoscenze

Soluzione

Perché è importante?

La corretta configurazione delle impostazioni di cardinalità o integrità referenziale può migliorare le prestazioni attraverso l’ottimizzazione delle query. Configurazioni errate possono tuttavia portare a problemi di aggregazione dovuti alla perdita o alla duplicazione dei dati. Le impostazioni predefinite delle opzioni per le prestazioni sono Molti per la cardinalità e Alcuni record corrispondono per l’integrità referenziale. Queste opzioni dovrebbero essere modificate solo se sei sicuro delle corrette caratteristiche dei dati.

Per maggiori informazioni sul modo in cui Tableau gestisce ogni impostazione, consulta Significato delle impostazioni di cardinalità e integrità referenziale.

Un esempio in Tableau

Vediamo cosa succede quando la cardinalità è configurata in modo errato.

Nota: nell’esempio riportato di seguito viene utilizzato un sottoinsieme delle tabelle dell’Insieme di dati Bookshop. Puoi scaricare la cartella di lavoro per seguire gli esempi o scaricare manualmente i dati non elaborati per creare autonomamente le origini dati. Le tabelle utilizzate sono Books, Info ed Edition di Bookshop.xlsx (mantenendo solo alcuni campi) e LibraryProfile e Catalog di BookshopLibraries.xlsx.

Le tabelle Book e Info hanno una relazione uno-a-uno: Info è essenzialmente costituita da colonne aggiuntive per la tabella Book. Per questo motivo, anche se le tabelle potrebbero essere correlate, è utile unirle tramite join per creare una nuova tabella logica con tutte le colonne. Edition ha una relazione molti-a-uno con questa tabella combinata, in quanto ci possono essere più edizioni per un singolo libro, in genere con formati diversi. Puoi notare che il diagramma seguente mostra la relazione tra la tabella Book+Info ed Edition, quindi è di tipo uno-a-molti.

Edition è correlata a Catalog come relazione uno-a-molti in base a ISBN. Le tabelle Catalog e LibraryProfile sono correlate in modalità molti-a-molti in base a Library ID. Il punto chiave è che la tabella LibraryProfiles contiene più righe per ogni biblioteca, una per ogni tipo di personale (bibliotecario, assistente di biblioteca, tecnico di biblioteca). Per maggiori informazioni sulla struttura di queste tabelle, consulta Insieme di dati Bookshop.

Impostazioni corrette

Quando la relazione Catalog-LibraryProfile è impostata correttamente, possiamo creare una semplice visualizzazione che mostra il numero di dipendenti per ogni biblioteca per più libri. Si tratta di una visualizzazione piuttosto banale da creare, ma è utile per illustrare questo aspetto. Idle Hour Library ha 130 dipendenti, indipendentemente dal libro di cui stiamo parlando. Esistono tre valori per il tipo di personale, pertanto ogni totale è composto da tre record (il numero tra parentesi).

Numero di dipendenti per biblioteca e titolo (i numeri tra parentesi indicano il numero di record in ogni indicatore).

Impostazioni errate: uno-a-uno

Quando la relazione viene erroneamente impostata come uno-a-uno, nella visualizzazione ogni titolo in Catalog viene effettivamente associato a un solo record della tabella LibraryProfile (come indicato dal numero di record tra parentesi).

Numero di dipendenti per biblioteca e titolo (i numeri tra parentesi indicano il numero di record in ogni indicatore).

Sopra possiamo vedere che per ogni biblioteca viene visualizzato solo il numero minimo di dipendenti. Fai riferimento ai numeri in grassetto nella visualizzazione seguente. Il numero inferiore di dipendenti è il numero riportato nella visualizzazione Staff Count.

Suddivisione del personale per tipo e biblioteca.

Per maggiori informazioni su come le relazioni diventano join contestuali per una visualizzazione, consulta Introducing the new data modeling in Tableau(Il collegamento viene aperto in una nuova finestra) nel blog di Tableau.

Impostazione errata: join

Sebbene vi siano soluzioni alternative per questo tipo di problema (una delle più comuni è l’utilizzo di espressioni Level of Detail), la creazione di join di tabelle con una granularità differente o una cardinalità di tipo "molti" può causare duplicazioni. In questo caso, il numero di dipendenti è accurato per i titoli che hanno un solo formato, mentre per i libri con due formati nella tabella Editions, tale duplicazione viene passata anche al numero di dipendenti (puoi notare che il conteggio dei record tra parentesi indica 6 invece del valore corretto, 3).

Numero di dipendenti per biblioteca e titolo (i numeri tra parentesi indicano il numero di record in ogni indicatore).

Impostazione errata: presupposizione erronea dell’integrità referenziale

Indicare a Tableau che esiste l’integrità referenziale (ovvero, che tutti i record corrispondono) quando non è così può causare l’eliminazione di valori. In questo esempio, le due visualizzazioni sono simili, ma quella a destra proviene da un’origine dati configurata per presupporre l’integrità referenziale. In tale visualizzazione sono andati persi i valori Null. Anche se questo può essere accettabile in alcune circostanze, è importante capire cosa rappresentano tali valori Null. In questo caso, dove la visualizzazione mostra il numero di edizioni in ogni biblioteca, i valori Null indicano due edizioni che sono presenti nella tabella delle edizioni ma non sono conservate in alcuna biblioteca. Potrebbe trattarsi di un errore importante, ma che passerebbe inosservato presupponendo erroneamente l’integrità referenziale.

Esplora la cartella di lavoro e le relative origini dati per osservare altri problemi che possono derivare da tabelle combinate in modo errato.

Impatto sulle prestazioni

Se la configurazione errata di queste impostazioni può causare dati mancanti o duplicati, perché Tableau consente di modificarle? In molti casi, è possibile e consigliabile mantenere le impostazioni predefinite: correla le tabelle invece di creare un join, mantieni la cardinalità di tipo molti-a-molti e non presupporre l’integrità referenziale. Questo vale soprattutto se non sei sicuro di quali dovrebbero essere le impostazioni.

Tuttavia, la cardinalità e l’integrità referenziale sono disponibili come opzioni per le prestazioni perché le impostazioni predefinite possono avere implicazioni sulle prestazioni. Se conosci con certezza la struttura dei dati, la configurazione delle impostazioni corrette consente di ridurre l’esecuzione delle query per migliorare la velocità.

Funzionamento

Nota: in questa sezione vengono utilizzate analogie con altre tecniche di combinazione dei dati per fornire solo un quadro concettuale. Non è una descrizione tecnica di come vengono utilizzate in Tableau le impostazioni delle prestazioni per le relazioni.

Cardinalità

La cardinalità della relazione influisce sul momento in cui avviene l’aggregazione. Possiamo pensare a questo aspetto in termini di combinazione. La combinazione dei dati esegue query su due origini dati in modo indipendente. Ogni origine dati viene aggregata in base alle esigenze al livello di dettaglio desiderato per la vista, indipendentemente dall’altra origine dati. Per le relazioni, l’impostazione della cardinalità influisce sul fatto che l’aggregazione venga eseguita prima o dopo il join.

Nell’esempio precedente, l’impostazione Molti indica che il numero di membri del personale per ogni biblioteca viene aggregato prima di combinare tali dati con le informazioni sui libri, per assicurare che per ogni libro siano visualizzati i numeri corretti. Quando la cardinalità viene impostata erroneamente su Uno, il numero di membri del personale non viene aggregato prima di essere combinato con i dati sui libri, generando valori errati.

Puoi notare che non solo vengono visualizzati valori errati, ma tutti i valori vengono assegnati al tipo di dipendenti Librarian (Bibliotecario), sebbene le informazioni siano relative a tutti e tre i tipi di dipendenti. La configurazione errata di questa impostazione può causare valori imprevedibili ed errati. Questo filtro dei risultati si verifica solo quando nella vista viene utilizzato un campo di un’altra tabella dall’altro lato della relazione impostata in modo errato.

Se i valori sono univoci, tuttavia, Tableau è libero di rimuovere l’aggregazione eseguita prima del join se ciò consente di ottimizzare la query.

Integrità referenziale

Sebbene l’integrità referenziale si riferisca a un’impostazione per le relazioni, può essere pensata in termini di tipi di join. Un join esterno completo conserverà tutti i record, indipendentemente dal fatto che vi sia o meno una corrispondenza nell’altra tabella, ma con un costo a livello di prestazioni. Se non sai se potrebbe verificarsi una perdita di record, un join esterno è più sicuro. Questo è il modo in cui vengono gestite le tabelle quando potrebbe non essere presente l’integrità referenziale (Alcuni record corrispondono).

Un join interno conserverà solo i record per cui è presente una corrispondenza in entrambe le tabelle, eliminando i record che non compaiono in ogni tabella. Se sai che un join interno non eliminerà dati necessari, questa soluzione è più efficiente. Se le opzioni per le prestazioni sono impostate su Tutti i record corrispondono, viene presupposta l’integrità referenziale e i join vengono eseguiti senza considerare i valori non corrispondenti.

Un’impostazione errata dell’integrità referenziale può avere un effetto simile a un filtro sui dati combinati, rimuovendo i valori non corrispondenti. Per maggiori informazioni sui vantaggi della conservazione dei record non corrispondenti, consulta Asking questions across multiple related tables nel blog di Tableau. Per maggiori informazioni sui tipi di join, consulta Creare un join dei dati.

Mantenere le impostazioni predefinite

Se le prestazioni dell’analisi sono accettabili, è consigliabile mantenere le impostazioni predefinite delle opzioni per le prestazioni, ovvero il tipo di relazione molti-a-molti, senza presupporre l’integrità referenziale. La potenza delle relazioni deriva dalla loro capacità di fornire risultati accurati e contestualmente appropriati in base alle tabelle utilizzate nell’analisi. La modifica di queste impostazioni rimuove la flessibilità semantica delle relazioni.

Grazie per il tuo feedback.Il tuo feedback è stato inviato. Grazie!