Quais são as boas alternativas para SQL (a linguagem)? [fechadas]

95

Ocasionalmente, ouço coisas sobre como SQL é uma merda e não é uma boa linguagem, mas nunca ouço falar muito sobre alternativas a ela. Então, há outras linguagens boas que têm o mesmo propósito (acesso ao banco de dados) e o que as torna melhores que o SQL? Existem bons bancos de dados que usam essa linguagem alternativa?

EDIT: Estou familiarizado com SQL e uso-o o tempo todo. Não tenho nenhum problema com isso, só estou interessado em quaisquer alternativas que possam existir e por que as pessoas gostam mais delas.

Também não estou procurando tipos alternativos de bancos de dados (o movimento NoSQL), apenas maneiras diferentes de acessar bancos de dados.

Brendan Long
fonte
22
SQL é uma merda? Alguma referência?
Murali VP
3
Você não está dizendo que é uma droga em comparação com XML, está?
Bratch,
6
Se SQL realmente é uma droga ou não, é algo que me interessa. Mas aqui está um exemplo: en.wikipedia.org/wiki/The_Third_Manifesto Acho que "uma porcaria" pode ser a palavra errada ...
Brendan Long,
4
Para esclarecer: não tenho problemas com SQL. Eu apenas gosto de aprender sobre outras idéias, caso haja algo melhor.
Brendan Long,
6
Se tiver que ser uma linguagem de consulta e for um RDBMS, verifique Quel: en.wikipedia.org/wiki/QUEL_query_languages - é também o que o Postgres usava antes de 1995, quando também mudou seu nome para excepcionalmente bobo "PostgreSQL".
Ken,

Respostas:

44

Certamente concordo que é difícil trabalhar com a sintaxe SQL, tanto do ponto de vista de gerá-la automaticamente, quanto do ponto de vista de analisá-la, e não é o estilo de linguagem que escreveríamos hoje se estivéssemos projetando SQL para as demandas que colocamos sobre isso hoje. Não acho que encontraríamos tantas palavras-chave variadas se projetássemos a linguagem hoje, suspeito que a sintaxe de junção seria diferente, funções como GROUP_CONCATteriam uma sintaxe mais regular em vez de colocar mais palavras-chave no meio dos parênteses para controlar seu comportamento ... crie sua própria lista de inconsistências e redundâncias em SQL que você gostaria / espera ver eliminada se redesenharmos a linguagem hoje.

Não existem alternativas ao SQL para se comunicar com bancos de dados relacionais (ou seja, SQL como um protocolo), mas existem muitas alternativas para escrever SQL em seus aplicativos. Essas alternativas foram implementadas na forma de front-ends para trabalhar com bancos de dados relacionais. Alguns exemplos de front-end incluem:

  • SchemeQL e CLSQL , que são provavelmente os mais flexíveis, devido à sua herança Lisp, mas também se parecem muito mais com SQL do que outros front-ends.
  • LINQ (em .Net)
  • ScalaQL e ScalaQuery (em Scala)
  • SqlStatement , ActiveRecord e muitos outros em Ruby,
  • HaskellDB
  • ... a lista continua para muitos outros idiomas.

Acho que o tema subjacente hoje é que, em vez de substituir o SQL por uma nova linguagem de consulta, estamos criando front-ends específicos de linguagem para ocultar o SQL em nossas linguagens de programação normais do dia-a-dia e tratando o SQL como o protocolo para falar com relacional bancos de dados.

Ken Bloom
fonte
Interessante. Mas isso faz sentido.
Brendan Long,
11
É verdade, mas o ideal seria uma linguagem de consulta que funcionasse bem como linguagem . O fato de o SQL ter sido reduzido a um protocolo é uma prova de sua fraqueza como linguagem.
3
Viva Ken! Três anos atrás, eu estava lutando com o crescente débito técnico que resultou da prática corporativa típica de copiar partes de consultas SQL repetidamente com pequenas alterações, porque não existe encapsulamento ou métodos locais em SQL. Eu pesquisei ScalaQuery em sua postagem (que agora é chamada de Slick) e reescrevi todo o sistema e a cada 6 consultas se tornou 1, apenas porque você poderia encapsular e ter métodos locais! Se alguém está sofrendo de horrores SQL, procure Scala Slick ou Quill e prepare-se para a iluminação!
ChoppyTheLumberjack
18

