Frage

Immer wieder habe ich Menschen gesehen, die hier und überall eintreten Vermeidung von nonportable Erweiterungen der SQL-Sprache, diese die jüngste Beispiel.Ich erinnere mich nur ein Artikel, der besagt, was ich bin zu sagen, und ich glaube nicht, dass der link nicht mehr.

Haben Sie sich eigentlich profitiert vom schreiben portable SQL und die Abberufung von Ihren Dialekt proprietären tools/syntax?

Ich habe noch nie einen Fall, dass jemand unter Schmerzen zu bauen eine komplexe Anwendung auf mysql und dann sagen Sie wissen, was wäre nur peachy?Let ' s switch (PostGreSQL|Oracle|SQL-Server)!

Gemeinsame Bibliotheken, in -sagen wir - PHP-abstrakte, die Feinheiten von SQL, aber zu welchem Preis?Sie landen nicht in der Lage zu verwenden, effiziente Konstruktionen und Funktionen, die für eine vermeintliche Schimmer von Portabilität, die Sie wahrscheinlich nie verwenden.Das klingt nach lehrbuch YAGNI zu mir.

EDIT: Vielleicht ist das Beispiel, das ich erwähnt ist auch snarky, aber ich denke, der Punkt bleibt:wenn Sie planen, eine Bewegung von einem DBMS zu einem anderen, werden Sie wahrscheinlich die Neugestaltung der app sowieso, oder Sie würden das nicht tun es überhaupt nicht.

War es hilfreich?

Lösung

Software-Anbieter, die sich mit großen Unternehmen haben keine Wahl (ja, das ist meine Welt) - Ihre Kunden können Richtlinien nur eine Datenbank Verkäufers Produkte.Verpassen wichtigsten Kunden ist kommerziell schwierig.

Wenn Sie arbeiten innerhalb ein Unternehmen kann in der Lage, profitieren Sie vom wissen von der Plattform.

Allgemein gesprochen ist der DB-Schicht sollte gut gekapselt, so auch nicht, wenn Sie port, um eine neue Datenbank sollte die änderung nicht allgegenwärtig.Ich denke, es ist sinnvoll, eine YAGNI Ansatz zu portieren, es sei denn, Sie haben einer spezifischen requriement für sofortige multi-vendor-support.Machen Sie es mit Ihrer aktuellen Zieldatenbank, aber die Struktur der code gezielt für eine künftige Mobilität.

Andere Tipps

Das problem mit den Erweiterungen ist, dass Sie brauchen, um zu aktualisieren Sie Sie, wenn Sie die Aktualisierung der Datenbank-system selbst.Entwickler denken oft, Ihr code wird ewig dauern, aber die meisten Codes müssen umgeschrieben werden, innerhalb von 5 bis 10 Jahren.Datenbanken neigen dazu, länger zu überleben als die meisten Anwendungen, da die Administratoren sind smart genug, um nicht zu fix Dinge, die nicht gebrochen, so daß Sie oft nicht aktualisieren Ihre Systeme mit jeder neuen version.
Immer noch, es ist eine echte Schmerzen, wenn Sie ein upgrade Ihrer Datenbank auf eine neuere version noch die Erweiterungen sind nicht kompatibel und somit nicht funktionieren.Es macht das upgrade sehr viel komplexer und erfordert mehr code geschrieben werden.
Wenn Sie ein Datenbank-system, Sie sind oft fest mit der Entscheidung für Jahre.
Wenn Sie wählen Sie eine Datenbank und ein paar Erweiterungen, Sie stecken mit, dass die Entscheidung für viel, viel mehr!

Der einzige Fall, wo ich es sehen kann, notwendig ist, wenn Sie sind Erstellung von software, die Kunden kaufen und verwenden Sie auf Ihren eigenen Systemen.Bei weitem die Mehrzahl der Programmierung nicht in diese Kategorie fallen.Verweigern zu verwenden herstellerspezifische code, um sicherzustellen, dass Sie haben eine porrly performing Datenbank als Anbieter spezifische code wird in der Regel zur Verbesserung der Leistung bestimmter Aufgaben über ANSII Standard-SQL und-es geschrieben, um nehmen advatage von der spezifischen Architektur der Datenbank.Ich habe mit datbases seit über 30 Jahren und noch nie habe ich gesehen, dass ein Unternehmen ändern Ihre back-End-Datenbank, ohne eine komplette Anwendung umschreiben als gut.Die Vermeidung von vendor-specific code in diesem Fall bedeutet, dass Sie sich schädigen, Ihre Leistung ohne Grund auch immer, die meisten der Zeit.

