Quelles sont les bonnes alternatives à SQL (le langage)? [fermé]

95

J'entends parfois des choses sur la façon dont SQL est nul et ce n'est pas un bon langage, mais je n'entends jamais vraiment parler d'alternatives. Alors, existe-t-il d'autres bons langages qui servent le même objectif (accès à la base de données) et qu'est-ce qui les rend meilleurs que SQL? Existe-t-il de bonnes bases de données utilisant cette langue alternative?

EDIT: Je connais SQL et je l'utilise tout le temps. Je n'ai pas de problème avec ça, je suis juste intéressé par toutes les alternatives qui pourraient exister, et pourquoi les gens les aiment mieux.

Je ne cherche pas non plus d'autres types de bases de données (le mouvement NoSQL), juste différentes façons d'accéder aux bases de données.

Brendan Long
la source
22
SQL est nul? Des références?
Murali VP
3
Vous ne dites pas que ça craint par rapport à XML, n'est-ce pas?
Bratch
6
Que SQL suce ou non est quelque chose qui m'intéresse. Voici un exemple cependant: en.wikipedia.org/wiki/The_Third_Manifesto Je suppose que "sucks" pourrait être le mauvais mot.
Brendan Long
4
Pour clarifier: je n'ai aucun problème avec SQL. J'aime juste apprendre d'autres idées au cas où il y aurait quelque chose de mieux.
Brendan Long
6
Si cela doit être un langage de requête, et doit être pour un SGBDR, alors consultez Quel: en.wikipedia.org/wiki/QUEL_query_languages - c'est aussi ce que Postgres utilisait avant 1995, quand il a également changé son nom en exceptionnellement idiot "PostgreSQL".
Ken

Réponses:

45

Je conviens certainement que la syntaxe de SQL est difficile à utiliser, à la fois du point de vue de sa génération automatique et du point de vue de son analyse, et ce n'est pas le style de langage que nous écririons aujourd'hui si nous concevions SQL pour les demandes que nous imposons dessus aujourd'hui. Je ne pense pas que nous trouverions autant de mots-clés variés si nous concevions le langage aujourd'hui, je soupçonne que la syntaxe de jointure serait différente, des fonctions comme GROUP_CONCATauraient une syntaxe plus régulière plutôt que de coller plus de mots-clés au milieu des parenthèses pour contrôler son comportement ... créez votre propre liste d'incohérences et de redondances dans SQL que vous aimeriez / espérez voir aplanir si nous avons repensé le langage aujourd'hui.

