fornirò una risposta basata sul file readme di un mio builder SQL personalizzato ( dialetto )
(segue il testo normale, rimossi i riferimenti specifici della libreria)
Requisiti
- Supporta più fornitori di DB (ad es. MySQL, PostgreSQL, SQLite, MS SQL / SQL Server, Oracle, DB2, ..)
- Esteso facilmente ai nuovi DB (preferibilmente attraverso un'impostazione di configurazione indipendente dall'implementazione)
- Modularità e trasferibilità indipendente dall'implementazione
- API flessibile e intuitiva
Caratteristiche
- modelli basati sulla grammatica
- supporto per visualizzazioni soft personalizzate
- db astrazione, modularità e trasferibilità
- modelli preparati
- fuga di dati
penso che le caratteristiche e i requisiti di cui sopra illustrino i motivi per cui si vorrebbe usare un generatore di astrazioni SQL
La maggior parte delle funzionalità di cui sopra sono supportate dalla maggior parte dei builder SQL (anche se non credo che tutti gli elenchi siano supportati, per quanto ne sappia)
Esempi di casi d'uso:
- Piattaforma CMS in grado di funzionare (senza alcuna modifica del codice sottostante) con più fornitori di DB
- Codice dell'applicazione personalizzato in cui il fornitore di database è suscettibile di modifiche e / o gli schemi dB sono dinamici (ciò significa che molte query non possono essere codificate ma devono essere astratte in modo da rendere il codice robusto per le modifiche)
- Prototipazione con un altro DB rispetto a quello utilizzato in produzione (richiederebbe una base di codice duplicata almeno per parte del codice)
- Il codice dell'applicazione non è strettamente associato al provider DB specifico e / o all'implementazione (anche all'interno dello stesso fornitore DB, ad esempio versioni diverse del fornitore DB), quindi è più robusto, flessibile e modulare
- Molti soliti casi di query e escape dei dati sono gestiti dal framework stesso e di solito questo è sia ottimale che più veloce
Infine, un esempio di un caso d'uso che ho avuto. stavo costruendo un'applicazione in cui lo schema di database sottostante (wordpress) non era adatto al tipo di query di dati che dovevano essere fatte, inoltre dovevano essere usate alcune delle tabelle WP (es. post) (quindi con tabelle completamente nuove per tutti i dati dell'applicazione non era un'opzione).
In quel caso, essere in grado di creare un'applicazione simile a MVC in cui il modello potrebbe essere interrogato da condizioni personalizzate / dinamiche ha reso la query hard-coding quasi un incubo. Immagina di dover supportare l'interrogazione di un massimo di 2-3 tabelle con join e di filtrare le condizioni per vedere a quale tabella unirti e cosa occuparti anche degli alias richiesti e così via.
Chiaramente si trattava di un caso d'uso di astrazione di query e, ancor di più, doveva (o almeno trarne un grande vantaggio) avere la capacità di definire viste soft personalizzate (un conglomerato di tabelle unite come se fossero una tabella personalizzata adatta al modello) . Quindi è stato molto più semplice, pulito, modulare e flessibile. In un altro aspetto, l'applicazione (codice) utilizzava anche il livello di astrazione della query come strumento di normalizzazione (schema db) . Come alcuni dicono, era a prova di futuro .
Se, domani, le persone decidono di aver bisogno di alcune opzioni o dati extra, è molto facile aggiungerlo al modello in un paio di righe e lavorare bene. Inoltre, se domani le persone decidono di non voler più usare wordpress (poiché l'applicazione è liberamente accoppiata a wordpress come plug-in), è anche relativamente facile cambiare ( solo la definizione di) i modelli in un paio di righe di codice per adattarsi al nuovo schema.
Capito quello che intendo?