Dê uma olhada nesta lista.

O Hibernate Query Language é provavelmente o mais comum. A vantagem do Hibernate é que os objetos mapeiam muito facilmente (quase automaticamente) para o banco de dados relacional, e o desenvolvedor não precisa gastar muito tempo fazendo o design do banco de dados. Verifique o site do Hibernate para mais informações. Tenho certeza de que outros irão intervir com outras linguagens de consulta interessantes ...

Claro, há muitas coisas NoSQL por aí, mas você menciona especificamente que não está interessado nelas.

Mike Cialowicz
fonte
Definitivamente, o tipo de coisa que eu estava procurando.
Brendan Long,
Essa lista tem uma coleção muito estranha de idiomas. Não acho que XQuery pertença e não sei o suficiente sobre D para saber por que ela pertence.
Ken Bloom,
1
@Ken Bloom aparentemente existe uma linguagem de consulta chamada D e uma linguagem separada do tipo C chamada D. A primeira que pensei foi a linguagem do tipo C ..
Brendan Long
Definitivamente, falei rápido demais sobre D. Quando vi o nome, estava pensando em Digital Mars 'D - vejo que a linguagem de dados D é algo totalmente diferente.
Ken Bloom,
2
c2.com/cgi/wiki?QueryLanguageComparison também vale a pena
Ken Bloom,
13

"Eu ocasionalmente ouço coisas sobre como o SQL é uma merda e não é uma boa linguagem"

O SQL tem mais de trinta anos. As percepções sobre "quais recursos tornam algo uma linguagem 'boa' e quais a tornam uma linguagem 'ruim'" evoluíram mais rapidamente do que o próprio SQL.

Além disso, SQL não é uma linguagem que está em conformidade com os padrões atuais de "o que é necessário para ser relacional", portanto, SQL simplesmente não é uma linguagem relacional para inicializar.

"mas nunca ouço falar muito sobre alternativas a isso."

Convido você a refletir sobre a possibilidade de estar tentando ouvir apenas nos lugares errados (ou seja, exclusivamente na indústria comercial de DBMS).

"Então, há outras linguagens boas que têm o mesmo propósito (acesso ao banco de dados) e o que as torna melhores do que o SQL?"

Date & Darwen descrevem as características às quais uma linguagem moderna de manipulação de dados deve se conformar em seu "Terceiro Manifesto", a versão mais recente do qual consta em seu livro "Bancos de dados, Tipos e Modelo Relacional".

"Existem bons bancos de dados que usam essa linguagem alternativa?"

Se por "bom" você quer dizer algo como "força industrial", então não. A coisa mais próxima disponível provavelmente seria Dataphor.

O projeto Rel oferece uma implementação para a linguagem Tutorial D definida em "Bancos de dados, Tipos e Modelo Relacional", mas o objetivo principal atual do Rel é ser educacional por natureza.

Meu projeto SIRA_PRISE oferece uma implementação para gerenciamento de dados "verdadeiramente relacional", mas eu hesito em rotulá-lo também como "uma implementação de uma linguagem".

E, claro, você também pode examinar algumas coisas não relacionais, como alguns propuseram, mas eu pessoalmente rejeito o gerenciamento de dados não relacionais como várias décadas de regressão tecnológica. Isso não vale a pena considerar.

Ah, e por falar nisso, um sistema de software que é usado para gerenciar bancos de dados não é "um banco de dados", mas "um sistema de gerenciamento de banco de dados", "DBMS" para breve. Assim como uma fotografia não é a mesma coisa que uma câmera, e se você estiver discutindo sobre câmeras e quiser evitar confusão, use a palavra adequada "câmeras" em vez de "fotografia".