Il n'y a pas d'alternative à SQL pour parler aux bases de données relationnelles (c'est-à-dire SQL en tant que protocole), mais il existe de nombreuses alternatives à l'écriture de SQL dans vos applications. Ces alternatives ont été implémentées sous la forme d'interfaces pour travailler avec des bases de données relationnelles. Voici quelques exemples de frontend:

  • SchemeQL et CLSQL , qui sont probablement les plus flexibles, en raison de leur héritage Lisp, mais ils ressemblent aussi beaucoup plus à SQL qu'aux autres interfaces.
  • LINQ (dans .Net)
  • ScalaQL et ScalaQuery (dans Scala)
  • SqlStatement , ActiveRecord et bien d'autres en Ruby,
  • HaskellDB
  • ... la liste est longue pour de nombreuses autres langues.

Je pense que le thème sous-jacent aujourd'hui est qu'au lieu de remplacer SQL par un nouveau langage de requête, nous créons plutôt des interfaces spécifiques au langage pour masquer le SQL dans nos langages de programmation quotidiens habituels, et traitons SQL comme le protocole pour parler aux relations relationnelles. bases de données.

Ken Bloom
la source
Intéressant. Cela a du sens cependant.
Brendan Long
11
C'est vrai, mais idéalement, il y aurait un langage de requête qui fonctionne bien en tant que langage . Le fait que SQL ait été réduit à un protocole témoigne de sa faiblesse en tant que langage.
3
Hourra Ken! Il y a trois ans, je luttais avec la dette technique croissante qui résultait de la pratique d'entreprise typique de copier des éléments de requête SQL encore et encore avec de légères modifications, car il n'y a pas d'encapsulation ou de méthodes locales en SQL. J'ai recherché ScalaQuery à partir de votre message (qui s'appelle maintenant Slick) et réécrit l'ensemble du système et toutes les 6 requêtes deviennent 1, simplement parce que vous pouvez encapsuler et avoir des méthodes locales! Si quelqu'un souffre d'horreurs SQL, recherchez Scala Slick ou Quill et préparez-vous à l'illumination!
ChoppyTheLumberjack
18

Jetez un œil à cette liste.

Le langage de requête Hibernate est probablement le plus courant. L'avantage d'Hibernate est que les objets sont mappés très facilement (presque automatiquement) à la base de données relationnelle, et le développeur n'a pas à passer beaucoup de temps à concevoir la base de données. Consultez le site Web Hibernate pour plus d'informations. Je suis sûr que d'autres vont intervenir avec d'autres langages de requête intéressants ...

Bien sûr, il y a beaucoup de choses NoSQL là-bas, mais vous mentionnez spécifiquement que cela ne vous intéresse pas.

Mike Cialowicz
la source
Certainement le genre de chose que je recherchais.
Brendan Long
Cette liste contient une collection très étrange de langues. Je ne pense pas que XQuery appartienne, et je ne connais pas suffisamment D pour savoir pourquoi il appartient.
Ken Bloom
1
@Ken Bloom apparemment, il y a un langage de requête appelé D, et un langage séparé de type C appelé D. Le premier auquel j'ai pensé était le langage de type c ..
Brendan Long
J'ai certainement parlé trop vite de D. Quand j'ai vu le nom, je pensais à Digital Mars 'D - je vois que le langage de données D est tout autre chose.
Ken Bloom
2
c2.com/cgi/wiki?QueryLanguageComparison vaut également la peine
Ken Bloom
13

"J'entends parfois des choses sur la façon dont SQL est nul et ce n'est pas un bon langage"

SQL a plus de trente ans. Les connaissances sur «quelles fonctionnalités font de quelque chose un 'bon' langage et lesquelles en font un 'mauvais' langage» ont évolué plus rapidement que SQL lui-même.

De plus, SQL n'est pas un langage conforme aux normes actuelles de «ce qu'il faut pour être relationnel», donc, SQL n'est tout simplement pas un langage relationnel pour démarrer.

"mais je n'entends jamais vraiment parler d'alternatives."

Je vous invite à réfléchir à la possibilité que vous n'essayez d'entendre que dans les mauvais endroits (c'est-à-dire exclusivement dans l'industrie du SGBD commercial).

"Alors, existe-t-il d'autres bons langages qui servent le même objectif (accès à la base de données) et qu'est-ce qui les rend meilleurs que SQL?"

Date & Darwen décrivent les caractéristiques auxquelles un langage moderne de manipulation de données doit se conformer dans leur «Troisième Manifeste», dont la version la plus récente est énoncée dans leur livre «Bases de données, types et modèle relationnel».

"Existe-t-il de bonnes bases de données utilisant ce langage alternatif?"

Si par «bien», vous entendez quelque chose comme «force industrielle», alors non. La chose la plus proche disponible serait probablement Dataphor.

Le projet Rel propose une implémentation du langage Tutorial D défini dans "Bases de données, types et modèle relationnel", mais l'objectif principal actuel de Rel est d'être de nature éducative.

Mon projet SIRA_PRISE propose une implémentation pour une gestion de données "vraiment relationnelle", mais j'hésite à l'appeler aussi "une implémentation d'un langage".

Et bien sûr, vous pouvez également vous pencher sur des éléments non relationnels, comme certains l'ont proposé, mais je rejette personnellement la gestion des données non relationnelles comme plusieurs décennies de régression technologique. Cela ne vaut pas la peine d'être considéré.

Oh, et en passant, un système logiciel qui est utilisé pour gérer des bases de données n'est pas "une base de données", mais "un système de gestion de base de données", "SGBD" pour faire court. Tout comme une photographie n'est pas la même chose qu'un appareil photo, et si vous parlez d'appareils photo et que vous voulez éviter toute confusion, vous devriez utiliser le mot approprié «appareils photo» au lieu de «photographie».

Erwin Smout
la source
Les bases de données non relationnelles semblent avoir une certaine utilité (certaines applications obtiennent de meilleures performances avec des données moins structurées), donc je n'appellerais pas cela une régression. Bonne réponse cependant.
Brendan Long
2
C'est une frustration séculaire de toutes les personnes relationnelles que la «performance» semble être perçue comme une caractéristique du modèle . Cette perception est erronée, point final. Les performances sont une caractéristique des implémentations du modèle. Le fait que toute implémentation actuelle de la gestion des ressources semble en effet soulever souvent des problèmes de performances est une combinaison de plusieurs facteurs: (a) la mise en œuvre complète de la gestion des ressources est tout simplement extrêmement difficile, (b) les fournisseurs de SGBD ne poussent pas assez fort pour une nouvelle mise en œuvre. et (c) les utilisateurs n'ont pas une compréhension suffisante des algorithmes sous-jacents.
Erwin Smout
3
@Erwin Mais si nous constatons qu'un modèle particulier est intrinsèquement difficile à mettre en œuvre efficacement, alors il est sûrement juste de dire qu'il y a un problème avec ce modèle du point de vue de l'efficacité.
Jay le
SQL est horrible. Il y a 30 ans, utiliser une grammaire et des mots de type anglais sonnait probablement comme une bonne idée, comme vaguement conviviale et mieux que rien, mais de nos jours, nous savons que ce n'est pas le cas, il vaut mieux exprimer les concepts informatiques dans un langage symbolique. Si vous voulez utiliser l'anglais, vous feriez mieux d'avoir un analyseur de langage naturel approprié. SQL ne fait aucun effort pour analyser correctement le langage naturel, c'est juste une série de hacks avec des mots anglais (parfois facultatifs) ajoutés pour le rendre plus déroutant.
Rolf le
2
Eh bien oui, SQL est horrible mais pas vraiment pour la raison que vous mentionnez. Si «pas assez symbolique» était le vrai coupable, nous utiliserions tous APL. La langue qui est si extrêmement symbolique que la plupart des gens la considèrent comme la seule langue au monde en écriture seule. Les symboles du langage SQL coïncident avec certains mots qui apparaissent dans le dictionnaire Oxford ou Webster. Il n'y a aucune raison fondamentale pour laquelle ce serait, en soi, un problème.
Erwin Smout
12

Peut-être pensez-vous à la critique que C. Date et ses amis ont lancée contre les bases de données relationnelles existantes et SQL; ils disent que les systèmes et le langage ne sont pas à 100% relationnels et devraient l'être. Je ne vois pas vraiment de problème ici; pour autant que je sache, vous pouvez avoir un système 100% relationnel, si vous le souhaitez, simplement en disciplinant la manière dont vous utilisez SQL.

Ce que je n'arrête pas de rencontrer personnellement, c'est le manque de pouvoir expressif que SQL hérite de sa base théorique, l'algèbre relationnelle. Un problème est le manque de prise en charge de l'utilisation de l'ordre de domaine, que vous rencontrez lorsque vous travaillez avec des données marquées par des dates, des horodatages, etc. Une fois, j'ai essayé de faire une application de reporting entièrement en SQL clair sur une base de données pleine d'horodatages et ce n'était tout simplement pas faisable. Un autre est le manque de support pour la traversée de chemin: la plupart de mes données ressemblent à des graphiques dirigés dans lesquels j'ai besoin de traverser les chemins, et SQL ne peut pas le faire. (Il manque une "fermeture transitive". SQL-1999 peut le faire avec des "sous-requêtes récursives" mais je ne les ai pas encore vues en utilisation réelle. Il existe également divers hacks pour faire face à SQL mais ils sont laids.) Ces problèmes sont également discuté par certains des écrits de Date, d'ailleurs.

Récemment, on m'a pointé du doigt .QL qui semble résoudre bien le problème de la fermeture transitive, mais je ne sais pas s'il peut résoudre le problème avec les domaines ordonnés.

reinierpost
la source
4
Il y a quelques défauts qui empêchent les "systèmes 100% relationnels" même en "disciplinant la manière dont vous utilisez SQL", car SQL n'est pas vraiment relationnel. Exemple: SELECT Sum (foo) BAR Blah WHERE 1 = 0. SQL renvoie null, 100% relationnel exige un zéro. carfield.com.hk/document/misc/SQL_Problems.pdf
McKay
1
Aussi, écrivez-vous "DISTINCT" après chaque sélection?
McKay
Oui, j'éviterais complètement NULL (il doit donc y avoir une casse spéciale pour les résultats vides) et j'écrirais DISTINCT partout ou au moins partout où j'ai besoin d'utiliser COUNT.
reinierpost
8

Réponse directe: je ne pense pas qu'il y ait de prétendant sérieux là-bas. DBase et ses imitateurs (Foxpro, Codebase, etc.) étaient un concurrent pendant un certain temps, mais je pense qu'ils ont fondamentalement perdu la guerre du langage des requêtes de base de données. Il y a eu beaucoup d'autres produits de base de données qui avaient leur propre langage de requête, comme Progress et Paradox et plusieurs autres que j'ai utilisés dont je ne me souviens pas et sûrement beaucoup d'autres dont je n'ai jamais entendu parler. Mais je ne pense pas qu'aucun autre concurrent ne soit venu près d'obtenir une part non négligeable du marché.

Preuve simple qu'il existe une différence entre un format de base de données et un langage de requête, la dernière version de DBase que j'ai utilisée - il y a de nombreuses années maintenant - offrait à la fois le langage de requête DBase «traditionnel» et SQL, qui pouvaient tous deux être utilisés pour accéder aux mêmes données.

Côté divagation: je ne dirais pas que SQL est nul, mais il a de nombreux défauts. Avec le bénéfice des années d'expérience et du recul que nous avons maintenant, je suis sûr que l'on pourrait concevoir un meilleur langage de requête. Mais créer un meilleur langage de requête et convaincre les gens de l'utiliser sont deux choses très différentes. Serait-il assez préférable de convaincre les gens que cela valait la peine d'apprendre. Les gens ont investi de nombreuses années de leur vie pour apprendre à utiliser SQL efficacement. Même si votre nouvelle langue est plus facile à utiliser, il y aura sûrement une courbe d'apprentissage. Et comment migreriez-vous vos systèmes existants de SQL vers le nouveau langage? Etc. Cela peut être fait, bien sûr, tout comme C ++, C # et Java ont largement renversé COBOL et FORTRAN. Mais il faut une combinaison de supériorité technique et de bon marketing pour y parvenir.

Pourtant, je reçois un rire des gens qui se précipitent pour défendre SQL chaque fois que quelqu'un le critique, qui insistent sur le fait que tout problème que vous rencontrez avec SQL doit être votre propre inaptitude à l'utiliser et non une faute de SQL, que vous ne devez tout simplement pas avoir atteint le niveau supérieur du trucage nécessaire pour comprendre sa perfection, etc. Calmez-vous, prenez une profonde respiration: Nous sommes en train d'insulter un langage informatique, pas votre mère.

Geai
la source
1
@Jay: un remplacement possible de SQL pourrait être aucun langage spécifique à la base de données, utilisez votre langage de programmation OO habituel pour la persistance des données. Voir ma réponse sur les bases de données d'objets et l'ORM. Je ne dirais pas que les ORM n'obtiennent pas une part de marché de nos jours.
kriss
Kriss: Je pensais que les ORM ne sont pas un "langage de requête" mais plutôt quelque chose qui se trouve au-dessus d'un langage de requête. Je suppose que si c'est ce que vous utilisez pour communiquer avec la base de données, cela pourrait être considéré comme le langage de requête, et peut-être que je suis juste pédant. Par exemple, je me souviens avoir lu il y a de nombreuses années que COBOL et C ne sont pas VRAIMENT des langages informatiques, que seuls les assembleurs sont de vrais langages informatiques. COBOL et C ne sont que des choses qui sont traduites dans un langage informatique. L'argument semblait alors et maintenant tout simplement stupide.) Donc: D'accord, je vais acheter ça.
Jay
1
Cette réponse est peut-être obsolète. Il existe maintenant des bases de données non SQL, comme Mongo, etc., qui ont une part de marché non négligeable.
Jay
8

Jetez un œil à LINQ to SQL ...

Je l'ai essayé il y a quelques mois et je n'ai jamais regardé en arrière ....

thiag0
la source
1
Linq est merveilleux, mais seulement si vous développez sur .NET :)
Justin Ethier
7

Dans les années 80, ObjectStore offrait un accès transparent aux objets. C'était un peu comme un SGBDR plus un ORM, sauf sans toutes ces couches d'abstraction supplémentaires qui fuyaient: il stockait les objets directement dans la base de données.

Donc, cette alternative était vraiment "pas de langue du tout", ou peut-être "la langue que vous utilisez déjà". Vous écrivez du code C ++ et créez ou parcourez des objets comme s'il s'agissait d'objets natifs, et la base de données s'occupait de tout si nécessaire. Un peu comme ActiveRecord, mais cela a fonctionné aussi bien que l'affirmation des blitz marketing d'ActiveRecord. :-)

