Parte III — Progettazione logica · Capitolo 11

Progettazione logica

~50 min di lettura6 widget interattivi9 tavole

In questo capitolo

  1. Modelli logici per il data mart: MOLAP, ROLAP, HOLAP
  2. Sparsità e chunk nei sistemi MOLAP
  3. ROLAP: lo schema a stella
  4. Considerazioni sullo schema a stella
  5. Interrogazioni OLAP su schemi a stella
  6. Lo snowflake schema
  7. Normalizzazione con lo snowflake
  8. Star vs snowflake: quando lo snowflaking conviene
  9. Dagli schemi di fatto agli schemi a stella: la regola di base
  10. Attributi descrittivi e archi opzionali
  11. Gerarchie condivise, convergenza e attributi cross-dimensionali
  12. Archi multipli: bridge table e push-down
  13. Dimensioni degeneri e junk dimension
  14. Gerarchie incomplete: i bilanciamenti
  15. Gerarchie ricorsive: autoanello e tabella di navigazione
  16. Stima dell'occupazione di memoria
  17. Verifica le tue conoscenze

La progettazione logica riceve dal capitolo 10 i suoi input — schema concettuale, carico di lavoro, volume dati, vincoli di sistema — e produce lo schema logico del data mart. È qui che gli schemi di fatto del DFM si traducono in qualcosa di eseguibile: prima la scelta del modello logico (MOLAP, ROLAP o HOLAP), poi la scelta dello schema relazionale (stella o snowflake) e la traduzione di ogni costrutto del DFM — compresi quelli avanzati del capitolo 8, che ora rivelano il loro vero costo. Chiude il capitolo la stima dell'occupazione di memoria, il calcolo che il volume dati del capitolo 10 rende possibile e che negli esercizi d'esame accompagna ogni soluzione di progetto logico.

1. Modelli logici per il data mart: MOLAP, ROLAP, HOLAP

La modellazione concettuale è indipendente dal modello logico prescelto per l'implementazione; lo stesso non si può dire per la modellazione logica, che dipende da come il modello multidimensionale viene rappresentato fisicamente. Le slide distinguono due modelli logici di base:

Definizione — MOLAP e ROLAP

I sistemi MOLAP (Multidimensional On-Line Analytical Processing) memorizzano i dati utilizzando strutture intrinsecamente multidimensionali (per esempio vettori multidimensionali). I sistemi ROLAP (Relational On-Line Analytical Processing) utilizzano il ben noto modello relazionale per la rappresentazione dei dati multidimensionali.

I vantaggi e i limiti del MOLAP sono speculari:

I sistemi commerciali si differenziano in base al modello logico adottato. Sebbene la maggior parte dei sistemi, soprattutto di grandi dimensioni, sia realizzata con soluzioni ROLAP, cominciano a essere proposte anche soluzioni ibride HOLAP (Hybrid-OLAP), che sfruttano le proprietà di entrambi i modelli.

ROLAP Data Warehouse MOLAP Data mart reportistica OLAP data mining analisi what-if il DW ROLAP è ottimale per memorizzare enormi quantità di dati; i DM MOLAP massimizzano la velocità di accesso ai dati i cubi MOLAP possono anche essere creati «al volo» per sessioni what-if
Tavola 11.1 — L'architettura HOLAP. Il data warehouse ROLAP memorizza enormi quantità di dati; i data mart MOLAP massimizzano la velocità di accesso; i cubi MOLAP possono essere creati «al volo» per specifiche sessioni di analisi (report semi-statici).

Strutture multidimensionali native. Ottime prestazioni perché le operazioni non vanno simulate in SQL; soffre della sparsità (solo ~20% delle celle informative), della mancanza di strutture dati standard (strutture proprietarie) e della resistenza di progettisti e sistemisti abituati ai sistemi relazionali.

Modello relazionale. La modellazione multidimensionale si basa sullo schema a stella e sulle sue varianti. È la soluzione della maggior parte dei sistemi, soprattutto di grandi dimensioni; sfrutta la ventennale esperienza relazionale di progettisti e sistemisti.

Ibrido. Il DW ROLAP memorizza enormi quantità di dati; i DM MOLAP massimizzano la velocità di accesso; i cubi MOLAP possono anche essere creati «al volo» per specifiche sessioni di analisi what-if (report semi-statici).

2. Sparsità e chunk nei sistemi MOLAP

Il problema della sparsità — solo una cella su cinque contiene informazioni — si affronta con due tecniche complementari:

chunk sparso chunk denso una struttura dati comunemente usata per la compressione dei chunk sparsi prevede un indice che riporti il solo offset delle celle che effettivamente contengono informazioni offset: 5 · 12 · 23 → celle informative
Tavola 11.2 — Suddivisione in chunk e compressione. I chunk densi restano in forma piena; i chunk sparsi vengono compressi rappresentando il solo offset delle celle che contengono informazioni.

3. ROLAP: lo schema a stella

La modellazione multidimensionale su sistemi relazionali è basata sullo schema a stella (star schema) e sulle sue varianti.

Definizione — schema a stella

Uno schema a stella è composto da:

Settimane ID_Settimane Settimana · Mese Prodotti ID_Prodotti Prodotto · Tipo · Categoria Vendite ID_Negozi · ID_Settimane ID_Prodotti Quantità · Guadagno Negozi ID_Negozi Negozio · Città · Stato Rappresentante la chiave primaria di FT è l'insieme delle chiavi esterne dalle dimension table surrogati: chiavi senza significato applicativo, generate dal sistema
Tavola 11.3 — Lo schema a stella delle vendite. Le dimension table denormalizzate contengono le gerarchie complete (Settimane: settimana e mese; Prodotti: prodotto, tipo, categoria; Negozi: negozio, città, stato, rappresentante); la fact table importa le chiavi e contiene le misure.

Le chiavi surrogate meritano una nota: sono chiavi generate dal sistema, prive di significato applicativo, che sostituiscono gli identificatori delle sorgenti. Il loro vantaggio è duplice: isolano la fact table dai cambiamenti delle chiavi naturali nelle sorgenti, e rendono la dimensione compatta (4 byte contro i molti byte di un codice applicativo). Nel calcolo dell'occupazione di memoria della sezione 16, il surrogato è sempre conteggiato a 4 byte.

4. Considerazioni sullo schema a stella

Le slide aggiungono due considerazioni di fondo sullo schema a stella, una a favore e una contro:

Vantaggio — un solo join per dimensione

Le dimension table sono completamente denormalizzate (per esempio Prodotto → Tipo): è sufficiente un join per recuperare tutti i dati relativi a una dimensione.

Costo — ridondanza dei dati

La denormalizzazione comporta una forte ridondanza nei dati: l'attributo «categoria» compare in ogni riga della dimension table Prodotto, replicato per ogni prodotto della stessa categoria.

C'è poi un vantaggio che riguarda la sparsità: non si hanno problemi di sparsità in uno schema a stella, poiché vengono memorizzate soltanto le tuple corrispondenti a punti dello spazio multidimensionale per cui esistono eventi. Il problema che affligge i cubi MOLAP (celle vuote che consumano spazio) semplicemente non si pone: se un evento non c'è, la tupla non esiste.

5. Interrogazioni OLAP su schemi a stella

Un'interrogazione OLAP su uno schema a stella ha sempre la stessa forma: un group-by set di attributi dimensionali, una o più misure aggregate, e un numero di join pari alle dimensioni coinvolte. L'esempio delle slide chiede il totale della quantità venduta per i diversi tipi di prodotto, in ogni settimana e città, ma solo per i prodotti alimentari:

Notate la struttura: la fact table Vendite viene unita alle tre dimension table richieste dal group-by set (Settimane per la settimana, Negozi per la città, Prodotti per il tipo); la selezione opera su un attributo di una dimension table (Categoria), non sulla fact table. È lo schema di interrogazione che ritroverete in ogni esercizio — e la base di confronto per lo snowflake della prossima sezione.

6. Lo snowflake schema

Lo snowflake schema (schema a fiocco di neve) riduce la denormalizzazione delle dimension table degli schemi a stella, eliminando alcune delle dipendenze transitive che le caratterizzano.

Definizione — snowflake schema

Le dimension table DTᵢ,ⱼ di questo schema sono caratterizzate da: una chiave primaria (tipicamente surrogata) dᵢ,ⱼ; il sottoinsieme degli attributi di DTᵢ che dipendono funzionalmente da dᵢ,ⱼ; zero o più chiavi esterne importate da altre DTᵢ,ₖ, necessarie a garantire la ricostruibilità del contenuto informativo di DTᵢ. Sono primarie le dimension table le cui chiavi sono importate nella fact table; secondarie le rimanenti.

