Quando si sceglie uno schema di database per un data warehouse, fiocco di neve e schemi di stelle tendono ad essere scelte popolari. Questo confronto discute l'idoneità degli schemi stella contro fiocco di neve in diversi scenari e le loro caratteristiche.
Schema Snowflake | Schema di stelle | |
---|---|---|
Facilità di manutenzione / cambiamento | Nessuna ridondanza, quindi gli schemi a fiocco di neve sono più facili da mantenere e modificare. | Ha dati ridondanti e quindi meno facile da mantenere / cambiare |
Facilità d'uso | Domande più complesse e quindi meno facili da capire | Minore complessità delle query e facile comprensione |
Prestazioni di query | Più chiavi esterne e quindi tempi di esecuzione delle query più lunghi (più lenti) | Minor numero di chiavi esterne e quindi tempi di esecuzione delle query più brevi (più veloce) |
Tipo di Datawarehouse | Utile da utilizzare per il core datawarehouse per semplificare le relazioni complesse (molte: molte) | Buono per i datamarts con relazioni semplici (1: 1 o 1: molti) |
Si unisce | Più alto numero di join | Meno iscritti |
Tabella delle dimensioni | Uno schema fiocco di neve può avere più di una tabella di dimensioni per ogni dimensione. | Uno schema a stella contiene solo una tabella a dimensione singola per ogni dimensione. |
Quando usare | Quando la tabella delle dimensioni è di dimensioni relativamente grandi, lo snowflaking è migliore in quanto riduce lo spazio. | Quando la tabella delle dimensioni contiene un numero inferiore di righe, possiamo scegliere lo schema a stella. |
Normalizzazione / De-normalizzazione | Le tabelle di dimensione sono in forma normalizzata ma la tabella dei fatti è in forma de-normalizzata | Entrambe le tabelle Dimension e Fact sono in forma De-Normalized |
Modello di dati | Approccio dal basso verso l'alto | Approccio dall 'alto verso il basso |
Si consideri un database per un rivenditore che ha molti negozi, con ogni negozio che vende molti prodotti in molte categorie di prodotti e di varie marche. Un data warehouse o data mart per un rivenditore di questo tipo dovrebbe fornire agli analisti la possibilità di eseguire report di vendita raggruppati per negozio, data (o mese, trimestre o anno) o categoria o marchio di prodotto.
Se questo data mart stava usando uno schema a stella, apparirebbe come segue:
Esempio di uno schema a stellaLa tabella dei fatti sarebbe una registrazione delle transazioni di vendita, mentre ci sono tabelle delle dimensioni per data, negozio e prodotto. Le tabelle delle dimensioni sono collegate ciascuna alla tabella dei fatti tramite la loro chiave primaria, che è una chiave esterna per la tabella dei fatti. Ad esempio, invece di memorizzare la data della transazione effettiva in una riga della tabella dei fatti, viene salvata la data_id. Questo date_id corrisponde a una riga univoca nella tabella Dim_Date e tale riga memorizza anche altri attributi della data richiesti per il raggruppamento nei report. ad es. giorno della settimana, mese, trimestre dell'anno e così via. I dati sono denormalizzati per facilitare la segnalazione.
Ecco come si otterrebbe una relazione sul numero di televisori venduti per marca e per paese con l'aiuto di join interni.
Lo stesso scenario può anche utilizzare uno schema a fiocco di neve, nel qual caso sarebbe strutturato come segue:
Esempio di schema Snowflake (clicca per ingrandire)La differenza principale, se confrontata con lo schema a stella, è che i dati nelle tabelle delle dimensioni sono più normalizzati. Ad esempio, invece di memorizzare mese, trimestre e giorno della settimana in ciascuna riga della tabella Dim_Date, questi vengono ulteriormente suddivisi nelle rispettive tabelle delle dimensioni. Analogamente per la tabella Dim_Store, lo stato e il paese sono attributi geografici che vengono rimossi solo un passaggio: invece di essere memorizzati nella tabella Dim_Store, sono ora memorizzati in una tabella Dim_Geography separata.
Lo stesso rapporto - il numero di televisori venduti per nazione e per marca - è ora un po 'più complicato che in uno schema a stella:
Query SQL per ottenere il numero di prodotti venduti per paese e marca, quando il database utilizza uno schema a fiocco di neve.