(Bien sûr, il n'avait pas la puissance marketing d'Oracle, et il n'avait pas le coût zéro de MySQL, donc tout le monde l'a ignoré. Et maintenant nous essayons de reproduire cela avec les SGBDR et les ORM, et certaines personnes essaient de faire valoir que les tables est logique pour stocker des objets, et que l'écriture d'un fichier XML géant pour indiquer à votre ordinateur comment mapper des objets vers des tables est en quelque sorte une solution raisonnable.)

Ken
la source
2
L'inconvénient de ce type de langage de requête soit "le langage que vous utilisez déjà", du moins à l'époque, c'est qu'il n'y avait pas beaucoup de place pour que la base de données optimise les modèles d'accès. Une chose que j'aime à propos de SQL est qu'il est déclaratif, et la base de données fait le travail de fond pour déterminer comment préformer au mieux la requête. Aucun autre langage aujourd'hui ne fournit autant d'informations sur l'optimisation. Je pense simplement que nous normaliserions un peu plus les mots-clés et simplifierions la syntaxe si nous la réécrivions aujourd'hui.
Ken Bloom
4
Contrepoint: les optimiseurs de requêtes sont, dans le grand schéma des choses, assez stupides. Regardez combien de questions "aidez-moi à optimiser ma requête" il y a ici sur SO. Pour écrire une requête efficace, vous devez comprendre ce que l'optimiseur de requête va faire. J'ai déjà un profileur pour mon environnement de programmation - et un débogueur, d'ailleurs - et ils sont bien meilleurs que tout EXPLAIN que j'ai jamais vu. Je ne sais pas à quel point ObjectStore est bon à cela, mais une pile logicielle homogène peut être géniale .
Ken
En 2011, vous pouvez simplement télécharger la version gratuite de Gemstone et le programme dans Smalltalk. La seule chose à laquelle il faut penser est de savoir comment migrer les instances d'une version de classe vers une autre (les cas simples qu'elle gère automatiquement)
Stephan Eggermont
6