Erwin Smout
fonte
Bancos de dados não relacionais parecem ter alguma utilidade (alguns aplicativos obtêm melhor desempenho com dados menos estruturados), então eu não o chamaria de regressão. Boa resposta, entretanto.
Brendan Long,
2
É uma antiga frustração de todas as pessoas relacionais que "desempenho" pareça ser percebido como uma característica do modelo . Essa percepção é falha, ponto final. O desempenho é uma característica das implementações do modelo. O fato de qualquer implementação atualmente existente do RM de fato parecer frequentemente levantar problemas de desempenho, é uma combinação de vários fatores: (a) implementar o RM por completo é simplesmente extremamente difícil, (b) os fornecedores de DBMS não pressionam o suficiente para o novo progresso da implementação e (c) usuários sem compreensão suficiente dos algoritmos subjacentes.
Erwin Smout
3
@Erwin Mas se descobrirmos que um modelo específico é inerentemente difícil de implementar de maneira eficiente, então certamente é justo dizer que há um problema com esse modelo do ponto de vista da eficiência.
Jay,
SQL é horrível. 30 anos atrás, usar gramática e palavras semelhantes ao inglês provavelmente parecia uma boa ideia, vagamente amigável e melhor do que nada, mas hoje sabemos que não é, é melhor expressar conceitos de computador em linguagem simbólica. Se você quiser usar o inglês, é melhor ter um analisador de linguagem natural adequado. O SQL não faz nenhum esforço para analisar corretamente a linguagem natural, é apenas uma série de hacks com (às vezes opcionais) palavras em inglês para torná-lo mais confuso.
Rolf de
2
Bem, sim, SQL é horrível, mas não exatamente pelo motivo que você mencionou. Se "não simbólico o suficiente" fosse o verdadeiro culpado, todos estaríamos usando APL. A linguagem que é tão extremamente simbólica que a maioria das pessoas a rotula como a única linguagem somente escrita do mundo. Os símbolos da linguagem SQL coincidem com certas palavras que aparecem no dicionário Oxford ou Webster. Não há nenhuma razão fundamental para que isso seja, por si só, um problema.
Erwin Smout
12

Talvez você esteja pensando na crítica que C. Date e seus amigos fizeram contra os bancos de dados relacionais existentes e SQL; eles dizem que os sistemas e a linguagem não são 100% relacionais e deveriam ser. Eu realmente não vejo nenhum problema real aqui; Pelo que eu posso ver, você pode ter um sistema 100% relacional, se quiser, apenas disciplinando a maneira como você usa o SQL.

O que eu pessoalmente continuo encontrando é a falta de poder expressivo que o SQL herda de sua base teórica, a álgebra relacional. Um problema é a falta de suporte para o uso de ordenação de domínio, que você encontra quando trabalha com dados marcados por datas, carimbos de data / hora, etc. Certa vez, tentei fazer um aplicativo de relatório inteiramente em SQL simples em um banco de dados cheio de carimbos de data / hora e simplesmente não era viável. Outra é a falta de suporte para a travessia de caminho: a maioria dos meus dados parecem gráficos direcionados nos quais preciso percorrer os caminhos, e o SQL não pode fazer isso. (Falta "fechamento transitivo". SQL-1999 pode fazer isso com "subconsultas recursivas", mas ainda não as vi em uso real. Existem também vários hacks para fazer o SQL lidar, mas eles são feios.) Esses problemas são também discutido por alguns dos escritos de Date, a propósito.

Recentemente, fui apontado para .QL, que parece resolver muito bem o problema de fechamento transitivo, mas não sei se pode resolver o problema com domínios ordenados.

reinierpost
fonte
4
Existem algumas falhas que impedem "sistemas 100% relacionais" mesmo com "disciplinar a forma como se usa SQL", porque SQL, não é verdadeiramente relacional. Exemplo: SELECT Sum (foo) BAR Blah WHERE 1 = 0. SQL retorna nulo, 100% relacional exige zero. carfield.com.hk/document/misc/SQL_Problems.pdf
McKay
1
Além disso, você escreve "DISTINCT" após cada seleção?
McKay
Sim, eu evitaria NULL completamente (então é necessário haver uma caixa especial para resultados vazios) e escrever DISTINCT em todos os lugares ou pelo menos onde eu precisar usar COUNT.
reinierpost
8

Resposta direta: não acho que haja nenhum candidato sério por aí. DBase e seus imitadores (Foxpro, Codebase etc) foram um competidor por um tempo, mas eu acho que eles basicamente perderam a guerra de linguagem de consulta de banco de dados. Existem muitos outros produtos de banco de dados que têm sua própria linguagem de consulta, como Progress e Paradox e vários outros que usei cujos nomes não lembro e certamente muitos mais dos quais nunca ouvi falar. Mas não acho que nenhum outro concorrente chegou perto de obter uma fatia não trivial do mercado.