Ich habe auch eine Menge von verschiedenen kommerziellen Produkte mit Datenbank-backends über die Jahre.Ohne Ausnahme, jeder von Ihnen wurde geschrieben, um Unterstützung mehrere backends und, ohne Ausnahme, jeder von Ihnen war ein elendes, langsame Hund, der ein Programm tatsächlich auf einer täglichen basis verwenden.

In der überwiegenden Mehrheit der Anwendungen würde ich Wetten, es gibt wenig bis keinen nutzen haben und sogar einen negativen Effekt, der versucht, zu schreiben portable sql;jedoch, in einigen Fällen gibt es einen realen Anwendungsfall.Angenommen, Sie bauen ein Zeit-Tracking-Web-Anwendung.Und Sie würden gerne einen selbst gehosteten Lösung.

In diesem Fall können Sie Ihren Kunden benötigen, um einen DB-Server.Sie haben einige Optionen hier.Sie konnte zwingen, in einer bestimmten version, die könnte Grenze Ihre client base.Wenn Sie Unterstützung für mehrere DBMS dann haben Sie ein größeres Potenzial client, können Ihre web-Anwendung.

  • Wenn Sie corporate, dann verwenden Sie die Plattform, die Sie gegeben sind
  • Wenn Sie sind ein Verkäufer, Sie haben, um zu planen für mehrere Plattformen

Langlebigkeit für Firmen:

  • Sie werden wahrscheinlich das umschreiben der client-code, bevor Sie migrieren DBMS
  • Das DBMS wird wahrscheinlich überleben, Ihre client-code (Java oder c# gegen '80 mainframe)

Denken Sie daran:

SQL innerhalb einer Plattform ist in der Regel abwärtskompatibel, aber client-Bibliotheken nicht.Sie sind gezwungen, zu migrieren, wenn das OS können nicht Unterstützung eine alte Bibliothek oder Sicherheit, Umwelt-oder Treiber-Architektur, - oder 16-bit-Bibliothek etc

Also, angenommen, Sie hatte eine app auf dem SQL Server 6.5.Es läuft immer noch mit ein paar Veränderungen auf SQL Server 2008.Ich Wette, Sie sind nicht mit den sane-client-code...

Es sind immer noch einige Vorteile und einige Kosten, um mit dem "kleinsten gemeinsamen Nenner" Dialekt von einer Sprache in order to safeguard Portabilität.Ich denke, dass die Gefahren des lock-in auf ein bestimmtes DBMS sind niedrig, wenn im Vergleich zu die ähnliche Gefahren für die Programmierung Sprachen, Objekt-und Funktions-Bibliotheken, Bericht Schriftsteller, und die wie.

Hier ist, was ich empfehlen würde, da der primäre Weg, der zur Sicherung der künftigen Mobilität.Machen Sie ein logisches Modell der schema umfasst die Tabellen, Spalten, Einschränkungen und domains.Machen Sie diese als DBMS-unabhängig, wie Sie können, im Kontext von SQL-Datenbanken.Über die einzige Sache, die sein Dialekt abhängig ist, die den Datentyp und die Größe für ein paar domains.Einige ältere Dialekte Mangel domain-Unterstützung, aber Sie sollten Ihre logischen Modells in Bezug auf domains sowieso.Die Tatsache, dass zwei Spalten stammen aus der gleichen Domäne, und nicht nur einen gemeinsamen Datentyp und Größe, ist von entscheidender Bedeutung, im logischen Modellierung.

Wenn Sie nicht verstehen die Unterscheidung zwischen logischen Modellierung und physikalische Modellierung, lernen Sie es.

Wie viel der index-Struktur, tragbare, wie Sie können.Während jedes DBMS hat seine eigenen speziellen index-Funktionen die Beziehung zwischen den Indizes, Tabellen und Spalten ist nur über das DBMS unabhängig.

In Bezug auf die CRUD SQL-Verarbeitung innerhalb der Anwendung verwenden Sie die DBMS-spezifische Konstrukte, Wann immer notwendig, aber versuchen Sie, um Sie zu dokumentieren.Als ein Beispiel, ich zögere nicht zu verwenden Oracle "CONNECT BY" konstruieren, wenn ich denke, es wird mir zu tun einige gute.Wenn Ihre logischen Modellierung wurde DBMS-unabhängigen, viel von Ihrer CRUD SQL wird auch DBMS-unabhängigen sogar ohne viel Aufwand auf Ihrer Seite.

Wenn es Zeit ist, sich zu bewegen, erwarten Sie einige Hindernisse, aber Sie erwarten, Sie zu überwinden, in einer systematischen Art und Weise.

(Das Wort "Sie" in der oben an wen es betreffen kann, und nicht um die OP im besonderen.)

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