Frage

Warum sind SQL-Distributionen so nicht standardisiert, obwohl es für SQL einen ANSI-Standard gibt?Gibt es wirklich so viele bedeutsame Unterschiede in der Funktionsweise von SQL-Datenbanken oder sind es nur die beiden Datenbanken, mit denen ich gearbeitet habe:MS-SQL und PostgreSQL?Warum entstehen diese Unterschiede?

War es hilfreich?

Lösung

Es handelt sich um eine Form des „Stealth Lock-in“.Joel geht hier sehr ins Detail:

Am Ende verknüpfen Unternehmen ihre Geschäftsfunktionalität bei ihrer Implementierung mit nicht standardmäßigen oder seltsamen, nicht unterstützten Funktionen, was ihre Möglichkeiten einschränkt, von ihrem Anbieter zu einem Mitbewerber zu wechseln.

Auf der anderen Seite ist es ziemlich kurzsichtig, denn jeder, der nur halb so viel Verstand hat, wird dazu neigen, die proprietären Teile abzustrahieren oder die Bindung ganz zu vermeiden, wenn sie zu ungeheuerlich wird.

Andere Tipps

Der ANSI-Standard spezifiziert nur eine begrenzte Anzahl von Befehlen und Datentypen.Sobald Sie darüber hinausgehen, sind die Implementierer auf sich allein gestellt.Und einige sehr wichtige Konzepte werden überhaupt nicht spezifiziert, wie etwa die automatische Inkrementierung von Spalten.SQLite wählt einfach die erste Ganzzahl ungleich Null aus, die MySQL benötigt AUTO INCREMENT, PostgreSQL verwendet Sequenzen usw.Es ist ein Chaos, und das gibt es nur bei den OSS-Datenbanken!Versuchen Sie, Oracle, Microsoft und IBM dazu zu bringen, gemeinsam über eine knifflige Funktionalität zu entscheiden.

Erstens finde ich, dass Datenbanken hinsichtlich der Inkompatibilität beispielsweise nicht mit Browsern oder Betriebssystemen vergleichbar sind.Jeder mit ein paar Stunden Schulung kann mit der Auswahl, Einfügung, Löschung und Aktualisierung jeder SQL-Datenbank beginnen.Mittlerweile ist es schwierig, HTML zu schreiben, das in jedem Browser identisch dargestellt wird, oder Systemcode für mehr als ein Betriebssystem zu schreiben.Im Allgemeinen hängen Unterschiede in SQL mit der Leistung oder eher esoterischen Funktionen zusammen.Die größte Ausnahme scheinen Datumsformate und -funktionen zu sein.

Zweitens sind Datenbankentwickler im Allgemeinen motiviert, Funktionen hinzuzufügen, die ihr Produkt von allen anderen unterscheiden.Produkte wie Oracle, MS SQL Server und MySQL sind riesige Ökosysteme, die sich in der Praxis selten gegenseitig befruchten.An meinem Arbeitsplatz verwenden wir Oracle und MySQL, könnten aber bei Bedarf oder Wunsch wahrscheinlich in etwa einem Tag auf 100 % Oracle umsteigen.Deshalb liegen mir die glänzenden Spielzeuge, die Oracle uns mit jeder Veröffentlichung bietet, sehr am Herzen, aber ich weiß nicht einmal, welche Version von MySQL wir verwenden.IBM, Microsoft, PostgreSQL und der Rest könnten für uns genauso gut nicht existieren.Es ist weitaus wichtiger als die Kompatibilität in der Datenbankwelt, über die Funktionen zu verfügen, um Kunden und Benutzer zu gewinnen und zu halten.(Das ist vermutlich der positive Aspekt der „Lock-in“-Antwort.)

Drittens gibt es legitime Gründe für verschiedene Unternehmen, SQL unterschiedlich zu implementieren.Oracle verfügt beispielsweise über ein Multiversionierungssystem, das sehr schnelle und skalierbare konsistente Lesevorgänge ermöglicht.Anderen Datenbanken fehlt diese Funktion, sie sind jedoch in der Regel schneller beim Einfügen von Zeilen und beim Zurücksetzen von Transaktionen.Dies ist ein grundlegender Unterschied dieser Systeme.Es macht das eine nicht besser als das andere (zumindest im allgemeinen Fall), sondern nur anders.Man sollte sich nicht wundern, wenn das SQL auf einer Datenbank-Engine ihre Stärken ausnutzt und versucht, ihre Schwächen zu minimieren.Tatsächlich wäre es von den Entwicklern unverantwortlich, dies nicht zu tun.

John:Der Standard deckt tatsächlich viele Themen ab, darunter Identitätsspalten, Sequenzen, Trigger, Routinen, Upsert usw.Aber natürlich könnten viele dieser Standardkomponenten später als die ersten Implementierungen eingeführt worden sein;und dies könnte ein Grund dafür sein, dass die Einhaltung der SQL-Standards im Allgemeinen etwas gering ist.

Neall:Es gibt tatsächlich Bereiche, in denen der SQL-Standard den Implementierungen voraus ist.Es wäre zum Beispiel schön, CREATE ASSERTION zu haben, aber meines Wissens implementiert noch kein DBMS Assertionen.

Persönlich glaube ich, dass der geschlossene Charakter einiger ISO-Standards (wie des SQL-Standards) Teil des Problems ist:Wenn ein Standard nicht ohne weiteres online verfügbar ist, ist es weniger wahrscheinlich, dass er den Implementierern/Planern bekannt ist, und zu wenige Kunden fragen nach der Einhaltung, weil sie nicht wissen, was sie verlangen sollen.

Es ist sicherlich ein effektiver Lock-in, wie 1800 sagt.Aber um den Datenbankanbietern gegenüber fair zu sein, muss man sagen, dass der SQL-Standard den Funktionsumfang aktueller Datenbanken immer hinterherhinkt.Die meisten Datenbanken, die wir heute haben, stammen aus ziemlich alten Abstammungslinien.Wenn Sie Microsoft SQL Server bis zu seinen Wurzeln zurückverfolgen, werden Sie meiner Meinung nach auf Ingres stoßen – eine der allerersten relationalen Datenbanken, die in den 70er Jahren geschrieben wurde.Und Postgres wurde ursprünglich von denselben Leuten in den 80er Jahren als Nachfolger von Ingres geschrieben.Oracle hat eine lange Geschichte und ich bin mir nicht sicher, wo MySQL ins Spiel kam.

Die Nichtportabilität der Datenbank ist zwar scheiße, könnte aber noch viel schlimmer sein.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top