Nel capitolo precedente la gerarchia era un albero direzionato di associazioni molti-a-uno. È una definizione pulita, e la realtà la infrange in sette modi diversi. Il DFM li nomina tutti, e ciascuno di essi avrà, nel capitolo 11, una traduzione logica specifica: è questa la ragione per cui vale la pena riconoscerli già a livello concettuale.
Un attributo descrittivo contiene informazioni aggiuntive su un attributo dimensionale di una gerarchia, a cui è connesso da un'associazione -a-uno. Non viene usato per l'aggregazione poiché ha valori continui e/o poiché deriva da un'associazione uno-a-uno.
Gli esempi delle slide sono il peso di un prodotto, l'indirizzo e il telefono di un negozio, il capo reparto, il responsabile di un gruppo di marketing. Le due giustificazioni citate non sono equivalenti e conviene tenerle distinte:
In entrambi i casi l'attributo è utile da vedere ma inutile per aggregare: da qui il nome.
Alcuni archi dello schema di fatto possono essere opzionali, e si annotano con un trattino sull'arco. Il caso tipico delle slide è l'attributo dieta di un prodotto: solo alcuni prodotti alimentari hanno un regime dietetico associato, gli altri no. Analogamente città della marca ha senso solo per i prodotti che hanno una marca.
Anticipiamo una conseguenza logica del capitolo 11, perché aiuta a capire perché il DFM distingue questi casi: un attributo descrittivo, se collegato a un attributo dimensionale, va incluso nella dimension table che contiene quell'attributo; se collegato direttamente al fatto, va incluso nella fact table. Un arco opzionale, invece, si gestisce con un valore fittizio (NULL oppure NON APPLICABILE) nelle righe in cui il valore non è definito.
La gerarchia condivisa è un'abbreviazione usata per denotare il fatto che una porzione di gerarchia è replicata più volte nello schema.
L'esempio canonico è il fatto CHIAMATA, che ha due dimensioni distinte — numero chiamante e numero chiamato — entrambe descritte dalla stessa identica gerarchia di attributi del numero telefonico (uso, distretto). Disegnare due volte la stessa catena sarebbe corretto ma illeggibile: il DFM permette di disegnarla una volta sola e di far confluire su di essa i due archi, etichettati con il ruolo che ciascuno rappresenta.
Il secondo esempio delle slide è più interessante perché la condivisione è parziale: nel fatto SPEDIZIONE la gerarchia geografica (città, regione, stato) è raggiungibile sia dal magazzino sia dal cliente che ha effettuato l'ordine. Le due gerarchie non sono identiche — una parte dal magazzino, l'altra dall'ordine attraverso il cliente — ma condividono la coda.
Due attributi dimensionali possono essere connessi da due o più cammini direzionati distinti, a patto che ciascuno di essi rappresenti ancora una dipendenza funzionale. Questo costrutto si chiama convergenza.
L'esempio delle slide sta nella gerarchia del negozio: da negozio si arriva a stato per due strade — passando per città del negozio e regione, oppure passando per distretto di vendita. Entrambe le catene sono fatte di associazioni molti-a-uno, quindi entrambe sono legittime; ed entrambe finiscono sullo stesso attributo.
I due costrutti si somigliano — in entrambi ci sono più cammini che entrano nello stesso attributo — e all'esame vengono contrapposti di continuo. La differenza sta nel punto di partenza e nella conseguenza sulle istanze.
| Convergenza | Condivisione | |
|---|---|---|
| Da dove partono i cammini | Dallo stesso attributo dimensionale (nell'esempio: negozio) | Da attributi diversi, che possono appartenere anche a gerarchie diverse o a fatti diversi (nell'esempio: numero chiamante e numero chiamato; oppure magazzino e cliente) |
| Che cosa significa il disegno | Due percorsi realmente distinti nel dominio, che devono portare allo stesso valore | Un'abbreviazione grafica: la stessa porzione di gerarchia è replicata più volte nello schema |
| Vincolo sulle istanze | Sì: per ogni negozio, lo stato raggiunto via città-regione e quello raggiunto via distretto devono coincidere | No: il numero chiamante e il numero chiamato di una stessa chiamata possono benissimo stare in distretti diversi |
| Traduzione logica | Gli attributi di convergenza si includono nella stessa dimension table dei loro attributi padri, senza particolari accorgimenti | Se le gerarchie contengono gli stessi attributi basta importare due volte la chiave della medesima dimension table; se ne condividono solo una parte si sceglie fra duplicazione e snowflake (capitolo 11) |
La domanda tipica è a scelta multipla sulle affermazioni relative a convergenza e condivisione. Le due chiavi di lettura da tenere a mente sono: (1) in una condivisione i cammini possono avere origine da gerarchie diverse — anzi è il caso più frequente; (2) rispetto a una condivisione, una convergenza pone un vincolo addizionale sulle istanze, perché i due cammini devono produrre lo stesso valore per ciascuna istanza. Attenzione a non confondere la convergenza con l'attributo cross-dimensionale, che è invece il costrutto che modella una dipendenza funzionale composta.
Un attributo cross-dimensionale è un attributo, dimensionale o descrittivo, il cui valore è determinato dalla combinazione di due o più attributi dimensionali, eventualmente appartenenti a gerarchie distinte.
L'esempio è l'IVA: l'aliquota non dipende solo dalla categoria del prodotto, né solo dallo stato in cui si trova il negozio, ma dalla coppia. Nel disegno l'attributo ha quindi due padri, appartenenti a due gerarchie diverse, e la freccia che li unisce è ciò che segnala la dipendenza funzionale composta.
-- la dipendenza funzionale modellata dall'attributo cross-dimensionale IVA
categoria, stato -> IVA
-- NON vale nessuna delle due componenti da sola:
categoria -> IVA -- falso: la stessa categoria ha aliquote diverse in stati diversi
stato -> IVA -- falso: lo stesso stato ha aliquote diverse per categorie diverse
È utile confrontarlo con la convergenza, perché sono spesso confusi: nella convergenza ci sono due cammini che portano allo stesso attributo partendo dallo stesso punto; nell'attributo cross-dimensionale c'è un attributo che ha bisogno di due padri contemporaneamente per essere determinato. Le slide segnalano anche che identificare gli attributi cross-dimensionali (e gli archi multipli) a partire dallo schema sorgente è complesso, perché richiede di navigare anche le associazioni a-molti: per questo si preferisce definirli a partire dai requisiti utente e rappresentarli solo successivamente sullo schema di fatto.
Sul piano dello schema E/R, un attributo cross-dimensionale corrisponde in genere a un attributo posto su un'associazione molti-a-molti R; i suoi padri nello schema di fatto corrisponderanno allora agli identificatori delle entità coinvolte in R.
Un arco multiplo modella un'associazione molti-a-molti fra due attributi dimensionali.
È il costrutto che rompe più profondamente la definizione di gerarchia data nel capitolo 7, perché sostituisce un'associazione molti-a-uno con una molti-a-molti — e quindi mette in crisi l'unicità dell'aggregazione.
Il fatto VENDITA di libri ha come dimensione il libro, che sale a genere; ma un libro può avere più autori e un autore più libri. L'arco libro → autore è dunque multiplo. I dati delle slide:
| Libro | Autori | Copie vendute |
|---|---|---|
| Il DFM | Golfarelli, Rizzi | 3 |
| Mi Sembra Logico | Golfarelli | 5 |
| La Giusta Misura | Rizzi | 10 |
| Un Fatto Come e Perché | Golfarelli, Rizzi | 4 |
| La Quarta Dimensione | Golfarelli | 8 |
E poi la domanda che rende il problema evidente: «Quanto ha venduto Rizzi?». Non c'è una risposta, ce ne sono due, entrambe legittime a seconda di che cosa si vuole sapere. Il widget qui sotto le calcola entrambe.
Scegliete l'autore e il tipo di interrogazione. I pesi sono quelli della bridge table delle slide: 0,5 per ciascuno dei due coautori, 1,0 per l'autore unico.
La distinzione ha un nome preciso, che ritroveremo nella traduzione logica del capitolo 11:
Le slide mostrano anche un secondo esempio, sanitario: il fatto RICOVERO con l'arco multiplo verso diagnosi, perché un ricovero è caratterizzato in media da più diagnosi. È il caso su cui si costruiscono diversi esercizi d'esame di calcolo dell'occupazione di memoria (capitolo 11).
Una gerarchia incompleta è una gerarchia in cui, per alcune istanze, risultano assenti — in quanto non noti oppure non definiti — uno o più livelli di aggregazione.
L'esempio delle slide è geografico e perfettamente concreto: la gerarchia comune → provincia → regione → nazione funziona benissimo per l'Italia (Empoli e Firenze stanno in FI, che sta in Toscana, che sta in Italia), ma:
Attenzione a non confondere questo caso con quello degli attributi opzionali. Come dicono le slide a proposito della traduzione logica, 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, e il capitolo 11 mostrerà le tre strategie di bilanciamento con cui si risolve.
Nelle gerarchie ricorsive le relazioni padre-figlio fra i livelli sono consistenti, ma le istanze possono avere lunghezze differenti.
L'esempio è l'organigramma aziendale nel fatto ATTIVITÀ: la dimensione impiegato ha un attributo ruolo, ma soprattutto ha una relazione con sé stessa — ogni impiegato ha un responsabile, che è a sua volta un impiegato. La catena Direttore capo → Direttore esecutivo → Caporeparto produzione → Ingegnere della produzione → Tecnico manutenzione è lunga cinque livelli; quella Direttore capo → Segretaria del direttore capo è lunga due.
Il punto cruciale è nella definizione: la relazione padre-figlio è sempre la stessa («è responsabile di»), quindi è consistente; ma il numero dei livelli non è codificabile nello schema e varia da istanza a istanza. Nessun numero fisso di attributi dimensionali può rappresentarla.
È il costrutto con la traduzione logica più problematica di tutti, per una ragione molto semplice che le slide dichiarano senza giri di parole: SQL non è un linguaggio ricorsivo. Una gerarchia ricorsiva non può essere modellata tramite schema a stella, e le due soluzioni possibili — l'autoanello e la tabella di navigazione — hanno entrambe controindicazioni. Se ne parla nel capitolo 11.
In alcuni casi il progettista può valutare la possibilità di frammentare uno schema di fatto in due o più schemi, con l'obiettivo di regolarizzare le gerarchie. È, in un certo senso, la risposta radicale al problema delle gerarchie incomplete: invece di riempire i buchi con segnaposti, si separano i casi.
L'esempio delle slide è il fatto RIGA FATTURA, con una gerarchia del cliente che in Italia sale a città e regione e all'estero salta direttamente a stato, e con l'attributo valuta che ha senso solo per l'estero. Frammentando si ottengono due schemi puliti:
| RIGA FATTURA ITALIA | RIGA FATTURA ESTERO | |
|---|---|---|
| Gerarchia dell'articolo | articolo → tipo → categoria | articolo → tipo → categoria |
| Gerarchia del cliente | cliente → città → regione | cliente → stato |
| Altre dimensioni | data | data, valuta |
| Misure | quantità, importo | quantità, importo |
Il prezzo è evidente: due schemi da mantenere, e ogni interrogazione che voglia il totale complessivo dovrà attraversarli entrambi — cioè fare un drill-across. Il guadagno è che ciascuno dei due ha gerarchie complete e regolari, quindi traduzione logica semplice e aggregazione sempre ben definita.
Data la situazione descritta, riconoscete il costrutto del DFM che la modella.
Contiene informazioni aggiuntive su un attributo dimensionale di una gerarchia, a cui è connesso da un'associazione -a-uno. Non viene usato per l'aggregazione perché ha valori continui (raggrupparvi produrrebbe un gruppo per valore) e/o perché deriva da un'associazione uno-a-uno (raggrupparvi equivarrebbe a raggruppare per l'attributo padre). Esempi: peso, indirizzo, telefono, capo reparto.
Un'abbreviazione usata per denotare che una porzione di gerarchia è replicata più volte nello schema. Esempio: nel fatto CHIAMATA le dimensioni numero chiamante e numero chiamato hanno la stessa gerarchia (uso, distretto), disegnata una volta sola con i due archi etichettati dal ruolo. Un altro esempio è la gerarchia geografica raggiungibile sia dal magazzino sia dal cliente nel fatto SPEDIZIONE.
Il costrutto per cui due attributi dimensionali sono connessi da due o più cammini direzionati distinti, a patto che ciascuno rappresenti ancora una dipendenza funzionale. Esempio: da negozio si raggiunge stato sia attraverso città del negozio e regione, sia attraverso distretto di vendita.
Nella convergenza i cammini partono dallo stesso attributo e devono portare allo stesso valore: c'è quindi un vincolo addizionale sulle istanze. Nella condivisione i cammini partono da attributi diversi, che possono appartenere anche a gerarchie diverse o a fatti diversi, ed è solo un'abbreviazione grafica: nessun vincolo lega i valori raggiunti (il numero chiamante e quello chiamato possono stare in distretti diversi).
Un attributo, dimensionale o descrittivo, il cui valore è determinato dalla combinazione di due o più attributi dimensionali, eventualmente appartenenti a gerarchie distinte. Esempio: l'IVA, determinata dalla coppia (categoria del prodotto, stato del negozio). Modella cioè una dipendenza funzionale composta. Sullo schema E/R corrisponde in genere a un attributo posto su un'associazione molti-a-molti.
Modella un'associazione molti-a-molti fra due attributi dimensionali: per esempio libro → autore, dove un libro ha più autori e un autore più libri. Il problema è che l'aggregazione non è più univoca: alla domanda «quanto ha venduto Rizzi?» si può rispondere in due modi, con un'interrogazione pesata (che considera il peso dell'arco multiplo e fornisce l'effettivo totale) o con un'interrogazione di impatto (che non lo considera e fornisce valori più elevati).
Una gerarchia in cui, per alcune istanze, risultano assenti — perché non noti oppure non definiti — uno o più livelli di aggregazione. Esempio: comune → provincia → regione → nazione, dove San Marino non ha provincia né regione e la Città del Vaticano non ha nemmeno il comune. È più complessa del caso degli attributi opzionali perché la mancanza di un valore non implica la mancanza dei successivi.
Una gerarchia in cui le relazioni padre-figlio fra i livelli sono consistenti ma le istanze possono avere lunghezze differenti: il numero dei livelli di aggregazione non è codificabile nello schema. L'esempio è l'organigramma nel fatto ATTIVITÀ, dove la catena di responsabilità può essere lunga due o cinque livelli a seconda dell'impiegato.
Perché richiede di navigare anche le associazioni a-molti, mentre la costruzione automatica dell'albero degli attributi (capitolo 9) naviga solo le associazioni a-uno. Per questo si preferisce definirli a partire dai requisiti utente e rappresentarli solo successivamente sullo schema di fatto.
Quando lo si vuole dividere in due o più schemi con l'obiettivo di regolarizzare le gerarchie. L'esempio è RIGA FATTURA, separata in una versione ITALIA (cliente → città → regione) e una ESTERO (cliente → stato, con la dimensione valuta): ciascuno dei due ha gerarchie complete e regolari, al prezzo di dover fare un drill-across per ottenere i totali complessivi.
Un attributo descrittivo collegato a un attributo dimensionale va incluso nella dimension table che contiene quell'attributo; se è collegato direttamente al fatto va incluso nella fact table. Un arco opzionale si gestisce inserendo nelle righe in cui il valore non è definito un valore fittizio (NULL oppure NON APPLICABILE). Il dettaglio, insieme al caso dell'opzionalità di un'intera gerarchia, è nel capitolo 11.