Le mouvement général de nos jours est NoSQL; généralement ces technologies sont:

Personnellement, je pense qu'il n'y a rien de mal avec SQL tant qu'il répond à vos besoins. SQL est expressif et idéal pour travailler avec des données structurées.

Justin Ethier
la source
2
+1 pour les bases de données orientées document. À mesure que les ensembles de données augmentent en taille, les modèles relationnels peuvent devenir très lents ...
Mike Cialowicz
2
Ce que vous mentionnez ne sont pas des alternatives à SQL, ce ne sont même pas des langages. Des initiatives telles que Apache Pig et Apache Hive lui ressemblent davantage.
reinierpost
5

Je pense que vous pourriez être intéressé par Dataphor , qui est un environnement de développement relationnel open-source avec son propre serveur de base de données (qui parle D), et la possibilité de dériver des interfaces utilisateur à partir de son langage de requête.

En outre, il semble qu'Ingres supporte toujours QUEL, et qu'il est open source.

Ken Bloom
la source
Techniquement, la langue parlée par le serveur de dataphor est D4, D (ou tutoriel D ...) est une langue légèrement différente.
McKay
De plus en plus pédant, D n'est pas un langage mais une spécification que Date & Darwen donnent. Ils utilisent le "Tutorial D" comme exemple de langage. D4 peut être qualifié de D, ou du moins surtout, mais McKay a raison de dire qu'il devrait être considéré comme «un D», et non comme «un D». Il existe un document de conformité dans la documentation Dataphor.
N8allan
4