Como prova simples de que há uma diferença entre um formato de banco de dados e uma linguagem de consulta, a última versão do DBase que usei - muitos anos atrás - ofereceu tanto a linguagem de consulta "tradicional" DBase quanto SQL, que poderiam ser usadas para acessar os mesmos dados.

Divagação lateral: Eu não diria que SQL é uma merda, mas tem muitas falhas. Com o benefício dos anos de experiência e visão retrospectiva que temos agora, tenho certeza que seria possível projetar uma linguagem de consulta melhor. Mas criar uma linguagem de consulta melhor e convencer as pessoas a usá-la são duas coisas muito diferentes. Seria melhor convencer as pessoas de que valeu a pena aprender. As pessoas investiram muitos anos de suas vidas aprendendo a usar o SQL de maneira eficaz. Mesmo que seu novo idioma seja mais fácil de usar, certamente haverá uma curva de aprendizado. E como você migraria seus sistemas existentes de SQL para a nova linguagem? Etc. Isso pode ser feito, é claro, assim como C ++, C # e Java derrubaram amplamente o COBOL e o FORTRAN. Mas é necessária uma combinação de superioridade técnica e bom marketing para conseguir isso.

Ainda assim, recebo uma risada das pessoas que correm para defender o SQL sempre que alguém o critica, que insistem que qualquer problema que você tenha com o SQL deve ser sua própria inaptidão em usá-lo e não qualquer falha do SQL, que você simplesmente não deve ter atingiu o plano superior de coisas necessárias para compreender sua perfeição, etc. Acalme-se, respire fundo: estamos insultando uma linguagem de computador, não sua mãe.

Jay
fonte
1
@Jay: uma possível substituição do SQL poderia ser nenhuma linguagem específica de banco de dados, use sua linguagem de programação OO usual para persistência de dados. Veja minha resposta sobre bancos de dados de objetos e ORM. Eu não diria que os ORMs não estão obtendo alguma participação no mercado hoje em dia.
Kriss
Kriss: Eu estava pensando que ORMs não são uma "linguagem de consulta", mas sim algo que fica em cima de uma linguagem de consulta. Suponho que se é isso que você usa para se comunicar com o banco de dados, pode ser considerada a linguagem de consulta e talvez eu esteja apenas sendo pedante. Tipo, eu me lembro de ler muitos anos atrás que COBOL e C não são REALMENTE linguagens de computador, que apenas montadores são linguagens de computador reais. COBOL e C são apenas coisas que são traduzidas para uma linguagem de computador. O argumento parecia então e agora simplesmente bobo.) Então: Ok, vou aceitar isso.
Jay
1
Esta resposta pode estar ficando desatualizada. Agora existem bancos de dados não SQL, como Mongo, etc, que têm uma fatia não trivial do mercado.
Jay
8

Dê uma olhada em LINQ to SQL ...

Tentei alguns meses atrás e nunca mais olhei para trás ...

thiag0
fonte
1
Linq é maravilhoso, mas apenas se você estiver desenvolvendo em .NET :)
Justin Ethier
7

Na década de 1980, ObjectStore fornecia acesso transparente a objetos. Era como um RDBMS mais um ORM, exceto sem todas aquelas camadas de abstração extras: ele armazenava objetos diretamente no banco de dados.

Portanto, esta alternativa era realmente "nenhuma linguagem", ou talvez "a linguagem que você já está usando". Você escreveria código C ++ e criaria ou atravessaria objetos como se fossem objetos nativos, e o banco de dados cuidaria de tudo conforme necessário. Mais ou menos como o ActiveRecord, mas na verdade funcionou tão bem quanto afirmam as blitzes de marketing do ActiveRecord. :-)

(Claro, ele não tinha o músculo de marketing da Oracle e não tinha o custo zero do MySQL, então todo mundo o ignorou. E agora tentamos replicar isso com RDBMSs e ORMs, e algumas pessoas tentam argumentar que as tabelas realmente faz sentido para armazenar objetos, e escrever um arquivo XML gigante para dizer ao seu computador como mapear objetos para tabelas é de alguma forma uma solução razoável.)

