Importanza delle stored procedure e dei trigger nella creazione di applicazioni Web? [duplicare]

1

Quasi in ogni intervista per la posizione di sviluppatore web, chiedono informazioni sulle stored procedure e sui trigger sono consapevole della loro definizione e dell'uso di base, ma la verità è che non ho mai usato nessuno di loro in nessuno dei miei progetti. Bene, ho visto altri sviluppatori che li hanno usati, ma solo quando erano l'unica soluzione.

La mia domanda è che sono davvero importanti e l'intervista è incompleta senza porre domande su trigger e stored procedure. Tendo a mantenere quasi tutte le mie logiche in PHP, come se la modifica in una riga della tabella del database richieda una modifica in un'altra riga della tabella del database, eseguo un'altra query da PHP invece che scrivere trigger, è errata o cattiva pratica? devo cambiare il mio approccio? Qualche esempio in cui l'uso di stored procedure e trigger è migliore rispetto a eseguire operazioni simili in PHP?

    
posta Umair Abid 04.09.2013 - 08:34
fonte

2 risposte

4

Well I have seen other developers who used them but only when they were the only solution.

Le stored procedure e le query sono mai la unica soluzione. Nessuno ti obbliga a rafforzare la coerenza nel database. Diavolo, non devi nemmeno usare il database in primo luogo. Oppure puoi usarne uno che non ha alcuna funzione.

Ma ci sono molte situazioni in cui forniscono alcuni vantaggi utili:

  1. Sicurezza. Molti motori di database possono concedere l'autorizzazione per eseguire una stored procedure senza concedere autorizzazioni generali alle tabelle sottostanti. Ancor di più usando i trigger per scrivere i record della cronologia (ciò che è stato modificato quando e da chi, chiamato anche audit trail) ha il grande vantaggio che anche se l'applicazione è compromessa, gli hacker non saranno in grado di disabilitare la registrazione.

  2. Regole di coerenza complicate. A volte si hanno vincoli di integrità utili che non possono essere espressi da semplici chiavi esterne, vincoli univoci e simili. È ora di controllarli con il trigger.

  3. Coerenza tra più applicazioni. Quando hai una query complessa che deve essere eseguita in modo coerente da diversi client, puoi inserirla nella stored procedure.

  4. Schermatura di più client dalle modifiche nello schema. Se il database è accessibile da più client, se è necessario modificare lo schema per uno di essi, le stored procedure e le viste possono nascondere le modifiche agli altri in modo da non doverli aggiornare immediatamente.

Esistono tuttavia alcuni svantaggi, in particolare per le stored procedure:

  1. Rendono il codice difficile da capire. Per comprendere il codice che elabora una query è necessario conoscere la query e la query raramente ha senso senza il codice che la circonda. Per schemi molto complessi, a volte è possibile aggiungere un livello più semplice di viste e stored procedure, ma evitare assolutamente la politica di mettere tutto nelle stored procedure.

  2. Sono dolorose il retro della versione. Il codice dell'applicazione di versioning è ben gestito, ma la gestione dello schema del database richiede la scrittura di molti script di aggiornamento e alcuni macchinari per applicarli o molto lavoro manuale soggetto a errori. Poiché i trigger e le stored procedure sono soggetti anche a questo, molti di essi aumentano il lavoro.

risposta data 04.09.2013 - 09:18
fonte
0

Mi piace utilizzare le stored procedure quando si utilizza MSSQL, poiché in MSSQL è possibile assegnare autorizzazioni utente solo alla stored procedure. La mia limitata esperienza con MySQL e Postgres mostra che le stored procedure sono ancora una buona pratica, ma le autorizzazioni devono sempre essere concesse sulle tabelle utilizzate dalla procedura.

Fondamentalmente, io uso le stored procedure per separare la sintassi SQL dal progetto stesso. Sai, sbarazzati di tutte le istruzioni SELECT nel codice. È anche più semplice modificare una stored procedure piuttosto che individuare l'istruzione SQL corretta nel codice.

Per quanto riguarda i trigger, li stiamo abusando al concerto attuale per registrare i dati su insert e aggiornare le tabelle di log (politica aziendale, non la mia idea). Altrimenti, consiglierei di stare lontano da loro, a meno che non siano assolutamente necessari.

    
risposta data 04.09.2013 - 08:43
fonte

Leggi altre domande sui tag