Best practice per rappresentare SQL nel codice sorgente del programma

4

Dove le istruzioni SQL vengono eseguite da un programma, qual è la procedura migliore per memorizzare il testo dell'istruzione?

Molto spesso si trova in una stringa di sola lettura, nel file sorgente in cui viene eseguito.

Penso che un approccio migliore sarebbe avere un file di testo separato contenente tutte le istruzioni SQL, che vengono quindi lette in un oggetto dizionario in cui la chiave è lo scopo di tale affermazione. Le dichiarazioni possono quindi essere eseguite utilizzando la loro chiave, disaccoppiando l'implementazione del database dal programma e consentendo il riutilizzo delle istruzioni tra gli oggetti del programma.

È efficiente? Esiste un modo migliore? Grazie!

    
posta Daniel 27.11.2012 - 17:26
fonte

2 risposte

5

L'unica ragione per cui posso pensare di trattare SQL come dati anziché codice è se si generano dinamicamente istruzioni SQL e non è necessario memorizzarle.

In realtà ci sono dei vantaggi nell'andare nella direzione opposta; codificando le istruzioni SQL in stored procedure, è possibile beneficiare di determinate ottimizzazioni di sicurezza e prestazioni che RDBMS può fornire.

SQL è già naturalmente "parametrizzato"; se è necessaria ulteriore flessibilità oltre a quella, è necessario bilanciare attentamente i requisiti delle applicazioni con le ulteriori sfide di sicurezza che deriveranno dal trattamento delle istruzioni SQL come dati. SQL injection è un esempio di potenziale perdita di sicurezza che può verificarsi.

Se hai bisogno di istruzioni CRUD (create, read, update, delete) generalizzate per ciascuna delle tue tabelle, dovresti utilizzare un Object-Relational Mapper per generarle.

    
risposta data 27.11.2012 - 17:56
fonte
1

Direi che il modo migliore è utilizzare le stored procedure, se il DBMS lo supporta, per i seguenti motivi:

  • Centralizzano le logiche in modo da non dover tenere sincronizzate più copie, il che sembra essere ciò che ti interessa di più.
  • Centralizzano il controllo dei permessi (autorizzazione) sul DBMS.
  • Sono precompilati, quindi corrono più velocemente.
  • (minore) La dimensione della stringa inviata in rete è inferiore (il codice e il DBMS di solito vengono eseguiti su server diversi).
risposta data 27.11.2012 - 18:15
fonte

Leggi altre domande sui tag