SQL fonctionne très bien pour le domaine pour lequel il a été conçu - des tables de données interdépendantes. Cela se retrouve généralement dans le traitement traditionnel des données commerciales. SQL ne fonctionne pas très bien lorsque vous essayez de conserver un réseau complexe d'objets.

Si vous avez besoin de stocker et de traiter des données relativement traditionnelles, utilisez un SGBD basé sur SQL.

En réponse à votre modification:

Si vous recherchez des alternatives au DML SQL pour récupérer des données à partir de magasins de données relationnelles, je n'ai jamais entendu parler d'alternative sérieuse à SQL.

Les coups que reçoit SQL ne sont pas, je pense, autant contre le langage que contre les principes de stockage de données sous-jacents sur lesquels le langage est basé. Les gens confondent souvent le langage SQL avec le modèle de données relationnel sur lequel les SGBDR sont construits.

Larry Lustig
la source
1
Ouais, j'ai réalisé après avoir écrit ceci que tout le monde dit que SQL et les bases de données relationnelles sont la même chose ..
Brendan Long
4

Les bases de données relationnelles ne sont pas le seul type de bases de données disponibles. Je devrais dire un mot sur les bases de données d'objets car je ne l'ai pas vu dans les réponses des autres. J'ai eu une certaine expérience avec le framework Zope python qui utilise ZODB pour la persistance des objets au lieu du SGBDR (enfin, il est théoriquement possible de remplacer ZODB par une autre base de données dans zope mais la dernière fois que j'ai vérifié, je n'ai pas réussi à le faire fonctionner, donc je peux ne soyez pas positif à ce sujet).

