Gibt es bei so vielen ORM-Tools für die meisten modernen Sprachen noch einen Anwendungsfall für das Schreiben und Ausführen von SQL in einem Programm in einer Sprache / Umgebung, die diese unterstützt? Wenn ja warum?
Zur Verdeutlichung: Ich frage nicht, ob Programmierer SQL kennen müssen oder ob ich ein SQL-Tool auf meinem Desktop haben sollte. Ich frage speziell, warum ich es im Gegensatz zu einem ORM möglicherweise im Code (oder in der Konfiguration oder was auch immer) habe.
Antworten:
SELECT * FROM...
, wenn Sie tippen , tötet Gott ein Kätzchen. Und du hasst Kätzchen.quelle
Komplexes SQL schreiben
ORM eignen sich hervorragend für grundlegende Dinge. In komplexen Situationen müssen Sie jedoch SQL schreiben.
Kurz gesagt, es besteht mit Sicherheit ein Bedarf an SQL, und dies wird auch immer so bleiben.
quelle
ORM hilft Ihnen nicht beim Erstellen, Optimieren oder Automatisieren der Datenbank. Es gibt Ihnen nur eine alternative Möglichkeit, mit der Datenbank zu interagieren, wenn Sie all diese Dinge erledigt haben.
quelle
Sicher:
quelle
ORMs existieren aufgrund der Impedanzfehlanpassung zwischen unseren gemeinsamen relationalen DB-Implementierungen und unseren OO-Sprachfunktionen. Sie sind nur eine Brücke, aber die meisten Leute behandeln SQL wie den Limburger Käse im Kühlschrank.
Wenn Sie zu Recht sagen können, dass Sie immer Ihr ORM oder eine andere abstrahierte Datenzugriffsschicht verwenden, anstatt SQL / gespeicherte Prozeduren / Ansichten als erstklassige Schnittstelle (n) zu behandeln, sind Sie wahrscheinlich besser dran, ohne SQL zu berühren.
In der Praxis habe ich noch nie ein reines ORM-Projekt gesehen, für das nicht mindestens SQL erforderlich war, um die Datenbank zur endgültigen Validierung abzufragen.
quelle
ORMs sind ein Werkzeug in der Toolbox des Programmierers. Sie haben ihre eigenen Probleme. Einige Beispiele sind:
quelle
Wenn Sie wissen, was Sie tun, können Sie einen ORM effektiv verwenden, um einen Großteil Ihres CRUD-Typcodes zu ersetzen. Sie sind jedoch für komplexe Dinge nicht so effektiv, sie sind schwer zu optimieren (Sie wissen, dass Leistung einer der kritischen Teile des Datenbankdesigns ist und keine Objekte emuliert), und sie sind in den Händen von jemandem, der dies nicht tut, geradezu schrecklich und gefährlich SQL selbst nicht verstehen oder schreiben.
Ich möchte auch darauf hinweisen, dass komplexe Berichte mit einem ORM nicht einfach effektiv durchzuführen sind. Und wenn Sie das einfache SQL nicht in den einfachen Dingen lernen, wie werden Sie dann jemals an den Punkt gelangen, an dem Sie komplexes SQL für die Berichterstellung schreiben können? Ich habe noch nie in einer Anwendung gearbeitet, die keine Berichtsanforderungen hatte und oft recht kompliziert war.
ORMs sind auch zum größten Teil nicht für BI- oder ETL-Prozesse nützlich. Sie sind auch nicht nützlich für Datenbankadministratorabfragen oder zum Auffinden von Informationen in den Überwachungstabellen und zum Rückgängigmachen bestimmter Datenbankänderungen. Es gibt viele, viele Dinge, die mit SQL noch am effektivsten erledigt werden. Die Anwendung, die die Datenbank abfragt, ist ein kleiner Teil dessen, was in einer Unternehmensumgebung abgefragt werden muss.
Ich sehe auch viele Fragen dazu, wie man etwas mit einem ORM macht, das das Poster bereits in SQL kann. Es ist schön, neue Dinge zu lernen, aber wenn sie zusätzliche Zeit und Mühe verursachen, ohne einen wirklichen Gewinn gegenüber der ursprünglichen Methode (und oft einen echten Leistungsverlust), warum verwenden Sie sie anders als sie gerade "modisch" sind.
quelle
Manchmal möchte ein Client nur eine schnelle und einfache Abfrage, um Daten für einen Bericht, einen Export, einen Datenauszug usw. zurückzugeben, und möchte warten, bis ein gesamtes Programm entwickelt ist.
Außerdem kann ein guter SQL-Programmierer immer schneller und effizienter SQL schreiben als jedes von mir verwendete ORM. Außerdem habe ich festgestellt, dass viele Leute nur den ORM-Punkt auf gespeicherte Prozeduren haben - die Vorteile des ORM wirklich zu ignorieren, weil ORMs für komplexe Prozesse nicht großartig sind.
Wenn Sie eine Datenbank wie Oracle mit einer sehr umfangreichen und leistungsstarken Prozedursprache verwenden, können Sie viel tun, ohne jemals ein "Programm" zu benötigen. PL / SQL unter Oracle in den richtigen Händen ist sehr schnell und effizient.
quelle
Wenn Sie selbst eine Datenbank verwenden möchten, ja. Die meisten ORMs, die ich zu verwenden versuchte, reichten einfach nicht aus oder deckten meine Datenbank nicht ab. Außerdem, wie werden Sie Fehler beheben oder benutzerdefinierte Abfragen schreiben, die nicht behandelt werden?
quelle
Es wird weiterhin zum Schreiben von Triggern und gespeicherten Prozeduren benötigt. Gespeicherte Prozeduren sind derzeit möglicherweise in Ungnade gefallen, aber in einigen Situationen sind sie immer noch sehr nützlich. SQL kann auch für einige besonders haarige Joins mit mehreren Tabellen erforderlich sein.
quelle
Ja, Sie können das Schreiben von SQL vermeiden. Aber am Ende schreiben Sie stattdessen HQL (oder Linq oder DQL ...)!
Im Ernst, ich bin ein großer Fan von ORMs, und ich denke, man kann es vermeiden, die meiste Zeit reines SQL zu verwenden. Aber wir müssen uns daran erinnern, dass ein ORM nur eine große Abstraktion ist und alle großen Abstraktionen auslaufen ...
(Aber was das N + 1-Problem betrifft: Dies hängt mit dem verzögerten Laden zusammen, und die meisten ORM-Tools haben eine Möglichkeit, eifriges Laden anzufordern, wodurch dieses spezielle Problem vermieden wird.)
quelle
ORM bringt Sie nur bis zu einem gewissen Punkt. Es gibt jedoch Fälle, in denen Sie eine wirklich komplizierte Abfrage mit komplizierten Verknüpfungen, Unterabfragen, Gewerkschaften, Minus, Analysefunktionen usw. ausführen müssen. Dann benötigen Sie SQL. Aber wie sollen Sie komplizierte Abfragen schreiben, wenn Sie alle einfachen Abfragen dem ORM überlassen?
quelle
Selbst wenn Sie es nicht in Ihren Code schreiben mussten, ist es ziemlich praktisch, es verwenden zu können, wenn Sie Terminalzugriff auf einen Datenbankserver haben.
Außerdem hat die meisten von dem, was macht eine Herausforderung Programmierung arbeiten innerhalb der Einschränkungen , dass das Leben setzt us- oft wir sind mit altem Code arbeiten, oder alte Versionen von Datenbanken und hat nicht die Möglichkeit , die neueste ORM - Bibliothek installieren welche Sprache wir sind arbeiten mit. In dieser Situation benötigen Sie jedes Werkzeug, das Ihnen zur Verfügung steht.
In der restlichen Zeit benötigen Sie möglicherweise kein SQL für Ihre CRUD-Inhalte, aber SQL bietet viel mehr als nur einfache SELECT-, INSERT-, UPDATE- und grundlegende JOIN-Abfragen. Sie können sehr clevere Dinge damit machen, und obwohl Sie sie möglicherweise nicht oft verwenden, ist es nützlich zu wissen, was sie sind.
Ich denke, wir werden uns zunehmend in einer Post-SQL-Welt befinden. Die meisten Cloud-Dienste verwenden jedoch nicht-SQL-Tabellenspeicher, und für einfache CRUD-Arbeiten ist die volle Leistung von SQL nicht erforderlich. Das heißt aber nicht, dass es keinen Wert hat, es zu verstehen.
Natürlich muss auch jemand genug wissen, um ein besseres ORM-System zu schreiben, wenn die aktuellen nicht viel zu tun haben. Es würde ihnen helfen, wenn sie SQL kennen ...
quelle
Für die Erstellung umfangreicher Webanwendungen ist dies völlig unnötig und kann die Dinge viel stressiger und zeitaufwändiger machen, als sie sein müssen. Der Grund dafür ist, dass jede große App eine Speicherpersistenzschicht (im RAM) verwenden sollte, die häufig verwendete Speicher-Caching-Teile der Datenbank sein sollte.
Wenn Sie Dinge mit mobilen Geräten usw. tun müssen, mit denen nicht viel Arbeitsspeicher zur Verfügung steht, wird die programmierte Anwendung als "Client" oder eigenständige App auf einem mobilen Gerät, Tablet usw. ausgeführt Dinge wie die Verwendung von SQL sind immer noch üblich und wichtig, da der Speicher auf dem Gerät so klein ist, dass Sie nicht viele Dinge im Speicher zwischenspeichern können.
quelle
Die Komplexität und der Umfang des von mir geschriebenen SQL reichen nicht aus, um ein ORM-Framework in angemessener Weise zu verknüpfen.
(Ich schreibe SQL vielleicht einmal im Monat, wenn)
quelle
Ich bin auf viele große Korps mit Datenbankadministratoren gestoßen, die Entwickler, die ORM-Tools verwenden, aktiv fürchten.
Sie sind Datenbankadministratoren, die an der Abstimmung und Leistung beteiligt sind.
Und ja, ORM-Tools können so verwaltet werden, aber ich habe Orte gesehen, an denen sie nur eine gespeicherte Prozedur (SQL Server) akzeptieren und Sie fragen, was Sie darin tun.
Außerdem können ORM-Tools stark missbraucht werden und genauso schlechtes SQL erzeugen wie das Schreiben des SQL selbst.
quelle
Ein großes Problem - DDL- und Datenbankmigrationen. Manchmal müssen Sie dieses Zeug von Hand zusammennähen, um Dinge zu aktualisieren, ohne vorhandene Daten zu beschädigen.
quelle