Quali sono le buone alternative a SQL (il linguaggio)? [chiuso]


95

Di tanto in tanto sento cose su come SQL fa schifo e non è un buon linguaggio, ma non ho mai sentito parlare molto di alternative ad esso. Quindi, ci sono altri buoni linguaggi che servono allo stesso scopo (accesso al database) e cosa li rende migliori di SQL? Esistono buoni database che utilizzano questo linguaggio alternativo?

EDIT: ho familiarità con SQL e lo uso sempre. Non ho problemi con esso, sono solo interessato a qualsiasi alternativa che potrebbe esistere e perché alle persone piacciono di più.

Inoltre, non sto cercando tipi alternativi di database (il movimento NoSQL), ma solo modi diversi di accedere ai database.


22
SQL fa schifo? Eventuali riferimenti?
Murali VP

3
Non stai dicendo che fa schifo rispetto a XML, vero?
Bratch

6
Se SQL fa davvero schifo o no è qualcosa che mi interessa. Ecco un esempio però: en.wikipedia.org/wiki/The_Third_Manifesto Immagino che "fa schifo" potrebbe essere la parola sbagliata ..
Brendan Long

4
Per chiarire: non ho problemi con SQL. Mi piace solo conoscere altre idee nel caso ci sia qualcosa di meglio.
Brendan Long

6
Se deve essere un linguaggio di query e deve essere per un RDBMS, controlla Quel: en.wikipedia.org/wiki/QUEL_query_languages - è anche quello che Postgres usava prima del 1995, quando ha anche cambiato il suo nome in eccezionalmente stupido "PostgreSQL".
Ken

Risposte:


44

Sono certamente d'accordo sul fatto che la sintassi di SQL sia difficile da lavorare, sia dal punto di vista della sua generazione automatica, sia dal punto di vista dell'analisi, e non è lo stile del linguaggio che scriveremmo oggi se progettassimo SQL per le richieste che poniamo su di esso oggi. Non penso che troveremmo così tante parole chiave diverse se progettassimo il linguaggio oggi, sospetto che la sintassi di join sarebbe diversa, funzioni come GROUP_CONCATavrebbero una sintassi più regolare invece di inserire più parole chiave nel mezzo delle parentesi per controllarne il comportamento ... crea la tua lista personale di incongruenze e ridondanze in SQL che vorresti / ti aspetteresti di vedere appianate se riprogettassimo il linguaggio oggi.

Non ci sono alternative a SQL per parlare con database relazionali (cioè SQL come protocollo), ma ci sono molte alternative alla scrittura di SQL nelle vostre applicazioni. Queste alternative sono state implementate sotto forma di frontend per lavorare con database relazionali. Alcuni esempi di frontend includono:

  • SchemeQL e CLSQL , che sono probabilmente i più flessibili, a causa della loro eredità Lisp, ma sembrano anche molto più simili a SQL rispetto ad altri frontend.
  • LINQ (in .Net)
  • ScalaQL e ScalaQuery (in Scala)
  • SqlStatement , ActiveRecord e molti altri in Ruby,
  • HaskellDB
  • ... l'elenco continua per molte altre lingue.

Penso che il tema di fondo oggi sia che invece di sostituire SQL con un nuovo linguaggio di query, stiamo invece creando frontend specifici del linguaggio per nascondere l'SQL nei nostri linguaggi di programmazione quotidiani e trattando SQL come il protocollo per parlare con i relazionali banche dati.


Interessante. Tuttavia ha senso.
Brendan Long

11
Vero, ma idealmente ci sarebbe un linguaggio di query che funziona bene come un linguaggio . Il fatto che SQL sia stato ridotto a un protocollo è una testimonianza della sua debolezza come linguaggio.

3
Evviva Ken! Tre anni fa stavo lottando con il crescente debito tecnico derivante dalla tipica pratica aziendale di copiare pezzi di query SQL più e più volte con lievi alterazioni perché non esiste l'incapsulamento o metodi locali in SQL. Ho cercato ScalaQuery dal tuo post (che ora si chiama Slick) e ho riscritto l'intero sistema e ogni 6 query diventano 1, solo perché potresti incapsulare e avere metodi locali! Se qualcuno soffre di orrori SQL, cerca Scala Slick o Quill e preparati per l'illuminazione!
ChoppyTheLumberjack

