Esistono due scuole di pensiero sull'esecuzione di calcoli nel database:le persone che pensano che sia fantastico e le persone che si sbagliano. Questo non vuol dire che il mondo delle funzioni, delle procedure memorizzate, delle colonne generate o calcolate e dei trigger sia tutto rose e fiori! Questi strumenti sono tutt'altro che infallibili e implementazioni sconsiderate possono funzionare male, traumatizzare i loro manutentori e altro, il che spiega in qualche modo l'esistenza di controversie.
Ma i database sono, per definizione, molto bravi a elaborare e manipolare le informazioni e la maggior parte di essi mette a disposizione degli utenti lo stesso controllo e potere (SQLite e MS Access in misura minore). I programmi di elaborazione dati esterni iniziano in secondo piano, dovendo estrarre informazioni dal database, spesso attraverso una rete, prima che possano fare qualsiasi cosa. E mentre i programmi di database possono trarre pieno vantaggio dalle operazioni sui set nativi, dall'indicizzazione, dalle tabelle temporanee e da altri frutti di mezzo secolo di evoluzione del database, i programmi esterni di qualsiasi complessità tendono a coinvolgere un certo livello di reinvenzione della ruota. Allora perché non mettere in funzione il database?
Ecco perché potresti non vuoi programmare il tuo database!
La funzionalità del database tende a diventare invisibile, in particolare i trigger. Questa debolezza si adatta approssimativamente alle dimensioni dei team e/o delle applicazioni che interagiscono con il database, poiché meno persone ricordano o sono a conoscenza della programmazione all'interno del database. La documentazione aiuta, ma solo così tanto.
SQL è un linguaggio creato appositamente per la manipolazione di set di dati. Non è particolarmente efficace nelle cose che non manipolano i set di dati, ed è tanto meno efficace quanto più complicate diventano quelle altre cose.
Le capacità RDBMS e i dialetti SQL differiscono. Le colonne generate semplici sono ampiamente supportate, ma il porting di una logica di database più complessa in altri archivi richiede tempo e fatica come minimo.
Gli aggiornamenti dello schema del database sono generalmente più complessi degli aggiornamenti delle applicazioni. È meglio mantenere la logica in rapida evoluzione altrove, anche se può valere la pena dare un'altra occhiata una volta che le cose si saranno stabilizzate.
La gestione dei programmi di database non è così semplice come si potrebbe sperare. Molti strumenti di migrazione dello schema fanno poco o nulla per l'organizzazione, portando a differenze tentacolari e revisioni del codice onerose (i grafici delle dipendenze di Sqitch e la rielaborazione dei singoli oggetti ne fanno un'eccezione notevole e la migrazione cerca di eludere completamente il problema). Nei test, framework come pgTAP e utPLSQL migliorano i test di integrazione black-box, ma rappresentano anche un ulteriore supporto e impegno di manutenzione.
Con una base di codice esterna consolidata, qualsiasi cambiamento strutturale tende a essere sia impegnativo che rischioso.
D'altra parte, per le attività a cui è adatto, SQL offre velocità, concisione, durata e l'opportunità di "canonizzare" i flussi di lavoro automatizzati. La modellazione dei dati è più che fissare entità come insetti su cartone e la distinzione tra dati in movimento e dati inattivi è complicata. Il riposo è davvero un movimento più lento con un grado più fine; le informazioni fluiscono sempre da qui a lì e la programmabilità del database è un potente strumento per gestire e dirigere tali flussi.
Alcuni motori di database dividono la differenza tra SQL e altri linguaggi di programmazione adattando anche quegli altri linguaggi di programmazione. SQL Server supporta funzioni scritte in qualsiasi linguaggio .NET Framework; Oracle dispone di procedure memorizzate Java; PostgreSQL consente estensioni con C ed è programmabile dall'utente in Python, Perl e Tcl, con plug-in che aggiungono script di shell, R, JavaScript e altro. A completare i soliti sospetti, è SQL o niente per MySQL e MariaDB, MS Access è solo programmabile in VBA e SQLite non è affatto programmabile dall'utente.
L'uso di linguaggi non SQL è un'opzione se SQL è inadeguato per alcune attività o se si desidera riutilizzare altro codice, ma non risolverà gli altri problemi che rendono la programmazione del database un'arma a molti tagli. Se non altro, il ricorso a questi complica ulteriormente la distribuzione e l'interoperabilità. Scrittore di avvertenza:fai attenzione allo scrittore.