L'état d'esprit ZODB est vraiment différent, plus comme la programmation objet qui se trouverait persistante.

ORM peut être vu comme une sorte de langage

D'une certaine manière, je crois que le modèle de base de données d'objets est ce que l'ORM est: accéder aux données persistantes via votre modèle d'objet habituel. C'est une sorte de langage et il gagne des parts de marché, mais pour l'instant nous ne le voyons pas comme un langage mais comme une couche d'abstraction. Cependant, je pense qu'il serait beaucoup plus efficace d'utiliser un ORM sur une base de données d'objets que sur SQL (en d'autres termes, les performances des ORM que j'ai utilisées en utilisant une base de données SQL comme couches de base étaient nulles).

Kriss
la source
3

Il existe de nombreuses implémentations de SQL (SQL Server, mysql, Oracle, etc.), mais il n'y a pas d'autre langage qui sert le même objectif dans le sens d'être un langage à usage général conçu pour le stockage et la récupération de données relationnelles .

Il existe des bases de données d'objets telles que db4o , et il existe des bases de données similaires dites noSQL qui se réfèrent à à peu près n'importe quel mécanisme de stockage de données qui ne repose pas sur SQL, mais le plus souvent des produits open-source comme Cassandra basés vaguement sur le concept Bigtable de Google .

