C'è qualche vantaggio nell'includere le relazioni nella progettazione della tabella dello schema a stella?

StackOverflow https://stackoverflow.com/questions/838169

Domanda

Sto progettando le tabelle Fact e Dimension per un data warehouse che attualmente utilizza SQL Server, SSIS e SSAS. Avrò qualche vantaggio reale dalla programmazione delle relazioni tra le dimensioni e le tabelle dei fatti in SQL? O sto meglio definendo manualmente le relazioni quando arriva il momento di creare i cubi?

Sembra che sia più facile caricare e trasformare i dati se non ho alcun vincolo sul mio inserimento dei dati nelle tabelle e quindi tralascio le relazioni.

È stato utile?

Soluzione

Sto interpretando " programmando le relazioni " come significato per mettere vincoli di chiave esterna sulle tabelle.

No, in un data warehouse non è necessario imporre vincoli di chiave primaria o chiave esterna alle tabelle dei fatti.

Hai menzionato alcuni problemi e un altro problema è che questi vincoli comportano un sovraccarico di prestazioni durante l'inserimento di righe, il che renderà il processo ETL più costoso.

Per qualcuno che ha sperimentato solo la progettazione di database transazionali, questo potrebbe andare contro tutto ciò che hanno appreso e vissuto. I vincoli di chiave esterna sono fondamentali per i database in cui sono presenti più processi che modificano i dati contemporaneamente. Esiste il rischio preciso che due processi rovinino i dati in qualche modo, nonostante i migliori sforzi degli sviluppatori. I vincoli sono una rete di sicurezza fondamentalmente vitale.

In un modello dimensionale, il database è sempre e solo popolato da un processo ETL e in modo altamente controllato. Ciò riduce significativamente il rischio che i dati vengano danneggiati, al punto che il costo aggiuntivo dei vincoli non ne vale la pena.

Altri suggerimenti

Penso che dobbiamo avere vincoli FK, poiché gli aggiornamenti a DW sono controllati "principalmente" ma non sempre. Ad esempio, correzioni di dati manuali si verificano in caso di problemi di dati e simili. [Idealmente questo non deve succedere, ma .... :)]

Per garantire che le chiavi non influiscano sulle prestazioni, possiamo disabilitarle prima del caricamento e abilitarle di nuovo. Questo può darci la sicurezza che i dati siano corretti e rimuovere anche eventuali problemi di prestazioni durante il caricamento. Un'altra cosa da ricordare è che i tempi di elaborazione non sono un grosso vincolo per la maggior parte dei Data Warehouse.

Se si considera il tempo necessario per risolvere potenziali problemi di integrità dei dati, vale la pena avere FK.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top