Ken
fonte
2
A desvantagem desse tipo de ter sua linguagem de consulta ser "a linguagem que você já está usando", pelo menos naquela época, é que não havia muito espaço para o banco de dados otimizar os padrões de acesso. Uma coisa que eu gosto no SQL é que ele é declarativo, e o banco de dados faz o trabalho básico para descobrir como executar melhor a consulta. Nenhuma outra linguagem hoje chega perto de fornecer tanta inteligência sobre otimização. Só acho que normalizaríamos as palavras-chave um pouco mais e simplificaríamos a sintaxe se a reescrevêssemos hoje.
Ken Bloom,
4
Contraponto: otimizadores de consulta são, no grande esquema das coisas, muito burros. Veja quantas perguntas "ajude-me a otimizar minha consulta" existem aqui no SO. Para escrever uma consulta eficiente, você precisa entender o que o otimizador de consulta fará. Eu já tenho um profiler para meu ambiente de programação - e um depurador, por falar nisso - e eles são muito melhores do que qualquer EXPLAIN que eu já vi. Não sei o quão bom o ObjectStore é nisso, mas uma pilha de software homogênea pode ser incrível .
Ken
Em 2011, você pode simplesmente baixar a versão gratuita do Gemstone e do programa em Smalltalk. A única coisa a se pensar é como migrar instâncias de uma versão de classe para outra (os casos simples que ele lida automaticamente)
Stephan Eggermont,
6

O movimento geral hoje em dia é o NoSQL; geralmente essas tecnologias são:

Pessoalmente, acho que não há nada de errado com o SQL, desde que ele atenda às suas necessidades. SQL é expressivo e ótimo para trabalhar com dados estruturados.

Justin Ethier
fonte
2
+1 para bancos de dados orientados a documentos. Conforme os conjuntos de dados aumentam de tamanho, os modelos relacionais podem se tornar muito lentos ...
Mike Cialowicz,
2
O que você mencionou não são alternativas ao SQL, nem mesmo são linguagens. Iniciativas como Apache Pig e Apache Hive são mais parecidas.
reinierpost de
5

Acho que você pode estar interessado em examinar o Dataphor , que é um ambiente de desenvolvimento relacional de código aberto com seu próprio servidor de banco de dados (que fala D) e a capacidade de derivar interfaces de usuário de sua linguagem de consulta.

Além disso, parece que Ingres ainda oferece suporte a QUEL e é de código aberto.

Ken Bloom
fonte
Tecnicamente, a linguagem que o servidor dataphor fala é D4, D (ou tutorial D ...) é uma linguagem ligeiramente diferente.
McKay
Tornando-se ainda mais pedante, D não é uma linguagem, mas uma especificação que Date & Darwen fornecem. Eles usam o "Tutorial D" como linguagem de exemplo. D4 se qualifica como D, ou pelo menos principalmente, mas McKay está correto ao dizer que deve ser "um D", não que "é D". Há um documento de conformidade na documentação do Dataphor.
N8allan
4

O SQL funciona bem para o domínio para o qual foi projetado - tabelas de dados inter-relacionadas. Isso geralmente é encontrado no processamento de dados de negócios tradicional. SQL não funciona muito bem ao tentar persistir uma rede complexa de objetos.

Se suas necessidades forem armazenar e processar dados relativamente tradicionais, use algum DBMS baseado em SQL.

Em resposta à sua edição:

Se você está procurando alternativas ao SQL DML para recuperar dados de armazenamentos de dados relacionais, nunca ouvi falar de nenhuma alternativa séria ao SQL.

Os golpes que o SQL recebe não são, eu acho, muito contra a linguagem, em oposição aos princípios de armazenamento de dados subjacentes nos quais a linguagem é baseada. Muitas vezes as pessoas confundem a linguagem SQL com o modelo de dados relacional no qual os RDBMSs são construídos.

Larry Lustig
fonte
1
Sim, percebi depois de escrever isso que todas as coisas que SQL e bancos de dados relacionais são a mesma coisa ..
Brendan Long
4

Bancos de dados relacionais não são o único tipo de banco de dados que existe. Devo dizer uma palavra sobre Bancos de Dados de Objetos, pois não tenho visto nas respostas de outras pessoas. Eu tive alguma experiência com o framework Zope python que usa ZODB para persistência de objetos em vez de RDBMS (bem, é teoricamente possível substituir o ZODB por outro banco de dados dentro do zope, mas da última vez que verifiquei não tive sucesso em fazê-lo funcionar, então pode seja positivo sobre isso).

A mentalidade do ZODB é realmente diferente, mais parecida com a programação de objetos que seria persistente.

ORM pode ser visto como um tipo de linguagem

