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.
Antworten:
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_CONCAT
wü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:
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.
quelle
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.
quelle
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.
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).
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.
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.
quelle
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.
quelle
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.
quelle
Schauen Sie sich LINQ to SQL an ...
Ich habe es vor ein paar Monaten ausprobiert und habe nie zurückgeschaut ...
quelle
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.)
quelle
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.
quelle
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.
quelle
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.
quelle
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).
quelle
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.
quelle
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.
quelle
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.)
quelle
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.
quelle
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 .
quelle