Il existe également un certain nombre de produits de base de données à usage spécial comme CDF, mais vous n'avez probablement pas à vous en soucier - si vous en avez besoin, vous le saurez.

Aucun de ceux-ci n'est équivalent à SQL.

Cela ne veut pas dire qu'ils sont «meilleurs» ou «pires» - ils ne sont tout simplement pas les mêmes. Dennis Forbes a récemment écrit un excellent article décomposant un certain nombre de prétentions étranges contre SQL. Il soutient (et je suis d'accord) que ces plaintes proviennent en grande partie de personnes et de magasins qui ont soit choisi le mauvais outil pour le travail en premier lieu, soit n'utilisent pas correctement leur SGBD SQL (je ne suis même plus surpris quand je voir une autre base de données SQL où chaque colonne est un varchar(50)et il n'y a pas un seul index ou clé, nulle part).

Si vous implémentez un autre site de réseautage social et que vous n'êtes pas trop préoccupé par les principes ACID , commencez par tous les moyens à vous pencher sur des produits tels que db4o. Cependant, si vous développez un système d'entreprise critique, je vous recommande vivement de réfléchir à deux fois avant de rejoindre le chœur «SQL sucks». Faites d'abord la recherche, découvrez quelles fonctionnalités les différents produits peuvent et ne peuvent pas prendre en charge.


Modifier - J'étais occupé à rédiger ma réponse et je n'ai pas reçu la mise à jour de la question après quelques minutes. Cela dit, SQL est essentiellement inséparable du SGBD lui-même. Si vous exécutez un produit de base de données SQL, vous y accédez avec SQL, point final.

Vous recherchez peut-être des abstractions sur la syntaxe; Linq to SQL, Entity Framework, Hibernate / NHibernate, SubSonic et une foule d'autres outils ORM fournissent tous leur propre syntaxe de type SQL qui n'est pas tout à fait SQL. Tous ces "compilent" en SQL. Si vous exécutez SQL Server, vous pouvez également écrire des fonctions / procédures / déclencheurs CLR, ce qui vous permet d'écrire du code dans n'importe quel langage .NET qui s'exécutera dans la base de données; cependant, ce n'est pas vraiment un substitut à SQL, mais plutôt une extension de celui-ci.

Je ne connais aucun "langage" complet que vous pouvez superposer au-dessus d'une base de données SQL; à moins de passer à un autre produit de base de données, vous allez éventuellement voir SQL sur le canal.

Aaronaught
la source
Je pense que vous confondez les bases de données relationnelles avec les bases de données SQL. Il n'y a aucune raison particulière pour qu'une base de données relationnelle utilise SQL (sauf que tout le monde l'utilise). Et oui, je réalise que la plupart des produits de base de données utilisent uniquement SQL.
Brendan Long
1
@Brendan Long: C'est exact, une base de données relationnelle n'a pas besoin d'utiliser SQL. Cependant, c'est - ce que les bases de données relationnelles font usage. Les autres produits non SQL existants aujourd'hui ne sont pas des bases de données relationnelles.
Aaronaught
Et D et Quel? Ils ne semblent pas très populaires, mais ils existent (et ils sont utilisés pour les bases de données relationnelles).
Brendan Long
1
@Brendan Long: Quel, pour autant que je sache, a été remplacé par SQL. La première fois que j'ai entendu parler de D, et d'après l'article wiki que j'ai regardé, il semble que ce n'est pas vraiment un langage en soi mais plutôt un ensemble défini de fonctionnalités qu'un langage DB devrait avoir. Bien qu'il puisse y avoir des implémentations très obscures, je ne pense pas que cela change substantiellement quoi que ce soit ci-dessus. De plus, je pense que vous devriez vous rendre compte que lorsque les gens disent «SQL Sucks», ils ne font pas référence à la grammaire SQL, ils font (à tort ou à raison) des bases de données relationnelles basées sur SQL.
Aaronaught
3

SQL est de facto.

Les frameworks qui tentent d'en protéger les développeurs ont finalement créé leur propre langage spécifique (Hibernate HQL vient à l'esprit).