Settimane ID_Settimane · Settimana Mese Prodotti ID_Prodotti · Prodotto ID_Tipo · Fornitore Tipi ID_Tipo · Tipo Categoria Vendite ID_Negozi · ID_Settimane ID_Prodotti Quantità · Guadagno Negozi ID_Negozi · Negozio ID_Città Rappresentante Città ID_Città · Città · Stato le dimension table secondarie (Tipi, Città) sono collegate alle primarie da nuove chiavi surrogate
Tavola 11.4 — Lo snowflake schema delle vendite. La gerarchia del prodotto è normalizzata in Prodotti → Tipi (categoria), quella del negozio in Negozi → Città (stato); la fact table resta identica, ma ora importa solo le chiavi delle dimension table primarie.

Le considerazioni delle slide sullo snowflake sono quattro:

7. Normalizzazione con lo snowflake

La normalizzazione richiede particolare attenzione affinché nella nuova relazione sia spostato il corretto insieme di attributi. Le specifiche caratteristiche degli schemi a stella — in particolare la presenza di più dipendenze funzionali transitive in cascata — fanno sì che, affinché la decomposizione sia efficace, tutti gli attributi che dipendono (transitivamente e non) dall'attributo che ha determinato lo snowflaking siano posti nella nuova relazione.

PRIMA — tutto in Negozi DOPO — snowflake su Città Negozi ID_Negozi → Negozio Negozio → ID_Città Negozio → Rappresentante ID_Città → Città Città → Regione Regione → Stato Negozi ID_Negozi → Negozio Negozio → ID_Città Negozio → Rappresentante Città ID_Città → Città Città → Regione Regione → Stato tutti gli attributi che dipendono da ID_Città seguono la catena: la decomposizione è efficace
Tavola 11.5 — Normalizzazione della gerarchia del negozio. Nell'esempio delle slide, l'attributo che determina lo snowflaking è ID_Città: con lui si spostano Città, Regione e Stato, lasciando in Negozi i soli attributi che dipendono dal negozio.

Confrontate con la query sulla stella della sezione 5: la selezione su Categoria ora richiede due join in più (Prodotti → Tipi e Negozi → Città). È il prezzo, in tempo di esecuzione, dello spazio risparmiato dalla normalizzazione.

8. Star vs snowflake: quando lo snowflaking conviene

