sta utilizzando i trigger migliori soluzione per questo scenario

1

Un grande database transazionale SQL ha più di 100 tabelle (e crescerà). Uno di questi è chiamato Ordina . Quindi, esiste un'altra tabella WorkLoad che deriva dall'ordine e da molte altre tabelle unite che contengono un elenco di tutti gli ordini attivi. Ogni volta che viene creato un record di ordine, se soddisfa determinate condizioni, dovrebbe essere immediatamente inserito nella tabella WorkLoad. E infine, c'è una terza tabella WorkLoadAggregation che mostra i dati aggregati raggruppati per data e negozio ed è completamente costruita dalla tabella WorkLoad. WorkLoadAggregation dovrebbe inoltre visualizzare dati in tempo reale, il che significa che se un record viene inserito nella tabella WorkLoad, è necessario aggiornare anche l'aggregazione di data / negozio.

La mia idea era di gestire questo per trigger:

  • Quando il record è inserito nella tabella degli ordini , avvia la procedura memorizzata delle chiamate che inserisce i record nella tabella WorkLoad
  • Quando il trigger Il record dell'ordine viene eliminato cancella il record dalla tabella WorkLoad
  • Quando Il record dell'ordine viene aggiornato in modo che non soddisfi le condizioni WorkLoad, il trigger cancella il record dalla tabella WorkLoad
  • Quando il record è inserito / eliminato / aggiornato nella tabella WorkLoad , avvia la procedura memorizzata chiamate che aggiorna il record aggregato di data / negozio nella tabella WorkLoadAggregation

Non ho usato trigger tanto in dbs di transazioni così grandi e per chiamate così frequenti. C'è qualcosa di male in questo approccio? La mia più grande preoccupazione è l'uso di "trigger concatenati", il che significa che il trigger su una tabella attiva il trigger su un'altra tabella. Ho letto alcuni articoli che affermano che gli sviluppatori dovrebbero essere molto cauti quando usano i grilletti. Ci sono soluzioni migliori? Dovrei prendere in considerazione una soluzione NoSQL?

    
posta ilija veselica 13.03.2015 - 21:28
fonte

2 risposte

1

Ti suggerisco di seguire ciò che thomas Stringer ha suggerito nei commenti.

Usa le procedure del negozio per inserire aggiornamenti ed eliminarli dalla tabella degli ordini. In questo modo puoi chiamare una delle tue tabelle contemporaneamente insieme ai dati della query ed eseguire le tue transazioni.

Ulteriori informazioni sulle procedure di MS-SQL Store QUI

    
risposta data 14.03.2015 - 09:37
fonte
1

Scorporò l'opzione di utilizzare i trigger in questo caso. Potrebbe essere meglio pensare in termini API al modello. Come i commenti sottolineano, usa le stored procedure, dato che sarà più facile eseguire il debug nel caso in cui qualcosa vada non secondo il piano , tieni presente che hai una situazione abbastanza complessa; -)

Alcuni riferimenti utili,

risposta data 13.04.2015 - 13:37
fonte

Leggi altre domande sui tag