SQL résout assez bien un problème. Ce n'est pas plus difficile à apprendre qu'un langage de programmation de haut niveau. Si vous connaissez déjà un langage fonctionnel, il est facile de comprendre SQL.

Étant donné que les principaux fournisseurs de bases de données fournissant des bases de données de pointe (Oracle et SQL Server) prennent en charge SQL et ont investi des années dans des moteurs d'optimisation, etc. pari le plus sûr.

En outre, une base de données ne se résume pas à des requêtes. Il y a l'évolutivité, la sauvegarde et la restauration, l'exploration de données. Les grands fournisseurs supportent beaucoup de choses que même les nouveaux moteurs de "cache" ne prennent même pas en compte.

Codenheim
la source
LINQ n'est pas un langage conçu pour protéger les développeurs de SQL, c'est une syntaxe de requête utilisée pour interroger des collections, qui peut être étendue pour prendre en charge différentes sources de collection. Les bases de données SQL se trouvent être l'une de ces sources.
Khanzor
Bon point, LINQ n'est pas un exemple valable. Édité.
codenheim
2

Des problèmes avec SQL m'ont motivé à préparer un brouillon de langage de requête appelé SMEQL sur le wiki Portland Pattern Repository . Commentaires Bienvenue. Il emprunte des idées à la programmation fonctionnelle et au langage expérimental Business System 12 d'IBM. (Je l'ai initialement appelé TQL, mais j'ai découvert plus tard que ce nom avait été pris.)

Tablizer
la source
vit SMEQL? Existe-t-il en dehors de C2? Existe-t-il un logiciel?
david.pfx
Il y a aussi "BQL" - proposition de sur-ensemble SQL, qui peut être transpilée en SQL tech.pro/blog/1917
...
1

Dans le monde .NET, bien qu'il ait toujours une sensation SQL-esque, LINQ-to-SQL vous permettra d'avoir un bon mélange de traitement SQL et .NET en mémoire de vos données. Cela simplifie également une grande partie de la plomberie de données de niveau inférieur que personne ne veut vraiment faire.

Si vous voulez voir un type de base de données d'un état d'esprit complètement différent, jetez un œil à CouchDB . «Mieux» est évidemment une exigence relative et ce type de base de données sans relation est «Mieux» mais seulement dans certains scénarios.

Jaxidian
la source
0

SQL le langage est très puissant, et les systèmes de gestion de bases de données relationnelles ont été et sont encore un énorme succès. Mais il existe une classe d'applications qui nécessite une évolutivité et une disponibilité très élevées, mais pas nécessairement un degré élevé de cohérence des données (la cohérence éventuelle est ce qui compte). Une variété de systèmes obtiennent de meilleures performances et une meilleure évolutivité qu'un SGBDR en allégeant le besoin de transactions entièrement conformes à ACID. Celles-ci ont été nommées "NoSQL", mais comme d'autres le soulignent, c'est un abus de langage: qu'elles devraient peut-être être appelées bases de données NoACID.

Michael Stonebraker en parle dans La discussion "NoSQL" n'a rien à voir avec SQL .

Jim Ferrans
la source
Les «bases de données» NoACID sont-elles donc une alternative à SQL comme langage d'accès aux bases de données? Non ils ne sont pas.
reinierpost
Alors que SQL est puissant, l'algèbre relationnelle est plus puissante.
McKay
@reineirpost: D'accord. Vous pouvez utiliser SQL pour interroger une base de données NoACID. Vous pouvez également interroger des fichiers texte au lieu de relations (certains des anciens outils de ligne de commande Unix correspondent à des opérations en algèbre relationnelle.
Jim Ferrans
@McKay: Existe-t-il un SGBDR commercial qui prend en charge une syntaxe d'algèbre relationnelle? Ce serait cool.
Jim Ferrans
D'autres personnes dans ce fil ont mentionné des choses comme Dataphor et visent à mieux suivre l'algèbre relationnelle.
McKay