18

Dai un'occhiata a questo elenco.

Hibernate Query Language è probabilmente il più comune. Il vantaggio di Hibernate è che gli oggetti vengono mappati molto facilmente (quasi automaticamente) al database relazionale e lo sviluppatore non deve dedicare molto tempo alla progettazione del database. Controlla il sito web di Hibernate per maggiori informazioni. Sono sicuro che altri interverranno con altri linguaggi di query interessanti ...

Certo, ci sono molte cose NoSQL là fuori, ma dici specificamente che non sei interessato a quelle.


Sicuramente il tipo di cosa che stavo cercando.
Brendan Long

Quell'elenco contiene una strana raccolta di lingue. Non credo che XQuery appartenga e non so abbastanza su D per sapere perché appartiene.
Ken Bloom

1
@Ken Bloom apparentemente c'è un linguaggio di query chiamato D e un linguaggio separato simile a C chiamato D. Il primo a cui ho pensato è stato il linguaggio simile a c ..
Brendan Long

Ho decisamente parlato troppo velocemente di D. Quando ho visto il nome, stavo pensando a Digital Mars 'D - vedo che il linguaggio dei dati D è qualcosa di completamente diverso.
Ken Bloom


13

"Di tanto in tanto sento cose su come SQL fa schifo e non è un buon linguaggio"

SQL ha più di trent'anni. Le intuizioni su "quali caratteristiche rendono qualcosa un linguaggio" buono "e quali lo rendono" cattivo "" si sono evolute più rapidamente dello stesso SQL.

Inoltre, SQL non è un linguaggio conforme agli standard attuali di "ciò che serve per essere relazionale", quindi SQL non è semplicemente un linguaggio relazionale da avviare.

"ma non ho mai sentito molto parlare di alternative ad esso."

