Quando si tratta di denormalizing dati in un database transazionale per le prestazioni, ci sono (almeno) tre differenti approcci:Pro e contro di trigger vs stored procedure per Denormalizzazione
aggiornamenti far passare le stored procedure che aggiornare sia i dati transazionali normalizzati sia i dati denializzati di reporting/analisi;
Attiva i trigger nelle tabelle transazionali che aggiornano le tabelle secondarie; questo è quasi sempre il percorso intrapreso nel mantenere le storie;
Rinviare l'elaborazione a un processo batch notturno, possibilmente facendo un ETL in un data mart/warehouse.
Supponiamo ai fini di questa domanda che l'opzione # 3 non è praticabile, perché il dominio richiede i dati denormalizzati essere coerenti con i dati normalizzati in ogni momento. Gli aggregati gerarchici, di cui mi occupo piuttosto frequentemente, ne sono un esempio.
Ho usato entrambi i primi due approcci un bel po 'e ultimamente mi sono orientato verso l'approccio basato sul trigger, ma mi chiedo se ci sono "trucchi" che non ho ancora scoperto e ho pensato che valesse la pena di porre questa domanda, quindi avrò alcune idee da tenere a mente quando prendo decisioni a lungo termine in futuro.
Quindi, secondo la vostra esperienza, quali sono i pro e i contro di entrambi gli strumenti allo scopo specifico di mantenere i dati denormalizzati in tempo reale? In quali situazioni sceglieresti l'una sull'altra e perché?
(PS Si prega di non risposte come "trigger sono troppo complicate" o "tutti gli aggiornamenti devono sempre passare attraverso una stored procedure" - rendono opportuno il contesto della questione.)
non è meglio usare una vista materializzata per denormalizzazioni? – Enrique
@Enrique: le viste materializzate non sono una panacea magica; ci sono tutti i tipi di viste che non puoi materializzare (o persino creare con il binding dello schema) e anche se tu potessi, avrebbero approssimativamente le stesse caratteristiche di prestazioni dei trigger. – Aaronaught