De certa forma, acredito que o modelo de banco de dados de objeto é o que ORM trata: acessar dados persistentes por meio de seu modelo de objeto usual. É um tipo de linguagem e está ganhando alguma participação no mercado, mas por enquanto não a vemos como uma linguagem, mas como uma camada de abstração. No entanto, acredito que seria muito mais eficiente usar um ORM sobre um banco de dados-objeto do que sobre SQL (em outras palavras, o desempenho de ORMs que usei usando algum banco de dados SQL como camadas de base foi uma droga).

Kriss
fonte
3

Existem muitas implementações de SQL (SQL Server, mysql, Oracle, etc.), mas não há outra linguagem que sirva ao mesmo propósito no sentido de ser uma linguagem de propósito geral projetada para armazenamento e recuperação de dados relacionais .

tem bancos de dados de objetos , como db4o , e existem também os chamados bancos de dados noSQL que se referem a praticamente qualquer mecanismo de armazenamento de dados que não depende de SQL, mas mais comumente produtos de código aberto como Cassandra baseados vagamente no conceito Bigtable do Google .

Existem também vários produtos de banco de dados de propósito especial, como o CDF, mas você provavelmente não precisa se preocupar com eles - se precisar, você saberá.

Nenhum deles é equivalente a SQL.

Isso não significa que eles sejam "melhores" ou "piores" - eles simplesmente não são iguais. Dennis Forbes escreveu um ótimo post recentemente detalhando uma série de declarações estranhas que surgiram contra o SQL. Ele afirma (e eu concordo) que essas reclamações se originam em grande parte de pessoas e lojas que escolheram a ferramenta errada para o trabalho em primeiro lugar ou não estão usando seu SGBD SQL corretamente (nem fico mais surpreso quando eu veja outro banco de dados SQL onde cada coluna é um varchar(50)e não há um único índice ou chave, em qualquer lugar).

Se você estiver implementando mais um site de rede social e não estiver muito preocupado com os princípios do ACID , comece a pesquisar produtos como o db4o. Se você está desenvolvendo um sistema de negócios de missão crítica, no entanto, eu altamente altamente recomendo que você pense duas vezes antes de entrar para o "SQL suga" coro. Faça a pesquisa primeiro, descubra quais recursos os vários produtos podem e não podem oferecer suporte.


Editar - Eu estava ocupado escrevendo minha resposta e não obtive a atualização da pergunta por alguns minutos. Dito isso, o SQL é essencialmente inseparável do próprio DBMS. Se você executar um produto de banco de dados SQL, poderá acessá-lo com SQL, ponto final.

Talvez você esteja procurando abstrações sobre a sintaxe; Linq to SQL, Entity Framework, Hibernate / NHibernate, SubSonic e uma série de outras ferramentas ORM fornecem sua própria sintaxe semelhante a SQL que não é exatamente SQL. Tudo isso "compila" para SQL. Se você executar o SQL Server, também poderá escrever Funções / Procedimentos / Gatilhos CLR, que permitem escrever código em qualquer linguagem .NET que será executada dentro do banco de dados; entretanto, isso não é realmente um substituto para o SQL, mais uma extensão para ele.

Não conheço nenhuma "linguagem" completa que possa ser aplicada em camadas sobre um banco de dados SQL; antes de mudar para um produto de banco de dados diferente, você eventualmente verá SQL em funcionamento.

Aaronaught
fonte
Acho que você está confundindo bancos de dados relacionais com bancos de dados SQL. Não há nenhuma razão particular para um banco de dados relacional usar SQL (exceto todos os outros o usam). E sim, eu percebo que a maioria dos produtos de banco de dados usa apenas SQL.
Brendan Long,
1
@Brendan Long: Correto, um banco de dados relacional não precisa usar SQL. No entanto, isso é o que os bancos de dados relacionais fazer uso. Outros produtos não SQL existentes hoje não são bancos de dados relacionais.
Aaronaught,
E quanto a D e Quel? Eles não parecem muito populares, mas existem (e são usados ​​para bancos de dados relacionais).
Brendan Long,
1
@Brendan Long: Quel, até onde eu sei, foi substituído pelo SQL. A primeira vez que ouvi falar de D, e pelo artigo wiki que li, parece que não é realmente uma linguagem em si, mas um conjunto definido de recursos que uma linguagem de banco de dados deve ter. Embora possa haver algumas implementações muito obscuras, não acho que isso mude substancialmente nada acima. Além disso, acho que você deve perceber que quando as pessoas dizem "SQL é uma merda", elas não estão se referindo à gramática SQL, mas (com ou sem razão) se referindo a bancos de dados relacionais baseados em SQL.
Aaronaught,
3