Ti invito a riflettere sulla possibilità che tu stia cercando di ascoltare solo nei posti sbagliati (cioè, esclusivamente nell'industria commerciale dei DBMS).

"Quindi, ci sono altri buoni linguaggi che hanno lo stesso scopo (accesso al database) e cosa li rende migliori di SQL?"

Date e Darwen descrivono le caratteristiche alle quali un moderno linguaggio di manipolazione dei dati deve conformarsi nel loro "Terzo Manifesto", la cui versione più recente è contenuta nel loro libro "Databases, Types & the Relational Model".

"Esistono dei buoni database che utilizzano questo linguaggio alternativo?"

Se per "buono" intendi qualcosa come "forza industriale", allora no. La cosa più vicina disponibile sarebbe probabilmente Dataphor.

Il progetto Rel offre un'implementazione per il linguaggio Tutorial D definito in "Database, tipi e modello relazionale", ma l'attuale obiettivo principale di Rel è essere di natura educativa.

Il mio progetto SIRA_PRISE offre un'implementazione per la gestione dei dati "veramente relazionale", ma esito a etichettarlo anche "un'implementazione di un linguaggio".

E, naturalmente, potresti anche esaminare alcune cose non relazionali, come alcuni hanno proposto, ma personalmente respingo la gestione dei dati non relazionali come molteplici decenni di regressione tecnologica. Non vale la pena considerare, cioè.

Oh, a proposito, un sistema software utilizzato per gestire i database non è "un database", ma "un sistema di gestione di database", in breve "DBMS". Proprio come una fotografia non è la stessa cosa di una macchina fotografica, e se parli di macchine fotografiche e vuoi evitare confusione, allora dovresti usare la parola corretta "macchine fotografiche" invece di "fotografia".


I database non relazionali sembrano avere qualche utilità (alcune applicazioni ottengono prestazioni migliori da dati meno strutturati), quindi non la definirei una regressione. Bella risposta però.
Brendan Long,

2
È un'antica frustrazione di tutte le persone relazionali che la "performance" sembri essere percepita come una caratteristica del modello . Quella percezione è imperfetta, punto. Le prestazioni sono una caratteristica delle implementazioni del modello. Il fatto che qualsiasi implementazione attualmente esistente della RM sembri effettivamente sollevare spesso problemi di prestazioni, è una combinazione di più fattori: (a) implementare completamente la RM è semplicemente estremamente difficile, (b) i fornitori di DBMS non spingono abbastanza per il progresso della nuova implementazione e (c) utenti che non hanno una conoscenza sufficiente degli algoritmi sottostanti.
Erwin Smout

3
@Erwin Ma se troviamo che un particolare modello è intrinsecamente difficile da implementare in modo efficiente, allora sicuramente è giusto dire che c'è un problema con quel modello dal punto di vista dell'efficienza.
Jay il

SQL è orribile. 30 anni fa, usare la grammatica e le parole in stile inglese probabilmente suonava come una buona idea, come vagamente user-friendly e meglio di niente, ma oggi sappiamo che non lo è, è meglio esprimere i concetti del computer in un linguaggio simbolico. Se si desidera utilizzare l'inglese, è meglio disporre di un analizzatore di linguaggio naturale appropriato. SQL non fa alcuno sforzo per analizzare correttamente il linguaggio naturale, è solo una serie di hack con parole inglesi (a volte facoltative) inserite per renderlo più confuso.
Rolf

2
Ebbene sì, SQL è orribile ma non proprio per il motivo che dici. Se "non abbastanza simbolico" fosse il vero colpevole, useremmo tutti APL. Il linguaggio che è così estremamente simbolico che la maggior parte delle persone lo etichetta come l'unico linguaggio di sola scrittura al mondo. I simboli del linguaggio SQL coincidono con alcune parole che appaiono nel dizionario di Oxford o Webster. Non c'è una ragione fondamentale per cui questo sarebbe, di per sé, un problema.
Erwin Smout

12

Forse stai pensando alle critiche che C. Date ei suoi amici hanno mosso contro i database relazionali esistenti e SQL; dicono che i sistemi e il linguaggio non sono relazionali al 100% e dovrebbero esserlo. Non vedo davvero alcun problema reale qui; per quanto ne so puoi avere un sistema relazionale al 100%, se vuoi, semplicemente disciplinando il modo in cui usi SQL.

Quello che personalmente continuo a incontrare è la mancanza di potere espressivo che SQL eredita dalla sua base teorica, l'algebra relazionale. Un problema è la mancanza di supporto per l'uso dell'ordinamento del dominio, in cui ti imbatti quando lavori con dati contrassegnati da date, timestamp, ecc. Una volta ho provato a fare un'applicazione di reportistica interamente in semplice SQL su un database pieno di timestamp e semplicemente non era fattibile. Un altro è la mancanza di supporto per l'attraversamento del percorso: la maggior parte dei miei dati assomiglia a grafici diretti in cui ho bisogno di attraversare i percorsi e SQL non può farlo. (Manca la "chiusura transitiva". SQL-1999 può farlo con "sottoquery ricorsive" ma non le ho ancora viste in uso. Ci sono anche vari hack per far fronte a SQL, ma sono brutti.) Questi problemi sono discusso anche da alcuni degli scritti di Date, tra l'altro.

Recentemente mi è stato indicato .QL che sembra affrontare bene il problema della chiusura transitiva, ma non so se può risolvere il problema con i domini ordinati.


4
Ci sono alcuni difetti che impediscono "sistemi relazionali al 100%" anche con "disciplinare il modo in cui si usa SQL", perché SQL, non è veramente relazionale. Esempio: SELECT Sum (foo) BAR Blah WHERE 1 = 0. SQL restituisce null, il 100% relazionale richiede uno zero. carfield.com.hk/document/misc/SQL_Problems.pdf
McKay

1
Inoltre, scrivi "DISTINCT" dopo ogni selezione?
McKay

Sì, eviterei completamente NULL (quindi ci deve essere un caso speciale per risultati vuoti) e scriverò DISTINCT ovunque o almeno ovunque sia necessario usare COUNT.
reinierpost

8

Risposta diretta: non credo che ci sia alcun serio concorrente là fuori. DBase ei suoi imitatori (Foxpro, Codebase ecc.) Sono stati un contendente per un po ', ma penso che fondamentalmente abbiano perso la guerra del linguaggio delle query del database. Ci sono stati molti altri prodotti di database che avevano il proprio linguaggio di query, come Progress e Paradox e molti altri che ho usato di cui non ricordo i nomi e sicuramente molti altri di cui non ho mai sentito parlare. Ma non penso che nessun altro concorrente si sia mai avvicinato a ottenere una quota di mercato non banale.

Come semplice prova dell'esistenza di una differenza tra un formato di database e un linguaggio di query, l'ultima versione di DBase che ho usato - molti anni fa ora - offriva sia il linguaggio di query DBase "tradizionale" che SQL, entrambi i quali potevano essere utilizzati per accedere agli stessi dati.

Divagazione laterale: non direi che SQL fa schifo, ma ha molti difetti. Con il vantaggio degli anni di esperienza e del senno di poi che abbiamo ora, sono sicuro che si potrebbe progettare un linguaggio di query migliore. Ma creare un linguaggio di query migliore e convincere le persone a usarlo sono due cose molto diverse. Sarebbe abbastanza meglio convincere le persone che valeva la pena di imparare. Le persone hanno investito molti anni della loro vita imparando a usare efficacemente SQL. Anche se la tua nuova lingua fosse più facile da usare, ci sarebbe sicuramente una curva di apprendimento. E come migreresti i tuoi sistemi esistenti da SQL alla nuova lingua? Ecc. Può essere fatto, ovviamente, proprio come C ++, C # e Java hanno ampiamente rovesciato COBOL e FORTRAN. Ma ci vuole una combinazione di superiorità tecnica e buon marketing per riuscirci.

Tuttavia, ricevo una risatina dalle persone che si affrettano a difendere SQL ogni volta che qualcuno lo critica, che insistono sul fatto che qualsiasi problema che hai con SQL deve essere la tua inettitudine nell'usarlo e non una colpa di SQL, che semplicemente non devi avere raggiunto il piano più alto di cose necessarie per comprenderne la perfezione, ecc. Calmati, fai un respiro profondo: stiamo insultando un linguaggio informatico, non tua madre.


1
@ Jay: una possibile sostituzione di SQL potrebbe essere l'assenza di un linguaggio specifico del database, usa il tuo solito linguaggio di programmazione OO per la persistenza dei dati. Vedi la mia risposta su Database di oggetti e ORM. Non direi che gli ORM non stanno ottenendo quote di mercato al giorno d'oggi.
kriss

Kriss: Stavo pensando che gli ORM non sono un "linguaggio di query" ma piuttosto qualcosa che si trova sopra un linguaggio di query. Suppongo che se questo è ciò che usi per comunicare con il database, potrebbe essere considerato il linguaggio di query, e forse sono solo pedante. Ad esempio, ricordo molti anni fa di aver letto che COBOL e C non sono VERAMENTE linguaggi per computer, che solo gli assemblatori sono veri linguaggi per computer. COBOL e C sono solo cose che vengono tradotte in un linguaggio per computer. L'argomento sembrava allora e adesso essere semplicemente sciocco.) Quindi: Ok, lo comprerò.
Jay

1
Questa risposta potrebbe essere obsoleta. Ora ci sono database non SQL, come Mongo, ecc., Che hanno una quota di mercato non banale.
Jay,

8

Dai un'occhiata a LINQ to SQL ...

L'ho provato un paio di mesi fa e non ho mai guardato indietro ...


1
Linq è meraviglioso, ma solo se stai sviluppando su .NET :)
Justin Ethier

