Was sind gute Alternativen zu SQL (der Sprache)? [geschlossen]

95

Ich höre gelegentlich Dinge darüber, wie SQL nervt und es ist keine gute Sprache, aber ich höre nie wirklich viel über Alternativen dazu. Gibt es also andere gute Sprachen, die denselben Zweck erfüllen (Datenbankzugriff) und was macht sie besser als SQL? Gibt es gute Datenbanken, die diese alternative Sprache verwenden?

EDIT: Ich bin mit SQL vertraut und benutze es die ganze Zeit. Ich habe kein Problem damit, ich interessiere mich nur für mögliche Alternativen und warum die Leute sie besser mögen.

Ich suche auch nicht nach alternativen Arten von Datenbanken (der NoSQL-Bewegung), sondern nur nach verschiedenen Möglichkeiten, auf Datenbanken zuzugreifen.

Brendan Long
quelle
22
SQL ist scheiße? Irgendwelche Referenzen?
Murali VP
3
Sie sagen nicht, dass es im Vergleich zu XML scheiße ist, oder?
Bratch
6
Ob SQL tatsächlich scheiße ist oder nicht, interessiert mich. Hier ein Beispiel: en.wikipedia.org/wiki/The_Third_Manifesto Ich denke, "saugt" könnte das falsche Wort sein.
Brendan Long
4
Zur Verdeutlichung: Ich habe kein Problem mit SQL. Ich lerne einfach gerne etwas über andere Ideen, falls es etwas Besseres gibt.
Brendan Long
6
Wenn es sich um eine Abfragesprache und ein RDBMS handeln muss, lesen Sie Quel: en.wikipedia.org/wiki/QUEL_query_languages - es ist auch das, was Postgres vor 1995 verwendet hat, als es auch seinen Namen in außergewöhnlich geändert hat dummes "PostgreSQL".
Ken

Antworten:

44

Ich bin mir sicher einig, dass es schwierig ist, mit der SQL-Syntax zu arbeiten, sowohl vom Standpunkt der automatischen Generierung als auch vom Standpunkt der Analyse, und es ist nicht der Sprachstil, den wir heute schreiben würden, wenn wir SQL für die von uns gestellten Anforderungen entwerfen würden darauf heute. Ich glaube nicht, dass wir so viele verschiedene Schlüsselwörter finden würden, wenn wir die Sprache heute entwerfen würden. Ich vermute, dass die Join-Syntax anders wäre. Funktionen wie GROUP_CONCATwürden eine regelmäßigere Syntax haben, anstatt mehr Schlüsselwörter in die Mitte der Klammern zu setzen, um das Verhalten zu steuern ... erstellen Sie Ihre eigene Wäscheliste mit Inkonsistenzen und Redundanzen in SQL, die Sie gerne erwarten würden, wenn wir die Sprache heute neu gestalten würden.

Es gibt keine Alternativen zu SQL, um mit relationalen Datenbanken zu sprechen (dh SQL als Protokoll), aber es gibt viele Alternativen zum Schreiben von SQL in Ihren Anwendungen. Diese Alternativen wurden in Form von Frontends für die Arbeit mit relationalen Datenbanken implementiert. Einige Beispiele für ein Frontend sind:

  • SchemeQL und CLSQL , die aufgrund ihres Lisp-Erbes wahrscheinlich am flexibelsten sind, aber auch viel mehr wie SQL aussehen als andere Frontends.
  • LINQ (in .Net)
  • ScalaQL und ScalaQuery (in Scala)
  • SQLstatement , Active und viele andere in Ruby,
  • HaskellDB
  • ... die Liste geht für viele andere Sprachen weiter.

Ich denke, dass das zugrunde liegende Thema heute darin besteht, dass wir SQL nicht durch eine neue Abfragesprache ersetzen, sondern sprachspezifische Frontends erstellen, um SQL in unseren regulären täglichen Programmiersprachen zu verbergen, und SQL als Protokoll für die Kommunikation mit relationalen Sprachen behandeln Datenbanken.

Ken Bloom
quelle
Interessant. Das macht aber Sinn.
Brendan Long
11
Stimmt, aber im Idealfall gibt es eine Abfragesprache, die als Sprache gut funktioniert . Die Tatsache, dass SQL auf ein Protokoll reduziert wurde, ist ein Beweis für seine Schwäche als Sprache.
2
Hurra Ken! Vor drei Jahren hatte ich mit der wachsenden technischen Verschuldung zu kämpfen, die sich aus der typischen Unternehmenspraxis ergab, Teile von SQL-Abfragen immer wieder mit geringfügigen Änderungen zu kopieren, da es in SQL keine Kapselung oder lokale Methoden gibt. Ich habe ScalaQuery in Ihrem Beitrag (der jetzt Slick heißt) nachgeschlagen und das gesamte System neu geschrieben. Alle 6 Abfragen werden zu 1, nur weil Sie lokale Methoden einkapseln und verwenden können! Wenn jemand unter SQL-Horror leidet, schauen Sie nach Scala Slick oder Quill und bereiten Sie sich auf die Erleuchtung vor!
ChoppyTheLumberjack
18

Schauen Sie sich diese Liste an.

Die Abfragesprache im Ruhezustand ist wahrscheinlich die häufigste. Der Vorteil von Hibernate besteht darin, dass Objekte sehr einfach (fast automatisch) der relationalen Datenbank zugeordnet werden können und der Entwickler nicht viel Zeit mit dem Datenbankdesign verbringen muss. Weitere Informationen finden Sie auf der Hibernate-Website . Ich bin sicher, dass andere mit anderen interessanten Abfragesprachen mithalten werden ...

Natürlich gibt es da draußen viele NoSQL-Sachen, aber Sie erwähnen ausdrücklich, dass Sie an diesen nicht interessiert sind.

Mike Cialowicz
quelle
Auf jeden Fall das, wonach ich gesucht habe.
Brendan Long
Diese Liste enthält eine sehr seltsame Sammlung von Sprachen. Ich glaube nicht, dass XQuery dazu gehört, und ich weiß nicht genug über D, um zu wissen, warum es dazu gehört.
Ken Bloom
1
@ Ken Bloom anscheinend gibt es eine Abfragesprache namens D und eine separate C-ähnliche Sprache namens D. Die erste, an die ich dachte, war die C-ähnliche Sprache.
Brendan Long
Ich habe definitiv zu schnell über D gesprochen. Als ich den Namen sah, dachte ich an Digital Mars 'D - ich sehe, dass die D-Datensprache etwas ganz anderes ist.
Ken Bloom
2
c2.com/cgi/wiki?QueryLanguageComparison lohnt sich auch
Ken Bloom
13

"Ich höre gelegentlich Dinge darüber, wie SQL nervt und es ist keine gute Sprache."

SQL ist über dreißig Jahre alt. Erkenntnisse darüber, "welche Funktionen etwas zu einer" guten "Sprache machen und welche zu einer" schlechten "Sprache", haben sich schneller entwickelt als SQL selbst.

Außerdem ist SQL keine Sprache, die den aktuellen Standards für "was es braucht, um relational zu sein" entspricht. Daher ist SQL einfach keine relationale Sprache zum Booten.

"Aber ich höre nie wirklich viel über Alternativen dazu."

Ich lade Sie ein, über die Möglichkeit nachzudenken, dass Sie versuchen, nur an den falschen Stellen zu hören (dh ausschließlich in der kommerziellen DBMS-Branche).

"Also, sind andere gute Sprachen, die den gleichen Zweck erfüllen (Datenbankzugriff) und was macht sie besser als SQL?"

Date & Darwen beschreiben die Merkmale, denen eine moderne Datenmanipulationssprache entsprechen muss, in ihrem "Dritten Manifest", dessen neueste Version in ihrem Buch "Datenbanken, Typen und das relationale Modell" festgelegt ist.

"Gibt es gute Datenbanken, die diese alternative Sprache verwenden?"

Wenn Sie mit "gut" so etwas wie "industrielle Stärke" meinen, dann nein. Das nächste verfügbare Element wäre wahrscheinlich Dataphor.

Das Rel-Projekt bietet eine Implementierung für die Tutorial D-Sprache, die in "Datenbanken, Typen und das relationale Modell" definiert ist. Das derzeitige Hauptziel von Rel ist jedoch pädagogischer Natur.

Mein SIRA_PRISE-Projekt bietet eine Implementierung für "wirklich relationales" Datenmanagement, aber ich zögere, es auch als "Implementierung einer Sprache" zu bezeichnen.

Natürlich können Sie sich auch mit einigen nicht relationalen Dingen befassen, wie einige vorgeschlagen haben, aber ich persönlich lehne das nicht relationale Datenmanagement als mehrere Jahrzehnte technologischer Regression ab. Das ist keine Überlegung wert.

Übrigens, ein Softwaresystem, das zum Verwalten von Datenbanken verwendet wird, ist nicht "eine Datenbank", sondern "ein Datenbankverwaltungssystem", kurz "DBMS". So wie ein Foto nicht dasselbe ist wie eine Kamera, und wenn Sie über Kameras sprechen und Verwirrung vermeiden möchten, sollten Sie das richtige Wort "Kameras" anstelle von "Foto" verwenden.

Erwin Smout
quelle
Nicht relationale Datenbanken scheinen eine gewisse Verwendung zu haben (einige Anwendungen erzielen eine bessere Leistung aus weniger strukturierten Daten), daher würde ich es nicht als Regression bezeichnen. Gute Antwort.
Brendan Long
2
Es ist eine uralte Frustration aller relationalen Menschen, dass "Leistung" als ein Merkmal des Modells wahrgenommen zu werden scheint . Diese Wahrnehmung ist fehlerhaft, Punkt. Die Leistung ist ein Merkmal der Implementierungen des Modells. Dass eine derzeit vorhandene Implementierung des RM tatsächlich häufig zu Leistungsproblemen führt, ist eine Kombination mehrerer Faktoren: (a) Die vollständige Implementierung des RM ist einfach äußerst schwierig. (B) DBMS-Anbieter drängen nicht stark genug auf neue Implementierungsfortschritte und (c) Benutzer, denen die zugrunde liegenden Algorithmen nicht ausreichend bekannt sind.
Erwin Smout
3
@Erwin Aber wenn wir feststellen, dass ein bestimmtes Modell von Natur aus schwierig effizient zu implementieren ist, kann man mit Sicherheit sagen, dass es unter Effizienzgesichtspunkten ein Problem mit diesem Modell gibt.
Jay
SQL ist schrecklich. Vor 30 Jahren klang die Verwendung von englischer Grammatik und Wörtern wahrscheinlich nach einer guten Idee, vage benutzerfreundlich und besser als nichts, aber heutzutage wissen wir, dass es nicht besser ist, Computerkonzepte in symbolischer Sprache auszudrücken. Wenn Sie Englisch verwenden möchten, sollten Sie einen geeigneten Parser für natürliche Sprachen haben. SQL bemüht sich nicht, die natürliche Sprache richtig zu analysieren. Es handelt sich lediglich um eine Reihe von Hacks mit (manchmal optionalen) englischen Wörtern, um sie verwirrender zu machen.
Rolf
2
Ja, SQL ist schrecklich, aber nicht wirklich aus dem von Ihnen genannten Grund. Wenn "nicht symbolisch genug" der wahre Schuldige wäre, würden wir alle APL verwenden. Die Sprache, die so extrem symbolisch ist, dass die meisten Leute sie als die einzige Nur-Schreib-Sprache der Welt bezeichnen. Die Symbole der SQL-Sprache stimmen zufällig mit bestimmten Wörtern überein, die zufällig im Oxford- oder Webster-Wörterbuch erscheinen. Es gibt keinen fundamentalen Grund, warum dies an und für sich ein Problem sein würde.
Erwin Smout
12

Vielleicht denken Sie an die Kritik, die C. Date und seine Freunde gegen bestehende relationale Datenbanken und SQL geäußert haben. Sie sagen, dass die Systeme und die Sprache nicht 100% relational sind und sein sollten. Ich sehe hier kein wirkliches Problem. Soweit ich sehen kann, können Sie ein 100% relationales System haben, wenn Sie möchten, indem Sie einfach die Art und Weise disziplinieren, wie Sie SQL verwenden.

Was mir persönlich immer wieder begegnet, ist der Mangel an Ausdruckskraft, den SQL von seiner theoretischen Grundlage, der relationalen Algebra, erbt. Ein Problem ist die mangelnde Unterstützung für die Verwendung der Domain-Bestellung, auf die Sie stoßen, wenn Sie mit Daten arbeiten, die durch Datumsangaben, Zeitstempel usw. gekennzeichnet sind. Ich habe einmal versucht, eine Berichtsanwendung vollständig in einfachem SQL in einer Datenbank voller Zeitstempel zu erstellen, und das war einfach nicht möglich. Ein weiterer Grund ist die mangelnde Unterstützung für die Pfadüberquerung: Die meisten meiner Daten sehen aus wie gerichtete Diagramme, in denen ich Pfade durchlaufen muss, und SQL kann dies nicht. (Es fehlt "Transitive Closure". SQL-1999 kann dies mit "rekursiven Unterabfragen" tun, aber ich habe sie noch nicht in der tatsächlichen Verwendung gesehen. Es gibt auch verschiedene Hacks, um SQL zu bewältigen, aber sie sind hässlich.) Diese Probleme sind übrigens auch in einigen Schriften von Date besprochen.

Kürzlich wurde ich auf .QL hingewiesen, das das Problem der transitiven Schließung anscheinend gut angeht , aber ich weiß nicht, ob es das Problem mit geordneten Domänen lösen kann.

Reinierpost
quelle
4
Es gibt einige Fehler, die "100% relationale Systeme" verhindern, selbst wenn "die Art und Weise, wie Sie SQL verwenden, diszipliniert wird", da SQL nicht wirklich relational ist. Beispiel: SELECT Sum (foo) BAR Blah WHERE 1 = 0. SQL gibt null zurück, 100% relational erfordert eine Null. carfield.com.hk/document/misc/SQL_Problems.pdf
McKay
1
Schreiben Sie außerdem nach jeder Auswahl "DISTINCT"?
McKay
Ja, ich würde NULL vollständig vermeiden (daher muss für leere Ergebnisse ein spezielles Gehäuse vorhanden sein) und entweder DISTINCT überall oder zumindest überall dort schreiben, wo ich COUNT verwenden muss.
Reinierpost
8

Direkte Antwort: Ich glaube nicht, dass es da draußen einen ernsthaften Konkurrenten gibt. DBase und seine Nachahmer (Foxpro, Codebase usw.) waren eine Zeit lang ein Konkurrent, aber ich denke, sie haben im Grunde den Krieg um die Datenbankabfragesprache verloren. Es gab viele andere Datenbankprodukte, die ihre eigene Abfragesprache hatten, wie Progress und Paradox und einige andere, deren Namen ich nicht mehr erinnere, und sicherlich viele weitere, von denen ich noch nie gehört habe. Aber ich glaube nicht, dass irgendein anderer Konkurrent annähernd einen nicht trivialen Marktanteil erreicht hätte.

Als einfacher Beweis dafür, dass es einen Unterschied zwischen einem Datenbankformat und einer Abfragesprache gibt, bot die letzte Version von DBase, die ich vor vielen Jahren verwendet habe, sowohl die "traditionelle" DBase-Abfragesprache als auch SQL, die beide verwendet werden konnten um auf die gleichen Daten zuzugreifen.

Side Ramble: Ich würde nicht sagen, dass SQL scheiße ist, aber es hat viele Mängel. Mit der jahrelangen Erfahrung und Rückschau, die wir jetzt haben, bin ich sicher, dass man eine bessere Abfragesprache entwerfen könnte. Eine bessere Abfragesprache zu erstellen und die Leute davon zu überzeugen, sie zu verwenden, sind zwei sehr unterschiedliche Dinge. Wäre es besser genug, die Leute davon zu überzeugen, dass es sich lohnt, zu lernen? Die Menschen haben viele Jahre ihres Lebens investiert, um zu lernen, wie man SQL effektiv einsetzt. Selbst wenn Ihre neue Sprache einfacher zu verwenden ist, würde es sicherlich eine Lernkurve geben. Und wie würden Sie Ihre vorhandenen Systeme von SQL in die neue Sprache migrieren? Usw. Dies kann natürlich genauso geschehen, wie C ++, C # und Java COBOL und FORTRAN weitgehend gestürzt haben. Aber es bedarf einer Kombination aus technischer Überlegenheit und gutem Marketing, um dies zu erreichen.

Trotzdem kichern mich Leute an, die sich beeilen, SQL zu verteidigen, wenn jemand es kritisiert, und darauf bestehen, dass jedes Problem, das Sie mit SQL haben, Ihre eigene Unfähigkeit sein muss, es zu verwenden, und kein Fehler von SQL, den Sie einfach nicht haben dürfen erreichte die höhere Ebene des Dingens, die notwendig ist, um seine Perfektion zu verstehen usw. Beruhige dich, atme tief ein: Wir beleidigen eine Computersprache, nicht deine Mutter.

Jay
quelle
1
@Jay: Ein möglicher Ersatz für SQL könnte überhaupt keine datenbankspezifische Sprache sein. Verwenden Sie Ihre übliche OO-Programmiersprache für die Datenpersistenz. Siehe meine Antwort zu Objektdatenbanken und ORM. Ich würde nicht sagen, dass ORMs heutzutage keinen Marktanteil mehr bekommen.
Kriss
Kriss: Ich dachte, ORMs sind keine "Abfragesprache", sondern etwas, das über einer Abfragesprache liegt. Ich nehme an, wenn Sie damit mit der Datenbank kommunizieren, könnte dies als Abfragesprache angesehen werden, und vielleicht bin ich nur pedantisch. Ich erinnere mich, dass ich vor vielen Jahren gelesen habe, dass COBOL und C keine WIRKLICHEN Computersprachen sind, sondern dass nur Assembler echte Computersprachen sind. COBOL und C sind nur Dinge, die in eine Computersprache übersetzt werden. Das Argument schien damals und heute einfach albern zu sein.) Also: Okay, das kaufe ich mir.
Jay
1
Diese Antwort ist möglicherweise veraltet. Es gibt jetzt Nicht-SQL-Datenbanken wie Mongo usw., die einen nicht trivialen Marktanteil haben.
Jay
8

Schauen Sie sich LINQ to SQL an ...

Ich habe es vor ein paar Monaten ausprobiert und habe nie zurückgeschaut ...

thiag0
quelle
1
Linq ist wunderbar, aber nur, wenn Sie auf .NET entwickeln :)
Justin Ethier
7

In den 1980er Jahren bot ObjectStore einen transparenten Objektzugriff. Es war wie ein RDBMS plus ein ORM, nur ohne all diese zusätzlichen undichten Abstraktionsschichten: Es speicherte Objekte direkt in der Datenbank.

Diese Alternative war also wirklich "überhaupt keine Sprache" oder vielleicht "die Sprache, die Sie bereits verwenden". Sie würden C ++ - Code schreiben und Objekte erstellen oder durchlaufen, als wären sie native Objekte, und die Datenbank kümmerte sich nach Bedarf um alles. Ein bisschen wie ActiveRecord, aber es hat tatsächlich genauso gut funktioniert wie die Behauptung von ActiveRecord-Marketingblitzen. :-)

(Natürlich hatte es nicht den Marketing-Muskel von Oracle und es hatte nicht die Nullkosten von MySQL, also ignorierten es alle. Und jetzt versuchen wir, dies mit RDBMSs und ORMs zu replizieren, und einige Leute versuchen, diese Tabellen tatsächlich zu argumentieren Das Speichern von Objekten ist sinnvoll, und das Schreiben einer riesigen XML-Datei, um Ihrem Computer mitzuteilen, wie Objekte Tabellen zugeordnet werden sollen, ist eine vernünftige Lösung.)

Ken
quelle
2
Der Nachteil dieser Art, dass Ihre Abfragesprache "die Sprache ist, die Sie bereits verwenden", zumindest in jenen Tagen, ist, dass die Datenbank nicht viel Platz hatte, um die Zugriffsmuster zu optimieren. Eine Sache, die ich an SQL mag, ist, dass es deklarativ ist und die Datenbank die kleinste Arbeit leistet, um herauszufinden, wie die Abfrage am besten durchgeführt werden kann. Keine andere Sprache bietet heute annähernd so viele Informationen zur Optimierung. Ich denke nur, wir würden die Schlüsselwörter ein bisschen mehr normalisieren und die Syntax vereinfachen, wenn wir sie heute umschreiben würden.
Ken Bloom
4
Kontrapunkt: Abfrageoptimierer sind im Großen und Ganzen ziemlich dumm. Schauen Sie, wie viele Fragen "Helfen Sie mir, meine Abfrage zu optimieren" hier auf SO sind. Um eine effiziente Abfrage zu schreiben, müssen Sie wissen, was der Abfrageoptimierer tun wird. Ich habe bereits einen Profiler für meine Programmierumgebung - und einen Debugger - und sie sind meilenweit besser als jeder EXPLAIN, den ich jemals gesehen habe. Ich weiß nicht, wie gut ObjectStore darin ist, aber ein homogener Software-Stack kann fantastisch sein .
Ken
Im Jahr 2011 können Sie einfach die kostenlose Version von Gemstone herunterladen und in Smalltalk programmieren. Das einzige, worüber man nachdenken muss, ist, wie Instanzen einer Klassenversion in eine andere
migriert werden
6

Die allgemeine Bewegung in diesen Tagen ist NoSQL; Im Allgemeinen sind diese Technologien:

Persönlich denke ich, dass an SQL nichts falsch ist, solange es Ihren Anforderungen entspricht. SQL ist ausdrucksstark und eignet sich hervorragend für die Arbeit mit strukturierten Daten.

Justin Ethier
quelle
2
+1 für dokumentenorientierte Datenbanken. Mit zunehmender Größe von Datensätzen können relationale Modelle sehr langsam werden ...
Mike Cialowicz
2
Was Sie erwähnen, sind keine Alternativen zu SQL, sie sind nicht einmal Sprachen. Initiativen wie Apache Pig und Apache Hive ähneln eher diesen.
Reinierpost
5

Ich denke, Sie könnten sich für Dataphor interessieren , eine relationale Open-Source-Entwicklungsumgebung mit einem eigenen Datenbankserver (der D spricht), und die Möglichkeit, Benutzeroberflächen aus ihrer Abfragesprache abzuleiten.

Außerdem scheint Ingres QUEL weiterhin zu unterstützen und es ist Open Source.

Ken Bloom
quelle
Technisch gesehen ist die Sprache, die der Dataphorserver spricht, D4, D (oder Tutorial D ...) ist eine etwas andere Sprache.
McKay
D ist noch pedantischer und keine Sprache, sondern eine Spezifikation, die Date & Darwen geben. Sie verwenden "Tutorial D" als Beispielsprache. D4 qualifiziert sich zwar als D, oder zumindest meistens, aber McKay hat Recht, dass es als "D" bezeichnet werden sollte, nicht als "D". In der Dataphor-Dokumentation befindet sich ein Konformitätsdokument.
N8allan
4

SQL funktioniert gut für die Domäne, für die es entworfen wurde - zusammenhängende Datentabellen. Dies ist in der Regel in der traditionellen Geschäftsdatenverarbeitung der Fall. SQL funktioniert nicht so gut, wenn versucht wird, ein komplexes Netzwerk von Objekten beizubehalten.

Wenn Sie relativ traditionelle Daten speichern und verarbeiten möchten, verwenden Sie ein SQL-basiertes DBMS.

Als Antwort auf Ihre Bearbeitung:

Wenn Sie nach Alternativen zur SQL-DML suchen, um Daten aus relationalen Datenspeichern abzurufen, habe ich noch nie von einer ernsthaften Alternative zu SQL gehört.

Die Schläge, die SQL bekommt, sind meiner Meinung nach nicht so sehr gegen die Sprache als gegen die zugrunde liegenden Datenspeicherungsprinzipien, auf denen die Sprache basiert. Menschen verwechseln häufig die Sprache SQL mit dem relationalen Datenmodell, auf dem RDBMS basieren.

Larry Lustig
quelle
1
Ja, nachdem ich dies geschrieben hatte, wurde mir klar, dass alle Dinge, die SQL und relationale Datenbanken sind, dasselbe sind.
Brendan Long
4

Relationale Datenbanken sind nicht die einzige Art von Datenbanken. Ich sollte ein Wort zu Objektdatenbanken sagen, da ich es in den Antworten anderer nicht gesehen habe. Ich hatte einige Erfahrungen mit dem Zope-Python-Framework, das ZODB für die Objektpersistenz anstelle von RDBMS verwendet (theoretisch ist es möglich, ZODB durch eine andere Datenbank in zope zu ersetzen, aber als ich das letzte Mal nachgesehen habe, war es mir nicht gelungen, es zum Laufen zu bringen sei nicht positiv darüber).

Die ZODB-Denkweise ist wirklich anders, eher wie eine Objektprogrammierung, die hartnäckig wäre.

ORM kann als eine Art Sprache angesehen werden

In gewisser Weise glaube ich, dass das Objekt-Datenbank-Modell das ist, worum es bei ORM geht: Zugriff auf persistente Daten über Ihr übliches Objektmodell. Es ist eine Art Sprache und gewinnt Marktanteile, aber im Moment sehen wir sie nicht als Sprache, sondern als Abstraktionsschicht. Ich glaube jedoch, dass es viel effizienter wäre, ein ORM über eine Objektdatenbank als über SQL zu verwenden (mit anderen Worten, die Leistung von ORMs, die ich zufällig mit einer SQL-Datenbank als Basisschicht verwendet habe).

kriss
quelle
3

Es gibt viele Implementierungen von SQL (SQL Server, MySQL, Oracle usw.), aber es gibt keine andere Sprache , die denselben Zweck erfüllt, im Sinne einer Allzwecksprache, die für das Speichern und Abrufen relationaler Daten entwickelt wurde .

Es gibt Objektdatenbanken wie db4o und ähnliche sogenannte noSQL- Datenbanken, die sich auf nahezu jeden Datenspeichermechanismus beziehen, der nicht auf SQL basiert , sondern auf Open-Source-Produkten wie Cassandra, die lose auf Googles Bigtable- Konzept basieren .

Es gibt auch eine Reihe von speziellen Datenbankprodukten wie CDF, aber Sie müssen sich wahrscheinlich keine Sorgen machen - wenn Sie eines benötigen, wissen Sie es.

Keines davon entspricht SQL.

Das bedeutet nicht, dass sie "besser" oder "schlechter" sind - sie sind einfach nicht gleich. Dennis Forbes hat kürzlich einen großartigen Beitrag geschrieben , in dem er einige der seltsamen Behauptungen aufschlüsselt, die gegen SQL aufgetaucht sind. Er behauptet (und ich stimme zu), dass diese Beschwerden größtenteils von Personen und Geschäften stammen, die entweder das falsche Tool für den Job ausgewählt haben oder ihr SQL-DBMS nicht richtig verwenden (ich bin nicht einmal mehr überrascht, wenn ich Sehen Sie sich eine andere SQL-Datenbank an, in der jede Spalte eine ist varchar(50)und es nirgendwo einen einzigen Index oder Schlüssel gibt.

Wenn Sie eine weitere Website für soziale Netzwerke implementieren und sich nicht zu sehr mit den ACID- Prinzipien befassen , sollten Sie sich auf jeden Fall mit Produkten wie db4o befassen . Wenn Sie jedoch ein geschäftskritisches Geschäftssystem entwickeln, empfehle ich Ihnen dringend , zweimal darüber nachzudenken, bevor Sie sich dem "SQL sucks" -Chor anschließen. Machen Sie zuerst die Recherche und finden Sie heraus, welche Funktionen die verschiedenen Produkte unterstützen können und welche nicht.


Bearbeiten - Ich war mit dem Schreiben meiner Antwort beschäftigt und habe das Fragen-Update erst nach wenigen Minuten erhalten. Allerdings ist SQL im Wesentlichen untrennbar mit dem DBMS selbst verbunden. Wenn Sie ein SQL-Datenbankprodukt ausführen, greifen Sie mit SQL-Punkt darauf zu.

Vielleicht suchen Sie nach Abstraktionen über die Syntax; Linq to SQL, Entity Framework, Hibernate / NHibernate, SubSonic und eine Vielzahl anderer ORM-Tools bieten alle ihre eigene SQL-ähnliche Syntax, die nicht ganz SQL ist. Alle diese "kompilieren" zu SQL. Wenn Sie SQL Server ausführen, können Sie auch CLR-Funktionen / Prozeduren / Trigger schreiben, mit denen Sie Code in einer beliebigen .NET-Sprache schreiben können, die in der Datenbank ausgeführt wird. Dies ist jedoch kein wirklicher Ersatz für SQL, sondern eher eine Erweiterung.

Mir ist keine vollständige "Sprache" bekannt, die Sie über eine SQL-Datenbank legen können. Wenn Sie nicht zu einem anderen Datenbankprodukt wechseln, wird SQL möglicherweise in der Pipe angezeigt.

Aaronaught
quelle
Ich denke, Sie verwechseln relationale Datenbanken mit SQL-Datenbanken. Es gibt keinen besonderen Grund, warum eine relationale Datenbank SQL verwenden muss (außer dass alle anderen es verwenden). Und ja, mir ist klar, dass die meisten Datenbankprodukte nur SQL verwenden.
Brendan Long
1
@Brendan Long: Das ist richtig, eine relationale Datenbank nicht haben , um SQL zu verwenden. Das ist jedoch, was relationale Datenbanken zu tun Verwendung. Andere heute existierende Nicht-SQL-Produkte sind keine relationalen Datenbanken.
Aaronaught
Was ist mit D und Quel? Sie scheinen nicht sehr beliebt zu sein, aber sie existieren (und sie werden für relationale Datenbanken verwendet).
Brendan Long
1
@Brendan Long: Quel wurde meines Wissens von SQL abgelöst. Das erste Mal, dass ich von D gehört habe, und aus dem Wiki-Artikel, den ich mir angesehen habe, geht hervor, dass es sich nicht wirklich um eine Sprache an sich handelt, sondern um einen definierten Satz von Funktionen, die eine DB-Sprache haben sollte. Obwohl es einige sehr undurchsichtige Implementierungen geben könnte, denke ich, dass dies nichts Wesentliches darüber ändert. Ich denke auch, Sie sollten sich darüber im Klaren sein, dass Menschen, die "SQL Sucks" sagen, sich nicht auf die SQL-Grammatik beziehen, sondern (zu Recht oder zu Unrecht) auf SQL-basierte relationale Datenbanken.
Aaronaught
3

SQL ist de facto.

Frameworks, die versuchen, Entwickler davor zu schützen, haben schließlich ihre eigene spezifische Sprache erstellt (Hibernate HQL fällt mir ein).

SQL löst ein Problem ziemlich gut. Es ist nicht schwieriger zu lernen als eine Programmiersprache auf hohem Niveau. Wenn Sie bereits eine funktionale Sprache kennen, ist es ein Kinderspiel, SQL zu verstehen.

Angesichts der Tatsache, dass die führenden Datenbankanbieter, die hochmoderne Datenbanken (Oracle und SQL Server) bereitstellen, SQL unterstützen und jahrelang in Optimierungs-Engines usw. und alle führenden Angebote für Datenmodellierungssoftware und Änderungsverwaltungssoftware in SQL investiert haben, würde ich sagen, dass dies der Fall ist sicherste Wette.

Eine Datenbank bietet außerdem mehr als nur Abfragen. Es gibt Skalierbarkeit, Sicherung und Wiederherstellung, Data Mining. Die großen Anbieter unterstützen viele Dinge, die selbst die neuen "Cache" -Engines nicht einmal berücksichtigen.

Codenheim
quelle
LINQ ist keine Sprache zum Schutz von Entwicklern vor SQL, sondern eine Abfragesyntax zum Abfragen von Sammlungen, die erweitert werden kann, um verschiedene Sammlungsquellen zu unterstützen. SQL-Datenbanken sind zufällig eine dieser Quellen.
Khanzor
Guter Punkt, LINQ ist kein gültiges Beispiel. Bearbeitet.
Codenheim
2

Probleme mit SQL haben mich motiviert, einen Entwurf für eine Abfragesprache namens SMEQL im Portland Pattern Repository-Wiki zu erstellen . Kommentare Willkommen. Es basiert auf Ideen aus der funktionalen Programmierung und der experimentellen Business System 12-Sprache von IBM. (Ich nannte es ursprünglich TQL, fand aber später heraus, dass dieser Name übernommen wurde.)

Tablizer
quelle
lebt SMEQL? Existiert es außerhalb von C2? Gibt es Software?
david.pfx
Es gibt auch "BQL" - SQL-Superset-Vorschlag, der in SQL tech.pro/blog/1917/…
Nickolay
1

In der .NET-Welt vermittelt LINQ-to-SQL eine gute Mischung aus SQL- und In-Memory-.NET-Verarbeitung Ihrer Daten, obwohl es sich immer noch wie SQL anfühlt. Es vereinfacht auch viele der untergeordneten Dateninstallationen, die niemand wirklich tun möchte.

Wenn Sie einen Datenbanktyp mit einer völlig anderen Denkweise sehen möchten, schauen Sie sich CouchDB an . "Besser" ist offensichtlich eine relative Anforderung, und diese Art von Nicht-Beziehungsdatenbank ist "Besser", jedoch nur in bestimmten Szenarien.

Jaxidian
quelle
0

SQL, die Sprache, ist sehr leistungsfähig, und relationale Datenbankverwaltungssysteme waren und sind ein großer Erfolg. Es gibt jedoch eine Anwendungsklasse, die eine sehr hohe Skalierbarkeit und Verfügbarkeit erfordert, jedoch nicht unbedingt ein hohes Maß an Datenkonsistenz (letztendlich kommt es auf die Konsistenz an). Eine Vielzahl von Systemen bietet eine bessere Leistung und Skalierung als ein RDBMS, da weniger ACID-konforme Transaktionen erforderlich sind. Diese wurden "NoSQL" genannt, aber wie andere betonen, ist dies eine Fehlbezeichnung: Vielleicht sollten sie NoACID-Datenbanken genannt werden.

Michael Stonebraker behandelt dies in der "NoSQL" -Diskussion hat nichts mit SQL zu tun .

Jim Ferrans
quelle
Sind NoACID- "Datenbanken" eine Alternative zu SQL als Datenbankzugriffssprache? Nein sind sie nicht.
Reinierpost
Während SQL leistungsfähig ist, ist die relationale Algebra leistungsfähiger.
McKay
@reineirpost: Einverstanden. Sie können SQL verwenden, um eine NoACID-Datenbank abzufragen. Sie können auch Textdateien anstelle von Beziehungen abfragen (einige der alten Unix-Befehlszeilentools entsprechen Operationen in der relationalen Algebra.
Jim Ferrans
@ McKay: Gibt es ein kommerzielles RDBMS, das eine relationale Algebra-Syntax unterstützt? Das wäre cool.
Jim Ferrans
Andere Leute in diesem Thread haben Dinge wie Dataphor erwähnt und wollen der relationalen Algebra besser folgen.
McKay