Database
 sql >> Database >  >> RDS >> Database

Unità Funzionali


Introduzione

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.



Funzioni e procedure