SQL é de fato.

Frameworks que tentam proteger os desenvolvedores disso eventualmente criaram sua própria linguagem específica (Hibernate HQL vem à mente).

SQL resolve um problema muito bem. Não é mais difícil de aprender do que uma linguagem de programação de alto nível. Se você já conhece uma linguagem funcional, é muito fácil entender o SQL.

Considerando que os principais fornecedores de banco de dados que fornecem bancos de dados de última geração (Oracle e SQL Server) suportam SQL e investiram anos em motores de otimização, etc. e todos os principais softwares de modelagem de dados e negócios de software de gerenciamento de mudanças em SQL, eu diria que é o aposta mais segura.

Além disso, um banco de dados envolve mais do que apenas consultas. Existe escalabilidade, backup e recuperação, mineração de dados. Os grandes fornecedores oferecem suporte a muitas coisas que nem mesmo os novos mecanismos de "cache" consideram.

Codenheim
fonte
LINQ não é uma linguagem projetada para proteger os desenvolvedores de SQL, é uma sintaxe de consulta usada para interrogar coleções, que pode ser estendida para oferecer suporte a diferentes fontes de coleção. Os bancos de dados SQL são apenas uma dessas fontes.
Khanzor
Bom ponto, LINQ não é um exemplo válido. Editado.
codenheim
2

Problemas com SQL me motivaram a preparar um rascunho de linguagem de consulta chamada SMEQL no wiki Portland Pattern Repository . Comentários Bem-vindos. Ele empresta ideias da programação funcional e da linguagem experimental Business System 12 da IBM. (Eu originalmente o chamei de TQL, mas descobri mais tarde que esse nome já existia.)

Tablizer
fonte
o SMEQL vive? Existe fora do C2? Existe software?
david.pfx
Há também "BQL" - proposta de superconjunto SQL, que pode ser transpilada para SQL tech.pro/blog/1917/…
Nickolay
1

Dentro do mundo .NET, embora ainda tenha uma sensação SQL, o LINQ-to-SQL permitirá que você tenha uma boa combinação de processamento de dados SQL e .NET na memória. Também simplifica muito o encanamento de dados de nível inferior que ninguém realmente deseja fazer.

Se você deseja ver um tipo de banco de dados com uma mentalidade completamente diferente, dê uma olhada no CouchDB . "Melhor" é obviamente um requisito relativo e esse tipo de banco de dados sem relação é "Melhor", mas apenas em determinados cenários.

Jaxidian
fonte
0

SQL a linguagem é muito poderosa e os sistemas de gerenciamento de banco de dados relacional foram e ainda são um grande sucesso. Mas existe uma classe de aplicativo que requer escalabilidade e disponibilidade muito altas, mas não necessariamente um alto grau de consistência de dados (consistência eventual é o que importa). Uma variedade de sistemas obtém melhor desempenho e escala do que um RDBMS, relaxando a necessidade de transações totalmente compatíveis com ACID. Eles foram chamados de "NoSQL", mas, como outros apontam, esse é um nome impróprio: talvez devessem ser chamados de bancos de dados NoACID.

Michael Stonebraker aborda isso em A discussão "NoSQL" não tem nada a ver com SQL .

Jim Ferrans
fonte
Então, os "bancos de dados" NoACID são uma alternativa ao SQL como linguagem de acesso a banco de dados? Não, eles não são.
reinierpost de
Embora SQL seja poderoso, Álgebra Relacional é mais poderoso.
McKay
@reineirpost: Concordo. Você pode usar o SQL para consultar um banco de dados NoACID. Você poderia consultar arquivos de texto em vez de relações também (algumas das antigas ferramentas de linha de comando do Unix correspondem a operações em álgebra relacional.
Jim Ferrans
@McKay: Existe algum RDBMS comercial que suporte sintaxe de álgebra relacional? Isso seria legal.
Jim Ferrans,
Outras pessoas neste tópico mencionaram coisas como Dataphor e com o objetivo de acompanhar melhor a Álgebra Relacional.
McKay