Benutzer Aaron Bertrand hat einige Kommentare abgegeben, die gut zu meinen Gedanken zu Ihrer Frage passen. Dies ist eher eine Rahmenherausforderung als eine Antwort auf Ihre spezifische Frage, aber ich denke, es ist wertvoll, dies in diesem Zusammenhang zu berücksichtigen.
Portabilität ist ein schönes Lehrbuchziel, kommt aber in der Praxis selten vor.
Wenn Sie irgendwann die Plattform wechseln müssen, sind Änderungen an der Anwendung, der Datenbank und wahrscheinlich vielen anderen Dingen erforderlich. Wenn Sie ohne großen Aufwand etwas "plattformunabhängig" sein können, ist das in Ordnung. Aber es ist wirklich eine schlechte Geschäftsentscheidung, dies als Designziel zu verwenden.
Es gibt viele Orte im Internet, an denen die Leute die Nachteile diskutieren oder auf diese Weise programmieren. Hier ist einer von ihnen, den ich ziemlich überzeugend finde:
Datenbank-Abstraktionsschichten müssen sterben!
Der Portabilitätsfehler
Der Autor verwendet ein Argument, das ich ständig höre: Wenn Sie eine gute Abstraktionsschicht verwenden, ist es einfach, später von $ this_database zu $ other_database zu wechseln.
Das ist Blödsinn. Es ist nie einfach.
In einer nicht trivialen datenbankgestützten Anwendung hält es niemand für einfach, die Datenbank zu wechseln. Zu denken, dass "die Bekehrung schmerzlos sein wird", ist eine Fantasie.
Gute Ingenieure versuchen, die besten Werkzeuge für den Job auszuwählen und dann alles zu tun, um die einzigartigen und leistungsstärksten Funktionen ihres Werkzeugs zu nutzen. In der Datenbankwelt bedeutet dies spezifische Hinweise, Indizierungen, Datentypen und sogar Entscheidungen zur Tabellenstruktur. Wenn Sie sich wirklich auf die Teilmenge der Funktionen beschränken, die allen wichtigen RDBMS gemeinsam sind, tun Sie sich und Ihren Kunden einen großen Nachteil.
Das unterscheidet sich nicht von der Aussage "Ich beschränke mich auf die Teilmenge von PHP, die in Perl und C gleich ist, weil ich vielleicht eines Tages die Sprache wechseln und meinen Code 'schmerzlos' portieren möchte."
Das passiert einfach nicht.
Die Kosten für das Wechseln von Datenbanken nach der Entwicklung und Bereitstellung einer Anwendung sind recht hoch. Sie müssen möglicherweise Schema- und Indexänderungen, Syntaxänderungen, Optimierungs- und Optimierungsarbeiten wiederholen, Hinweise zum Anpassen oder Entfernen usw. Das Ändern von mysql_foo () in oracle_foo () ist wirklich das geringste Ihrer Probleme. Sie werden den größten Teil, wenn nicht den gesamten Teil Ihres SQL berühren - oder Sie müssen es zumindest überprüfen.
Das klingt für mich nicht "schmerzlos".
<>
) und Nicht-Standard (!=
) wählen können, bei denen keine Kompromisse bei Leistung oder Wartbarkeit eingegangen werden, wähle ich immer Standard. Aber wenn es um andere Kosten geht oder es kein Standardäquivalent gibt, tippe ich aus und gehe proprietär. Die Dinge, die Sie aufgeben, nur um später die Plattform im Großhandel komplett zu wechseln, sind es imho einfach nicht wert.