7

Già negli anni '80 ObjectStore forniva un accesso trasparente agli oggetti. Era un po 'come un RDBMS più un ORM, tranne che senza tutti quei livelli di astrazione che perdono in più: memorizzava gli oggetti direttamente nel database.

Quindi questa alternativa era davvero "nessuna lingua", o forse "la lingua che stai già utilizzando". Si scriveva codice C ++ e si creavano o si attraversavano oggetti come se fossero oggetti nativi e il database si prendeva cura di tutto secondo necessità. Un po 'come ActiveRecord, ma in realtà ha funzionato così come affermano i blitz di marketing di ActiveRecord. :-)

(Ovviamente, non aveva i muscoli di marketing di Oracle e non aveva il costo zero di MySQL, quindi tutti l'hanno ignorato. E ora proviamo a replicarlo con RDBMS e ORM, e alcune persone cercano di sostenere che le tabelle in realtà ha senso per memorizzare gli oggetti e che scrivere un gigantesco file XML per dire al tuo computer come mappare gli oggetti alle tabelle è in qualche modo una soluzione ragionevole.)


2
Lo svantaggio di questo tipo di linguaggio di query è "la lingua che stai già utilizzando", almeno in quei giorni, è che non c'era molto spazio per il database per ottimizzare i modelli di accesso. Una cosa che mi piace di SQL è che è dichiarativo e il database fa il lavoro essenziale per capire come preformare al meglio la query. Nessun altro linguaggio oggi si avvicina a fornire tanta intelligenza sull'ottimizzazione. Penso solo che normalizzeremmo un po 'di più le parole chiave e semplificheremmo la sintassi se la riscrivessimo oggi.
Ken Bloom

4
Contrappunto: gli ottimizzatori di query sono, nel grande schema delle cose, piuttosto stupidi. Guarda quante domande "aiutami a ottimizzare la mia query" ci sono qui su SO. Per scrivere una query efficiente, devi capire cosa farà l'ottimizzatore di query. Ho già un profiler per il mio ambiente di programmazione - e un debugger, per quella materia - e sono miglia meglio di qualsiasi EXPLAIN che abbia mai visto. Non so quanto sia buono ObjectStore in questo, ma uno stack di software omogeneo può essere fantastico .
Ken

Nel 2011, puoi semplicemente scaricare la versione gratuita di Gemstone e programmare in Smalltalk. L'unica cosa a cui pensare è come migrare le istanze di una versione di classe in un'altra (i casi semplici che gestisce automaticamente)
Stephan Eggermont

6

Il movimento generale in questi giorni è NoSQL; generalmente queste tecnologie sono:

Personalmente penso che non ci sia nulla di sbagliato in SQL fintanto che si adatta alle tue esigenze. SQL è espressivo e ottimo per lavorare con dati strutturati.


2
+1 per i database orientati ai documenti. Man mano che le dimensioni dei set di dati crescono, i modelli relazionali possono diventare molto lenti ...
Mike Cialowicz

2
Ciò che dici non sono alternative a SQL, non sono nemmeno linguaggi. Iniziative come Apache Pig e Apache Hive sono più simili.
reinierpost

5

Penso che potresti essere interessato a guardare Dataphor , che è un ambiente di sviluppo relazionale open source con il proprio server di database (che parla D) e la capacità di derivare le interfacce utente dal suo linguaggio di query.

Inoltre, sembra che Ingres supporti ancora QUEL ed è open source.


Tecnicamente, la lingua parlata dal server dataphor è D4, D (o tutorial D ...) è una lingua leggermente diversa.
McKay

Diventando ancora più pedante, D non è un linguaggio ma una specifica fornita da Date & Darwen. Usano "Tutorial D" come linguaggio di esempio. D4 si qualifica come D, o almeno per lo più così, ma McKay ha ragione nel dire che dovrebbe essere "un D", non che "è D". C'è un documento di conformità nella documentazione di Dataphor.
N8allan

4

SQL funziona bene per il dominio per il quale è stato progettato: tabelle di dati correlate. Questo si trova generalmente nell'elaborazione tradizionale dei dati aziendali. SQL non funziona così bene quando si cerca di mantenere una complessa rete di oggetti.

Se le tue esigenze sono archiviare ed elaborare dati relativamente tradizionali, utilizza alcuni DBMS basati su SQL.

In risposta alla tua modifica:

Se stai cercando alternative a SQL DML per il recupero di dati da archivi di dati relazionali, non ho mai sentito parlare di alcuna alternativa seria a SQL.

I colpi che SQL ottiene non sono, credo, tanto contro il linguaggio quanto contro i principi di archiviazione dei dati su cui si basa il linguaggio. Le persone spesso confondono il linguaggio SQL con il modello di dati relazionali su cui sono costruiti gli RDBMS.


1
Sì, dopo aver scritto questo ho capito che tutte le cose che SQL e database relazionali sono la stessa cosa ..
Brendan Long

4

I database relazionali non sono l'unico tipo di database in circolazione. Dovrei dire una parola sugli oggetti-database perché non l'ho visto nelle risposte degli altri. Ho avuto una certa esperienza con il framework python Zope che usa ZODB per la persistenza degli oggetti invece di RDBMS (beh, è ​​teoricamente possibile sostituire ZODB con un altro database all'interno di zope ma l'ultima volta che ho controllato non sono riuscito a farlo funzionare, quindi posso essere positivo al riguardo).

La mentalità ZODB è davvero diversa, più simile alla programmazione di oggetti che sarebbe persistente.

ORM può essere visto come una sorta di linguaggio

In un certo senso credo che il modello di database a oggetti sia ciò di cui si occupa l'ORM: accedere ai dati persistenti attraverso il tuo solito modello di oggetti. È una specie di linguaggio e sta guadagnando quote di mercato, ma per ora non lo vediamo come un linguaggio ma come uno strato di astrazione. Tuttavia, credo che sarebbe molto più efficiente utilizzare un ORM su un database di oggetti rispetto a SQL (in altre parole le prestazioni degli ORM che mi è capitato di utilizzare utilizzando alcuni database SQL come livelli di base risucchiati).


3

Esistono molte implementazioni di SQL (SQL Server, mysql, Oracle, ecc.), Ma non esiste nessun altro linguaggio che abbia lo stesso scopo nel senso di essere un linguaggio generico progettato per l'archiviazione e il recupero dei dati relazionali .

Esistono database a oggetti come db4o e ci sono cosiddetti database noSQL simili che si riferiscono a quasi tutti i meccanismi di archiviazione dei dati che non si basano su SQL, ma più comunemente prodotti open source come Cassandra si basano vagamente sul concetto Bigtable di Google .

Ci sono anche una serie di prodotti di database per scopi speciali come CDF, ma probabilmente non devi preoccuparti di quelli - se ne hai bisogno, lo saprai.

Nessuno di questi è equivalente a SQL.

Ciò non significa che siano "migliori" o "peggiori" - semplicemente non sono la stessa cosa. Dennis Forbes ha recentemente scritto un ottimo post analizzando una serie di strane affermazioni che emergono contro SQL. Sostiene (e sono d'accordo) che questi reclami provengono in gran parte da persone e negozi che hanno scelto lo strumento sbagliato per il lavoro in primo luogo, o non utilizzano correttamente il proprio DBMS SQL (non sono nemmeno più sorpreso quando ho vedere un altro database SQL in cui ogni colonna è una varchar(50)e non c'è un singolo indice o chiave, ovunque).

Se stai implementando un altro sito di social networking e non ti preoccupi troppo dei principi ACID , inizia a cercare prodotti come db4o. Se stai sviluppando un sistema aziendale mission-critical, tuttavia, ti consiglio vivamente di pensarci due volte prima di unirti al coro "SQL fa schifo". Fai prima la ricerca, scopri quali caratteristiche possono o non possono supportare i vari prodotti.


Modifica: ero impegnato a scrivere la mia risposta e non ho ricevuto l'aggiornamento della domanda da pochi minuti. Detto questo, SQL è essenzialmente inseparabile dal DBMS stesso. Se esegui un prodotto database SQL, accederai con SQL, punto.

Forse stai cercando astrazioni sulla sintassi; Linq to SQL, Entity Framework, Hibernate / NHibernate, SubSonic e una miriade di altri strumenti ORM forniscono tutti la propria sintassi simile a SQL che non è proprio SQL. Tutti questi si "compilano" in SQL. Se esegui SQL Server, puoi anche scrivere Funzioni / Procedure / Trigger CLR, che ti consentono di scrivere codice in qualsiasi linguaggio .NET che verrà eseguito all'interno del database; tuttavia, questo non è realmente un sostituto di SQL, più che altro un'estensione.

Non sono a conoscenza di alcuna "lingua" completa che è possibile sovrapporre a un database SQL; a parte il passaggio a un prodotto di database diverso, alla fine vedrai SQL sul pipe.


Penso che tu stia confondendo i database relazionali con i database SQL. Non c'è alcun motivo particolare per cui un database relazionale debba usare SQL (tranne che tutti gli altri lo usano). E sì, mi rendo conto che la maggior parte dei prodotti di database utilizza solo SQL.
Brendan Long,

1
@Brendan Long: è corretto, un database relazionale non deve utilizzare SQL. Tuttavia, questo è ciò che utilizzano i database relazionali . Altri prodotti non SQL esistenti oggi non sono database relazionali.
Aaronaught

Che mi dici di D e Quel? Non sembrano molto popolari, ma esistono (e sono usati per i database relazionali).
Brendan Long,

1
@Brendan Long: Quel, per quanto ne so, è stato sostituito da SQL. La prima volta che ho sentito parlare di D, e dall'articolo wiki che ho guardato sembra che non sia realmente un linguaggio in sé, ma piuttosto un insieme definito di funzionalità che un linguaggio DB dovrebbe avere. Anche se potrebbero esserci alcune implementazioni molto oscure, non penso che questo cambi sostanzialmente nulla di cui sopra. Inoltre, penso che dovresti capire che quando le persone dicono "SQL fa schifo", non si riferiscono alla grammatica SQL, si riferiscono (a torto oa ragione) a database relazionali basati su SQL.
Aaronaught

3

SQL è di fatto.

I framework che cercano di proteggere gli sviluppatori da esso hanno alla fine creato il proprio linguaggio specifico (viene in mente Hibernate HQL).

SQL risolve un problema abbastanza bene. Non è più difficile da imparare di un linguaggio di programmazione di alto livello. Se conosci già un linguaggio funzionale, apprendere SQL è un gioco da ragazzi.

Considerando i principali fornitori di database che forniscono database all'avanguardia (Oracle e SQL Server) supportano SQL e hanno investito anni in motori di ottimizzazione, ecc. E tutti i principali software di modellazione dati e software di gestione delle modifiche in SQL, direi che è il scommessa più sicura.

Inoltre, in un database c'è di più che semplici query. C'è scalabilità, backup e ripristino, data mining. I grandi fornitori supportano molte cose che nemmeno i nuovi motori "cache" non prendono in considerazione.


LINQ non è un linguaggio progettato per proteggere gli sviluppatori da SQL, è una sintassi di query utilizzata per interrogare le raccolte, che può essere estesa per supportare diverse origini di raccolta. I database SQL sono semplicemente una di quelle fonti.
Khanzor

Buon punto, LINQ non è un esempio valido. Modificato.
codenheim

2

Problemi con SQL mi hanno spinto a creare una bozza di linguaggio di query chiamato SMEQL nel wiki di Portland Pattern Repository . Commenti Benvenuto. Prende in prestito idee dalla programmazione funzionale e dal linguaggio sperimentale di IBM Business System 12. (Inizialmente l'ho chiamato TQL, ma in seguito ho scoperto che quel nome è stato preso.)


SMEQL vive? Esiste al di fuori di C2? C'è un software?
david.pfx

C'è anche "BQL" - proposta SQL superset, che può essere trasferita in SQL tech.pro/blog/1917/…
Nickolay

1

Nel mondo .NET, sebbene abbia ancora un aspetto simile a SQL, LINQ-to-SQL ti consentirà di avere un buon mix di SQL e l'elaborazione .NET in memoria dei tuoi dati. Inoltre, semplifica molto l'impianto di dati di livello inferiore che nessuno vuole veramente fare.

Se vuoi vedere un tipo di database con una mentalità completamente diversa, dai un'occhiata a CouchDB . "Migliore" è ovviamente un requisito relativo e questo tipo di database non correlato è "Migliore", ma solo in determinati scenari.


0

SQL la lingua è molto potente ei sistemi di gestione dei database relazionali hanno avuto e sono ancora un enorme successo. Ma esiste una classe di applicazioni che richiede una scalabilità e una disponibilità molto elevate, ma non necessariamente un alto grado di coerenza dei dati (la coerenza finale è ciò che conta). Una varietà di sistemi offre prestazioni e scalabilità migliori rispetto a un RDBMS riducendo la necessità di transazioni completamente conformi ad ACID. Questi sono stati chiamati "NoSQL", ma come altri sottolineano, questo è un termine improprio: che forse dovrebbero essere chiamati database NoACID.

Michael Stonebraker copre questo aspetto nella discussione "NoSQL" non ha nulla a che fare con SQL .


Quindi i "database" NoACID sono un'alternativa a SQL come linguaggio di accesso ai database? No non lo sono.
reinierpost

Mentre SQL è potente, l'algebra relazionale è più potente.
McKay

@reineirpost: d'accordo. È possibile utilizzare SQL per interrogare un database NoACID. Potresti interrogare anche file di testo invece che relazioni (alcuni degli antichi strumenti della riga di comando Unix corrispondono a operazioni di algebra relazionale.
Jim Ferrans

@ McKay: Esiste un RDBMS commerciale che supporti una sintassi di algebra relazionale? Quello dovrebbe essere bello.
Jim Ferrans,

Altre persone in questo thread hanno menzionato cose come Dataphor e mirano a seguire meglio l'algebra relazionale.
McKay
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.