Esistono pareri contrastanti sull'utilità dello snowflaking: da un lato «contrasta con la filosofia del data warehousing» e rappresenta «un inutile abbellimento dello schema»; dall'altro, in quattro casi, può essere utile:

  1. Rapporto di cardinalità elevato: quando il rapporto fra le cardinalità della dimension table primaria e della secondaria è elevato, lo snowflaking determina un forte risparmio di spazio. L'esempio delle slide: 100.000 prodotti, 10.000 sottocategorie, 1.000 categorie, 50 reparti — replicare categoria e reparto in ogni riga di Prodotto costa molto di più che tenerli in tabelle separate;
  2. Porzione di gerarchia comune a più dimensioni: quando una porzione di gerarchia è comune a più dimensioni (per esempio città–regione–stato condivisa fra la gerarchia del negozio e quella del fornitore), la dimension table secondaria può essere riutilizzata per più gerarchie;
  3. Viste aggregate: in presenza di viste materializzate (capitolo 12), la dimension table secondaria della vista primaria coincide con la dimension table primaria della vista secondaria — lo snowflaking rende questa condivisione esplicita;
  4. Aggiornamenti frequenti: quando una parte della gerarchia è soggetta a frequenti aggiornamenti (per esempio l'agente del negozio che varia spesso, mentre regione e nazione restano statiche), isolarla in una tabella separata rende l'aggiornamento più economico.
Per l'esame

Il caso 1 è quello che si presta al calcolo: dato il frammento di gerarchia con le cardinalità (per esempio a (50.000), b (30.000), c (20.000), d (10.000), e (500), f (5.000), g (100), h (200), i (1.000)) e la lunghezza degli attributi (50 byte), dovete determinare il punto di snowflaking più vantaggioso dal punto di vista dello spazio. La regola operativa: confrontate l'occupazione con la gerarchia interamente nella dimension table primaria contro l'occupazione con lo snowflake applicato su ciascun attributo candidato — il punto di minimo è la risposta. Lo faremo numericamente nella sezione 16.

9. Dagli schemi di fatto agli schemi a stella: la regola di base

Definizione — regola di base della traduzione

La regola di base per la traduzione di uno schema di fatto in uno schema a stella prevede di: creare una fact table contenente tutte le misure e gli attributi descrittivi direttamente collegati con il fatto e, per ogni gerarchia, creare una dimension table che ne contiene tutti gli attributi.

In aggiunta a questa semplice regola, la corretta traduzione di uno schema di fatto richiede una trattazione approfondita dei costrutti avanzati del DFM — esattamente quelli del capitolo 8. Le prossime sezioni li passano in rassegna uno per uno, con la loro traduzione logica.

Costrutto DFM (cap. 8)Traduzione logicaSezione
Attributi descrittiviNella dimension table dell'attributo o nella fact table10
Archi opzionaliValori fittizi (NULL / NON APPLICABILE); tupla fittizia per l'opzionalità di gerarchia10
Gerarchie condiviseDoppia importazione della chiave, oppure snowflake sul primo attributo condiviso11
ConvergenzeAttributi nella stessa dimension table dei padri11
Attributi cross-dimensionaliNuova tabella con chiave a₁…aₘ11
Archi multipliBridge table (con peso) oppure push-down nella fact table12
Dimensioni degeneriAttributi importati direttamente nella fact table13
Junk dimensionUnica dimension table per più dimensioni degeneri13
Gerarchie incompleteValori fittizi (bilanciamento per esclusione / verso il basso / verso l'alto)14
Gerarchie ricorsiveAutoanello oppure tabella di navigazione15

Questa tabella è la mappa del capitolo: ogni riga corrisponde a una sezione, e ogni sezione corrisponde a un quesito d'esame ricorrente («come si traduce a livello logico …?»).

10. Attributi descrittivi e archi opzionali

Attributi descrittivi

Un attributo descrittivo contiene informazioni non utilizzabili per effettuare aggregazioni, ma che si ritiene comunque utile mantenere. La traduzione dipende da dove è collegato:

Nell'esempio delle slide, il peso di un prodotto (attributo descrittivo del prodotto) finisce nella dimension table dei prodotti; l'indirizzo e il telefono del negozio, anch'essi descrittivi, nella dimension table dei negozi; il capo reparto e il responsabile del gruppo di marketing, collegati ad attributi di gerarchia, restano nelle dimension table che contengono reparto e gruppo di marketing.

Archi opzionali

Alcune porzioni delle gerarchie possono essere opzionali. Nella dimension table, nelle righe per cui non è definito un valore, viene inserito un valore fittizioNULL oppure NON APPLICABILE.

Attenzione — opzionalità dell'intera gerarchia

L'opzionalità di un'intera gerarchia NON può essere gestita introducendo un valore nullo nella chiave esterna della fact table: i vincoli di integrità referenziale lo vieterebbero. Occorre invece inserire un'intera tupla fittizia nella dimension table, e far puntare a essa le righe della fact table per cui la gerarchia non è definita. È il caso della promozione nello schema VENDITA: per le vendite senza promozione si imposta la chiave della promozione alla tupla fittizia.

Esercizio: quale traduzione logica?

Dato il costrutto DFM, scegliete la traduzione logica corretta.

11. Gerarchie condivise, convergenza e attributi cross-dimensionali

Gerarchie condivise

Se una gerarchia si presenta più volte nello stesso fatto (o in due fatti diversi) non conviene introdurre copie ridondanti delle relative dimension table. Due casi:

Convergenza

Gli attributi di convergenza — più percorsi di dipendenze funzionali che entrano in uno stesso attributo — si includono nella stessa dimension table dei loro attributi padri, senza particolari accorgimenti. Nell'esempio delle slide, la convergenza su categoria (raggiunta sia da tipo sia da marca) si traduce semplicemente mettendo categoria, tipo e marca nella medesima dimension table dei prodotti.

Attributi cross-dimensionali

Definizione — traduzione degli attributi cross-dimensionali

Dal punto di vista concettuale, un attributo cross-dimensionale b definisce un'associazione molti-a-molti fra due o più attributi dimensionali a₁…aₘ. La sua traduzione a livello logico richiede l'inserimento di una nuova tabella che includa b e abbia come chiave gli attributi a₁…aₘ.

L'esempio delle slide è l'IVA: l'aliquota dipende dalla coppia (categoria del prodotto, stato del negozio) — una dipendenza che attraversa due dimensioni. La tabella IVA ha come chiave (categoria, stato) e contiene l'aliquota; la fact table non cambia, e l'aliquota si recupera con un join aggiuntivo quando serve.

12. Archi multipli: bridge table e push-down

L'arco multiplo — l'attributo terminale raggiunto da più valori per ogni evento — è il costrutto con la traduzione più delicata. La soluzione più ovvia è inserire una tabella aggiuntiva, la bridge table:

Libri ID_Libri · Libro Genere Vendite ID_Libri · ID_Date Numero · Incasso Autori ID_Autori · Autore BRIDGE ID_Libri · ID_Autori · Peso il peso attribuisce importanza diversa alle tuple partecipanti (es. 0,5 per i coautori)
Tavola 11.6 — Traduzione dell'arco multiplo autore–libro con bridge table. La chiave di BRIDGE è la combinazione (ID_Libri, ID_Autori); l'attributo Peso codifica l'importanza di ciascuna partecipazione.

La soluzione con bridge table rende possibili due tipi di interrogazioni:

Push-down

Nel caso si voglia continuare a utilizzare lo schema a stella, è necessario rendere più fine la granularità del fatto, modellando così l'arco multiplo direttamente nella fact table (push-down). Questa soluzione richiede l'aggiunta alla fact table di una nuova dimensione corrispondente all'attributo terminale dell'arco multiplo: la fact table delle vendite dei libri acquisisce la chiave dell'autore e le sue righe vengono replicate tante volte quante sono le corrispondenze dell'arco multiplo.

Push-downBridge table
Potere informativoIdentico nelle due soluzioni
RidondanzaForte: le righe della fact table sono replicate tante volte quante sono le corrispondenze dell'arcoNessuna ridondanza nella fact table
Il pesoCodificato permanentemente nella fact table; l'aggiornamento può risultare molto complessoAttributo della bridge table, aggiornabile separatamente
Interrogazioni di impattoMolto complesseSemplici
Costo di esecuzioneRidotto grazie al minor numero di joinRidotto a causa del minor numero di tuple coinvolte
Calcolo degli eventi pesatiDurante l'alimentazioneDurante l'interrogazione
Nota del redattore

Il confronto delle due soluzioni è materia d'esame: i pro e i contro di push-down e bridge table vengono chiesti di frequente, e l'occupazione di memoria delle due alternative è un esercizio classico (lo rivedremo nella sezione 16 con il caso RICOVERO, dove ogni ricovero è caratterizzato in media da 3 diagnosi).

13. Dimensioni degeneri e junk dimension

Definizione — dimensione degenere

Questo termine indica una dimensione la cui gerarchia contiene un solo attributo. Se la lunghezza dell'attributo non è eccessiva, può convenire evitare la creazione di una specifica dimension table, importando direttamente i valori dell'attributo nella fact table.

Per esempio, nel data mart degli ordini le dimensioni degeneri tipiche sono lo stato della linea d'ordine, la modalità di spedizione e il codice di ritorno: gerarchie di un solo attributo, con pochi valori possibili. Creare per ciascuna una dimension table costerebbe una chiave surrogata in più nella fact table per ogni riga, senza alcun beneficio: meglio importare direttamente i valori.

La junk dimension

Una soluzione alternativa è utilizzare un'unica dimension table per modellare più dimensioni degeneri — la junk dimension:

Modalità Spedizione Codice Ritorno MCS ID_MCS Modalità Sped. Codice Ritorno Linea Ordine ID_Ordini · ID_Prodotti ID_MCS · Quantità · Importo nessuna dipendenza funzionale fra gli attributi: valide tutte le combinazioni (5 × 4 × 2 …)
Tavola 11.7 — La junk dimension MCS (modalità di spedizione, codice di ritorno, stato della linea d'ordine). Tre dimensioni degeneri confluiscono in un'unica dimension table; la fact table importa una sola chiave invece di tre.

Perché una junk dimension conviene? Con tre dimensioni degeneri separate, la fact table importerebbe tre chiavi surrogata (4 byte ciascuna, per ogni riga); con la junk dimension ne importa una sola, e i valori delle tre dimensioni degeneri sono pagati una volta sola nella junk table — le cui righe sono poche (il prodotto delle cardinalità). Il confronto numerico è un esercizio d'esame ricorrente, che affronteremo nella sezione 16.

Attenzione

La junk dimension funziona solo quando il numero di valori distinti è limitato: se una delle dimensioni degeneri ha migliaia di valori (per esempio un codice di tracciamento), il prodotto delle cardinalità esplode e la junk table diventerebbe più grande della fact table stessa. In quel caso la dimensione degenere va importata direttamente nella fact table — e le altre, eventualmente, nella junk.

14. Gerarchie incomplete: i bilanciamenti

Questo termine indica una gerarchia in cui per alcune istanze risultano assenti uno o più livelli di aggregazione. Vengono gestite a livello estensionale, inserendo opportuni valori fittizi.

Attenzione

Il problema è più complesso rispetto al caso degli attributi opzionali, poiché la mancanza di un valore di un attributo non implica la mancanza dei successivi nella gerarchia di aggregazione: San Marino non ha la provincia, ma ha la nazione. È esattamente questo «buco in mezzo» a rendere delicata la consistenza dell'operatore di roll-up.

L'esempio canonico è la gerarchia geografica comune → provincia → regione → nazione, dove i comuni di San Marino e Città del Vaticano non hanno provincia. Sono possibili tre soluzioni (bilanciamenti), che si differenziano per il tipo di segnaposto inserito:

  1. Bilanciamento per esclusione: in tutte le tuple viene inserito un segnaposto generico (per esempio «altro»). Preferibile quando il numero di dati mancanti è elevato; svantaggio: viola la semantica del roll-up, poiché aggregando i dati si avrà un maggior livello di dettaglio delle informazioni (il valore «altro» non corrisponde a un livello reale della gerarchia);
  2. Bilanciamento verso il basso: i valori mancanti vengono rimpiazzati con il valore dell'attributo che lo precede nella gerarchia (il comune di San Marino ha come provincia «San Marino»). Preferibile quando il numero di dati mancanti è limitato; svantaggio: l'interpretazione dei report è complicata dal fatto che compariranno valori non corrispondenti al livello di aggregazione prescelto;
  3. Bilanciamento verso l'alto: i valori mancanti vengono rimpiazzati con i valori dell'attributo che lo segue (il comune di San Marino ha come provincia e regione «Rep. San Marino»). Preferibile quando il numero di dati mancanti è elevato; rispetto alla soluzione precedente, i report risultano più leggibili perché presentano un numero inferiore di valori.
PER ESCLUSIONE VERSO IL BASSO VERSO L'ALTO nazione Italia · S. Marino · C. Vaticano regione Toscana · Altro · Altro provincia Firenze · Altro · Altro comune Empoli · S. Marino · Altro nazione Italia · S. Marino · C. Vaticano regione Toscana · S. Marino · C. Vaticano provincia Firenze · S. Marino · C. Vaticano comune Empoli · S. Marino · C. Vaticano nazione Italia · S. Marino · C. Vaticano regione Toscana · S. Marino · C. Vaticano provincia Firenze · S. Marino · C. Vaticano comune Empoli · S. Marino · C. Vaticano esclusione: segnaposto generico («altro»), viola la semantica del roll-up verso il basso: si ripete il valore precedente · verso l'alto: si ripete il valore successivo esclusione e verso l'alto: preferibili con molti dati mancanti · verso il basso: con pochi
Tavola 11.8 — I tre bilanciamenti delle gerarchie incomplete applicati alla gerarchia geografica. La scelta dipende dalla quantità di dati mancanti e dalla leggibilità dei report risultanti.

15. Gerarchie ricorsive: autoanello e tabella di navigazione

Definizione — gerarchia ricorsiva

Questo termine indica una gerarchia in cui il numero dei livelli di aggregazione non è codificabile nello schema e può variare da istanza a istanza. Non può essere modellata tramite schema a stella.

L'esempio classico è la gerarchia degli impiegati (chi è responsabile di chi): un impiegato può avere subordinati che a loro volta ne hanno, e la profondità non è nota a priori. Le slide propongono due soluzioni.

L'autoanello

Una possibile soluzione prevede l'utilizzo di un autoanello: la dimension table Impiegato contiene una chiave esterna verso se stessa (ID_Responsabile), che punta al record dell'impiegato di cui si è subordinati. È semplice, ma non sempre gestibile in modo ottimale con i DBMS commerciali — e soprattutto SQL non è un linguaggio ricorsivo: percorrere la catena di responsabilità richiederebbe un numero di self-join pari alla profondità, che non è noto.

La tabella di navigazione

Una soluzione più potente prevede di appiattire la gerarchia, esplicitando tutti i legami da essa indotti in una tabella di navigazione con gli attributi ID_Padre, ID_Figlio, Livello e Foglia:

GERARCHIA 1 2 · 3 · 4 5 · 6 · 7 · 8 · 9 NAVIGAZIONE ID_Padre ID_Figlio Livello Foglia 1 1 0 FALSE 1 2 1 FALSE 1 3 1 TRUE 1 5 2 TRUE 2 2 0 FALSE 2 5 1 TRUE 5 5 0 TRUE la dimensione della tabella di navigazione cresce in modo esponenziale con la profondità della gerarchia se la dimensione è trattabile, questa soluzione garantisce un maggiore potere espressivo
Tavola 11.9 — La tabella di navigazione. Ogni coppia (padre, figlio) di ogni livello è una riga; Livello indica la distanza, Foglia segnala i discendenti senza subordinati. La tabella cresce esponenzialmente con la profondità della gerarchia.
Nota del redattore

Notate l'ultima osservazione delle slide: escludendo dai join la tabella di navigazione si continua ad avere uno schema a stella. La tabella di navigazione è un'appendice opzionale: chi non interroga la gerarchia ricorsiva non la tocca, e lo schema resta relazionale puro.

16. Stima dell'occupazione di memoria

Chiudiamo il capitolo con lo strumento quantitativo che gli esercizi d'esame richiedono in continuazione: la stima dell'occupazione di memoria di una soluzione di progetto logico. Le regole sono poche:

Per l'esame — esempio guidato

Uno schema di fatto ORDINE (2.000.000 di eventi primari) include tre dimensioni degeneri: statoOrdine (4 byte, 6 valori), tipoSpedizione (10 byte, 4 valori), resoY/N (1 byte). Senza junk dimension si valuta ogni dimensione degenere separatamente: statoOrdine conviene direttamente nella fact table (2M × 4 = 8.000.000, contro i 8.000.048 di una tabella dedicata); tipoSpedizione conviene con dimension table (2M × 4 + 4 × (4+10) = 8.000.056, contro i 20.000.000 del valore in fact table); resoY/N direttamente in fact table (2M × 1 = 2.000.000). Totale: 18.000.056. Con junk dimension: una sola chiave surrogata in fact table (2M × 4 = 8.000.000) più la junk table con tutte le combinazioni: (4+4+10+1) × (6 × 4 × 2) = 19 × 48 = 912. Totale: 8.000.912. La junk dimension occupa circa 2,2 volte meno — la lezione generale: per ogni dimensione degenere si confronta il costo del valore in fact table con quello della chiave surrogata più la tabella, e la junk conviene quando le combinazioni sono poche.

Calcolo: junk dimension o no?

Confrontate l'occupazione delle due soluzioni per le dimensioni degeneri dell'ORDINE.

Due casi d'esame aggiuntivi, che ricorrono identici negli anni:

Questi calcoli chiudono la progettazione logica nel suo primo tempo: schema scelto, costrutti tradotti, memoria stimata. Il secondo tempo — viste materializzate, scenari temporali, frammentazione — è il capitolo 12.

Verifica le tue conoscenze

Che differenza c'è fra MOLAP, ROLAP e HOLAP?

Il MOLAP memorizza i dati con strutture intrinsecamente multidimensionali (vettori multidimensionali): soluzione naturale con ottime prestazioni, ma afflitta dalla sparsità (solo ~20% delle celle informative), dalla mancanza di strutture standard (strutture proprietarie) e dalla riluttanza di chi ha vent'anni di esperienza relazionale. Il ROLAP usa il modello relazionale con lo schema a stella: è la soluzione della maggior parte dei sistemi, soprattutto di grandi dimensioni. Il HOLAP combina i due: DW ROLAP per enormi quantità di dati, DM MOLAP per la velocità di accesso, cubi MOLAP «al volo» per il what-if.

Come si affronta il problema della sparsità nei sistemi MOLAP?

Con due tecniche: la suddivisione delle dimensioni, che partiziona il cubo in chunk gestiti diversamente a seconda che siano densi o sparsi; e la compressione dei chunk sparsi, che rappresenta il solo offset delle celle che contengono informazioni.

Che cos'è uno schema a stella?

Un insieme di dimension table DT₁…DTₙ, ciascuna con chiave primaria (tipicamente surrogata) e attributi a diversi livelli di aggregazione, più una fact table FT che importa le chiavi di tutte le dimension table, ha come chiave primaria l'insieme delle chiavi esterne e contiene un attributo per ogni misura. Le dimension table sono completamente denormalizzate: un solo join per dimensione; il costo è la ridondanza. Non ci sono problemi di sparsità, perché si memorizzano solo tuple corrispondenti a eventi esistenti.

Che cos'è lo snowflake schema?

Lo schema a fiocco di neve riduce la denormalizzazione delle dimension table eliminando alcune dipendenze transitive. Le dimension table sono primarie (le cui chiavi sono importate nella fact table) e secondarie (le rimanenti). Riduce lo spazio, ma richiede nuove chiavi surrogate, avvantaggia le interrogazioni sui soli attributi delle dimension table primarie e rallenta quelle che coinvolgono attributi delle secondarie.

Quali sono i quattro casi in cui lo snowflaking è utile?

(1) Rapporto elevato tra le cardinalità della dimension table primaria e secondaria (forte risparmio di spazio); (2) porzione di gerarchia comune a più dimensioni (la tabella secondaria si riutilizza); (3) presenza di viste aggregate (la secondaria della vista primaria coincide con la primaria della vista secondaria); (4) parte della gerarchia soggetta a frequenti aggiornamenti (l'aggiornamento si isola in una tabella piccola).

Qual è la regola di base della traduzione di uno schema di fatto in schema a stella?

Creare una fact table contenente tutte le misure e gli attributi descrittivi direttamente collegati con il fatto e, per ogni gerarchia, creare una dimension table che ne contiene tutti gli attributi. I costrutti avanzati del DFM (capitolo 8) richiedono poi trattazioni specifiche.

Come si traducono attributi descrittivi e archi opzionali?

Un attributo descrittivo collegato a un attributo dimensionale va incluso nella dimension table che contiene quell'attributo; se collegato direttamente al fatto, nella fact table. Un arco opzionale si gestisce con un valore fittizio (NULL o NON APPLICABILE) nelle righe in cui il valore non è definito. L'opzionalità di un'intera gerarchia non può essere gestita con un NULL nella chiave esterna della fact table (vincoli di integrità): si inserisce un'intera tupla fittizia nella dimension table.

Come si traducono gerarchie condivise, convergenze e attributi cross-dimensionali?

Le gerarchie condivise con gli stessi attributi si traducono importando due volte la chiave della medesima dimension table; se condividono solo una parte, si duplicano con ridondanza oppure si applica uno snowflake sul primo attributo condiviso. Le convergenze si includono nella stessa dimension table dei loro attributi padri. Gli attributi cross-dimensionali richiedono una nuova tabella che li contenga con chiave a₁…aₘ (esempio: la tabella IVA con chiave categoria–stato).

Quali sono le due soluzioni per l'arco multiplo e quali i loro pro e contro?

La bridge table, con chiave pari alla combinazione degli attributi collegati all'arco e un eventuale peso: consente interrogazioni pesate (effettivo totale) e di impatto (valori più elevati), il peso si aggiorna separatamente e il calcolo degli eventi pesati avviene in interrogazione. Il push-down rende più fine la granularità del fatto aggiungendo una dimensione per l'attributo terminale: forte ridondanza (righe replicate), peso codificato permanentemente (aggiornamento complesso), interrogazioni di impatto complesse, ma meno join e calcolo degli eventi pesati in alimentazione. Il potere informativo è identico.

Che cosa sono le dimensioni degeneri e la junk dimension?

Una dimensione degenere è una dimensione la cui gerarchia contiene un solo attributo; se l'attributo non è troppo lungo, conviene importarlo direttamente nella fact table invece di creare una dimension table. La junk dimension è un'unica dimension table che modella più dimensioni degeneri: non esistono dipendenze funzionali fra gli attributi, quindi tutte le combinazioni sono valide; è attuabile solo quando il numero di valori distinti è limitato. Converte tre chiavi surrogata in una sola, pagando una volta sola le combinazioni.

Come si gestiscono le gerarchie incomplete?

Inserendo valori fittizi (gestione estensionale). Tre bilanciamenti: per esclusione (segnaposto generico «altro»; preferibile con molti dati mancanti; viola la semantica del roll-up); verso il basso (si ripete il valore precedente; preferibile con pochi dati mancanti; report con valori fuori livello); verso l'alto (si ripete il valore successivo; preferibile con molti dati mancanti; report più leggibili).

Come si modella una gerarchia ricorsiva?

Non è modellabile con uno schema a stella, perché il numero di livelli non è codificabile e SQL non è ricorsivo. Due soluzioni: l'autoanello (chiave esterna verso se stessa, ID_Responsabile) — semplice ma non sempre gestibile in modo ottimale; la tabella di navigazione che appiattisce la gerarchia esplicitando tutti i legami (ID_Padre, ID_Figlio, Livello, Foglia) — più potente, ma cresce in modo esponenziale con la profondità. Escludendo la tabella di navigazione dai join si continua ad avere uno schema a stella.

Come si stima l'occupazione di memoria di una soluzione logica?

Con tre ingredienti: il numero di tuple (eventi primari per la fact table, cardinalità per le dimension table), la lunghezza delle tuple (attributi: lunghezza dichiarata, tipicamente 20 o 50 byte; chiavi surrogate: 4 byte), e la regola occupazione = numero di tuple × lunghezza. Le alternative si confrontano: junk dimension vs dimensioni separate, bridge table vs push-down, punti di snowflaking diversi.