ORMs sind nützlich, bis Sie aufhören, das SQL zu betrachten_
ORMs können die Produktentwicklung beschleunigen, aber sie werden teuer, wenn Teams aufhören, generierte Abfragen zu überprüfen und Datenbankzugriffsmuster zu verstehen.
Das Problem mit ORMs ist nicht, dass sie existieren.
Das Problem beginnt, wenn ein Team das ORM als Datenbankabstraktionsschicht behandelt, anstatt als Abfragegenerator, den man noch verstehen, messen und gelegentlich umgehen muss.
Diese Unterscheidung ist wichtig.
Worin ORMs tatsächlich gut sind
ORMs sind gut in:
standardmäßigen CRUD-Pfaden
Schema-Modellierung
Migrationen
Reduzierung von sich wiederholendem Mapping-Code
Sie sind normalerweise schlecht darin, das Kostenmodell relationaler Datenbanken zu verschleiern.
Wenn ein Team niemals das SQL betrachtet, wird das ORM zu einem Latenzgenerator mit schönem Autocomplete.
Der Fehlermodus, den jeder irgendwann sieht
Das klassische Beispiel ist das N+1-Abfrageproblem:
const users = await db.user.findMany({ take: 50 });for (const user of users) { console.log(user.invoices[0]?.status);}
Auf der Anwendungsebene sieht das harmlos aus.
Auf der Datenbankebene bedeutet es oft:
eine Abfrage, um Benutzer abzurufen
fünfzig weitere Abfragen, um verwandte Datensätze abzurufen
Das ist kein ORM-Bug. Es ist das Ergebnis des Zugriffs auf Beziehungen, der die Abfragegrenzen verbirgt.
Eager Loading ist keine universelle Lösung
Die übliche Reaktion ist, alles im Voraus zu laden: