it-swarm.com.de

Warum ist SQL die einzige Datenbankabfragesprache?

Für die allgemeine Programmierung gibt es buchstäblich Hunderte von Programmiersprachen. Aber warum ist SQL für die Interaktion/Abfrage der Datenbanken so ziemlich die einzige verwendete Sprache?

36
Manohar

Beachten Sie neben der Antwort von Basile auch, dass SQL keine Sprache ist, wie Sie sie sich für eine objektorientierte Sprache oder eine prozedurale Sprache vorstellen würden. In vielerlei Hinsicht ähnelt der ANSI-SQL-Standard eher einem Protokoll oder einer Reihe allgemein anerkannter Aussagen, die auf mathematischen Prinzipien von Mengenlehre , Prädikatenlogik und relationale Algebra) basieren .

Aber wie individuell RDBMS Entwickler diese Standards implementieren, variiert je nach proprietärer Software erheblich genug, um fast jede einzelne Implementierung als eine eigene Sprache zu klassifizieren.

Zum Beispiel unterscheidet sich Oracle SQL erheblich von Microsoft SQL Server SQL, das sich von MySQL usw. unterscheidet. Darüber hinaus implementiert jedes Unternehmen seine eigenen eindeutigen Funktionen, Datenbankmodule und (in einigen Fällen) Verfahren Sprachen zusätzlich zu den traditionellen ANSI SQL-Standardanweisungen. Einige entscheiden sich sogar manchmal dafür, den Standard zugunsten ihrer eigenen persönlichen Implementierung aufzugeben.

Die Geschichte dieser Verbindung von SQL mit dem relationalen Modell beruht hauptsächlich auf der Tatsache, dass Technologie und Sprache in den 1970er Jahren von EF Codd , Donald D. Chamberlin und Raymond F nebeneinander entwickelt wurden Boyce. Es gibt einige ziemlich anständige Artikel auf Wikipedia rund um das Thema, wenn Sie die Gelegenheit haben, darüber zu lesen.

39
DanK

First SQL ist hauptsächlich für relationale Datenbanken . Und es hat mehrere Varianten oder Dialekte.

Nicht relationale Datenbanken haben also andere Abfragesprachen. Lesen Sie mehr über NoSQL . Schauen Sie sich zum Beispiel MongoDB an. Siehe auch Abfragesprache Wikipage, in der andere Abfragesprachen aufgelistet sind.

21

SQL ist an sich keine "Sprache", sondern ein Standard für die Erstellung einer Sprache. Siehe Die SQL-Zeitleiste als Referenz. Mehrere Parteien haben basierend auf dem Standard bestimmte Datenbankabfragesprachen implementiert, die sich in dem Grad unterscheiden, in dem der Standard eingehalten wird.

In diesem Sinne ist es falsch zu sagen, dass SQL die einzige Datenbankabfragesprache ist, da es keine "SQL-Sprache" gibt. Vielmehr haben Sie mehrere Sprachimplementierungen wie Transact-SQL (z. B. von Microsoft SQL Server verwendet), MySQL, PostgreSQL, Oracle SQL usw., die in vielen Aspekten ähnlich sind, jedoch aufgrund von weitgehend nicht miteinander kompatibel sind Entwickelt für die Domäne eines bestimmten relationalen Datenbankmoduls.

Als Basile Starynkevitch richtig hervorgehoben gibt es auch mehrere "NoSQL" -Datenbanksprachen, die über APIs implementiert werden können, die von den meisten traditionellen Programmiersprachen verwendet werden können.

10
Phrancis

Es ist nicht die einzige Abfragesprache ... Abfragesprachen haben unterschiedliche Implementierungsvarianten. Grundsätzlich wird SQL als Referenzstandard verwendet oder intern werden andere Sprachen in SQL konvertiert.

Einige der Abfragesprachen sind aufgeführt hier .

C # -Entwickler verwenden sehr oft die Abfragesprache LINQ .

4
mayur rathi

Das ist eine sehr gute Frage, aber Sie könnten allgemeiner fragen:

Warum sind alle relationalen Datenbanken so bemerkenswert ähnlich?

Abgesehen von den kleineren Varianten, die mit einer GUI wie Access und Filemaker geliefert werden, und den etwas speziellen Einzelbenutzer-Engines weisen relationale Datenbanken eine erstaunliche Anzahl von Besonderheiten auf:

  • Wie bereits in Ihrer Frage erwähnt, verwenden alle dieselbe (alte und fehlerhafte) Abfragesprache, zu der sie alle neue Funktionen hinzufügen. Es ist das Schlimmste aus beiden Welten: Niemand wagt es, außerhalb von SQL Innovationen zu entwickeln, aber die Dialekte sind immer noch nicht kompatibel.
  • Obwohl das Datenbankschema auch immer in dieser Sprache (mit DDL) definiert wird, geben Datenbanken das aktuelle Schema in dieser Form nicht zurück. Vielmehr geben sie es normalerweise in Form verschiedener Formen von Tabellendaten zurück. Viele haben clientseitige Dienstprogramme, die diese Informationen dann wieder in DDL konvertieren können. Was natürlich schwierig ist, programmgesteuert nach Updates zu suchen. Bizarr, aber so machen es alle.
  • Sie können Ihnen keine Live-Ansicht einer Abfrage geben: Die Ergebnismenge zusammen mit einem Echtzeit-Feed der Änderungen. Aus diesem Grund fragen Datenbankanwendungen immer wieder alles ab.
  • Obwohl sie alle das Konzept von Einschränkungen unterstützen, insbesondere in Form von Fremd- und eindeutigen Schlüsseln, liefert keiner von ihnen dem aufrufenden Code genügend Informationen, damit dieser aufrufende Code versteht, welche dieser Einschränkungen in diesem Fall verletzt wurden. Aus diesem Grund muss datenbankgestützte Software immer noch explizite Eindeutigkeit und Fremdschlüsselprüfung durchführen - eine Verletzung von DRY und ein Schmerz.
  • Sie sind schlecht darin, Informationen darüber zu geben, warum Abfragen langsam sind, weshalb Datenbankanwendungen normalerweise nur ohne Erklärung hängen bleiben, wenn etwas Lockiges oder Teueres passiert. Warum kann ich keine Live-Ansicht des Ausführungsplans mit Fortschrittsanzeigen auf den Knoten erhalten (mit Links zu Sperrabfragen, wenn diese angezeigt werden)? [BEARBEITEN: SQL Server hat jetzt tatsächlich "Live Query Statistics", sehr cool)
  • Sie haben alle B-Tree-Indizes für das allgemeine Material und dann alle einen weiteren zweidimensionalen Index, der auf Gleitkommawerten für geografische Anwendungen basiert. Aber nur Gleitkomma und nur zwei Dimensionen. Dann haben sie normalerweise eine zusätzliche Volltextsuche. Und mehr als eine bietet zusätzliche Indexunterstützung für XML-Daten, die sich in Zeichenfolgenspalten befinden.
  • Sie alle haben eine Methode, um die Ähnlichkeit zweier englischer Wörter zu messen.
  • Sie alle können Aggregate erstellen, aber keiner von ihnen kann aggregierte Teilwerte in B-Tree-Verzweigungsknoten speichern, um dies schnell zu erledigen.
  • Als besondere Instanz des vorherigen Punktes kann keiner von ihnen effizient nach einer Anzahl von Zeilen suchen. Insbesondere die allgemeinen Bildlaufgitter, mit denen der Datenabschnitt, zu dem ein Benutzer gescrollt hat, träge geladen wird, sind für eine große Anzahl von Zeilen niemals effizient - auf keinem der relationalen Datenbankserver. Sie alle müssen alle Daten vom Anfang der Ergebnismenge bis zur ersten zurückgegebenen Zeile durchsuchen. Lassen Sie das sinken.

Kurz gesagt, obwohl sie alle unglaublich erstaunlich und für viele Datenspeicherungs- und -verarbeitungsaufgaben unverzichtbar sind, sind sie alle auf überraschend ähnliche Weise verwirrend und eigenartig. Sie können sehen, wie nach dem ersten Schreiben jeder es einfach kopierte und im Laufe der Zeit nur die Funktion hinzufügte, die zu der Zeit cool war und dann auf alle Spieler kopiert wurde.

Dies unterscheidet sich stark von Programmierplattformen, bei denen es in jedem Paradigma sehr unterschiedliche Paradigmen und sogar sehr unterschiedliche Syntaxen gibt. Neue Ideen werden auch in ältere Sprachen gehackt, aber häufiger machen die Leute tatsächlich neue Sprachen und Plattformen. Java war 1990 ein Fortschritt. .NET war 2002 ein Fortschritt. Eine Sprache, die ungefähr so ​​alt ist wie die relationale Datenbank, wäre C++, und das zeigt. Nur bei relationalen Datenbanken hat man keine wirkliche Wahl, als sie zu benutzen.

Ich weiß, dass es "NoSQL" -Datenbanken gibt, aber das relationale Paradigma ist immer noch immens wichtig. Es ist traurig, dass es dort so wenig Pluralismus gibt.

4
John