Was ist objektrelationale Abbildung (ORM)?
Was ist objektrelationale Abbildung (ORM)?
Objektrelationale Abbildung (ORM) ist der Prozess, bei dem die Verbindung zwischen Entitäten (Objekten) einer Programmiersprache und den entsprechenden Datenbankelementen abstrahiert wird.
Bei der Entwicklung von Anwendungen definieren Programmierer Objekte im Code, die realen Konzepten entsprechen. Objektdaten werden im Code manipuliert, aber gemäß der Definition im Datensystemdesign in einer Datenbank gespeichert. Beispielsweise könnte Ihr Code ein Kundenobjekt mit Kundeninformationen enthalten, während die zugrunde liegende Datenbank diese Daten in mehreren Tabellen speichert.
Objektrelationale Abbildung ist eine Software-Schicht, die Objektdaten in die zugrunde liegende Datenbank übersetzt und so Datenbankdetails vom Programmierer abstrahiert. Auf diese Weise bleibt der Code unverändert, auch wenn die zugrunde liegenden Datenbanken durch neue oder andere Designs ersetzt werden. Objektrelationale Abbildung ermöglicht die Erstellung modularer Anwendungen, die einfach zu verwalten und zu warten sind.
Wie funktionieren objektrelationale Abbildungen?
Objektrelationale Abbildungen (ORM) verbinden Anwendungen, die in einer objektorientierten Programmiersprache (OOP) geschrieben wurden, mit einer zugrunde liegenden Datenbank. Diese Arten von Anwendungen und Datenbanken werden oft zusammen verwendet, aber jede verarbeitet Daten auf unterschiedliche Weise. Durch Hinzufügen einer objektrelationalen Abbildung zwischen ihnen kann jedes Objekt Daten in einem Format senden, das das andere versteht. Sie können das eine ändern, ohne das andere zu beeinflussen.
Objektorientierte Programmiersprache
OOP-Sprachen organisieren Daten in Objekten, bei denen es sich um Code-Strukturen mit einem oder mehreren Attributen handelt. In einer OOP-Anwendung könnten Sie zum Beispiel ein Objekt definieren, das als datenpersistente Klasse dargestellt wird, wie z. B. ein Auto, mit Attributen wie Marke, Modell, Fahrzeug-Identifikationsnummer, Farbe und Kilometerstand.
Zu den gängigsten objektorientierten Programmiersprachen (OOP) gehören Python, Java, JavaScript und .NET/C#.
Relationale Datenbanken
Relationale Datenbanken strukturieren Daten in Tabellen, ähnlich wie eine Reihe miteinander verbundener Tabellenkalkulationen. Jede Tabelle besteht aus einer Reihe von Spalten mit eindeutigen Datensätzen in jeder Zeile.
Ihre Auto-Datenbank könnte zum Beispiel mehrere Tabellen umfassen. Eine könnte Markendaten wie Marke, Modell und Fahrzeug-Identifikationsnummer enthalten. In einer anderen Tabelle könnten Attribute einzelner Autos wie Besitzer, Farbe und Kilometerstand gespeichert werden. Zu den gängigsten relationalen Datenbanken gehören MySQL, PostgreSQL und SQL Server.
Bei der Web-Entwicklung wandelt ein objektrelationales Abbildungs-Tool (ORM) Daten, die von einer objektorientierten Anwendung gesendet werden, in eine relationale Datenbank um, ohne dass die Anwendung wissen muss, wie diese Daten in der Datenbank strukturiert sind.
Objektrelationale Abbildungen
Sie können eine objektrelationale Abbildung erstellen, die manchmal auch als objektrelationaler Manager bezeichnet wird und Ihrer Datenbank mitteilt, wo sich alle von einer Anwendung angeforderten Daten befinden sollen, auch wenn jede Struktur ihre Daten auf unterschiedliche Weise speichert. Wenn Ihre Anwendung alle Attribute eines einzelnen Autos anfordert, weist das ORM die Datenbank an, all diese Daten aus mehreren Tabellen abzurufen.
Da die Abbildungen abstrahiert sind, kann das ORM auch bei Änderungen an der Datenbankstruktur oder bei einer Migration zu einer neuen Datenbank mit minimalen Aktualisierungen weiterhin auf die richtigen Daten verweisen.
Allgemeine ORM-Frameworks
ORM-Tools oder Frameworks sind für die Datenmodellierung in vielen der gängigsten objektorientierten Programmiersprachen verfügbar. Zu den gängigsten gehören:
- Hibernate für Java
- SQLAcademy für Python
- Entity Framework für .NET/C#
Kann man ein ORM mit einer nicht-relationalen Datenbank verwenden?
Nein, nicht-relationale Datenbanken speichern Daten in unterschiedlichen Formaten und interagieren auf unterschiedliche Weise mit Anwendungen. Die häufigste Art von nicht-relationalen Datenbanken sind Dokumentdatenbanken. Dokumente können auch viele Attribute haben, ähnlich wie Objekte, aber sie haben unterschiedliche programmatische Strukturen.
Zu den gängigsten nicht-relationalen Datenbanken gehören MongoDB und NoSQL.
Was ist der Unterschied zwischen ORM und ORDBMS?
Ein objektrelationales Datenbankmanagementsystem (ORDBMS) ist eine Art von Datenbank, die Elemente sowohl relationaler als auch objektorientierter Frameworks nutzt. Sie kann Datensätze speichern, die als Objekte strukturiert sind, ähnlich zu dem, was Sie in einer OOP-Sprache codieren können. Sie können aber auch SQL-ähnliche relationale Abfragen für diese Datensätze durchführen. Diese Kombination von Features ermöglicht es Ihnen, eine größere Bandbreite an Datentypen zu speichern, als dies in einer standardmäßigen relationalen Datenbank möglich ist.
Während eine objektrelationale Abbildung (ORM) eine Datenabstraktion ist, die auf Anwendungsebene arbeitet, bietet ein ORDBMS objektorientierte Funktionen direkt auf Datenbankebene.
ORMs werden in Ihrem Anwendungscode ausgeführt und generieren im Hintergrund SQL. ORDBMS verwaltet den Datenspeicher und die Ausführung von Abfragen auf Datenbankebene und bietet native Unterstützung für erweiterte Objekttypen.
Was ist der Unterschied zwischen ORM und SQL?
SQL (Structured Query Language) ist die Standardsprache, die für die Interaktion mit relationalen Datenbanken verwendet wird. Sie ermöglicht Ihnen, Datenbankschemata zu erstellen und zu verwalten, Daten einzufügen und zu aktualisieren sowie Datensätze mithilfe deklarativer Befehle abzufragen.
SQL ermöglicht eine direkte, untergeordnete Kontrolle über die Datenbank. ORM bietet eine übergeordnete, abstraktere Schnittstelle, wodurch die Entwicklung oft schneller und der Code wartungsfreundlicher wird.
ORM eignet sich ideal zur Vereinfachung gängiger Datenbankaufgaben und zur Anpassung an den Anwendungscode, aber SQL bleibt unverzichtbar, wenn Sie Leistungsoptimierungen, komplexe Abfragen oder die vollständige Kontrolle über den Datenzugriff benötigen.
Warum ORM statt SQL-Abfragen verwenden?
Bei SQL müssen Sie Befehle manuell schreiben, um mit der Datenbank zu interagieren, während ein ORM Ihren objektorientierten Code automatisch im Hintergrund in SQL übersetzt.
ORMs helfen dabei, den Programmieraufwand für die Entwicklung eines objektorientierten Programms zu reduzieren, das viele Datenbankabfragen durchführen muss. Anstatt zahlreiche Datenbankabfragen, die gewartet werden müssen, manuell zu programmieren, programmieren Ihre Entwickler, wie Anfragen an das ORM gesendet werden sollen.
Die Verwendung einer verständlicheren Programmiersprache erleichtert auch das Lesen und Debuggen von Code.
Welche Vorteile bringt die Nutzung der objektrelationalen Abbildung?
ORM-Systeme bieten die folgenden Vorteile.
Schnellere Anwendungsentwicklung
ORMs helfen beim Abrufen komplexer Daten mithilfe von verständlichem Code in der OOP-Sprache, mit der Ihre Entwickler am vertrautesten sind. Sie können routinemäßige Datenbankoperationen wie das Erstellen, Lesen, Aktualisieren und Löschen von Datensätzen (CRUD) ausführen, sodass Ihre Entwickler diese Operationen nicht wiederholt in Ihrer Anwendung codieren müssen.
Einfachere Wartung der Anwendung
Durch die Abstraktion von Datenbankabfragen mittels ORM können Entwickler in einer einzigen Sprache arbeiten, wodurch ihr Code leichter zu verstehen und zu warten ist.
Mehr Sicherheit
Ein SQL-Injektionsangriff ist ein böswilliger Versuch, auf private Daten zuzugreifen, indem SQL-Abfragen über Benutzerformulare in der Anwendung gesendet werden. ORMs nutzen parametrisierte Abfragen,die zunächst eine Abfrage mit Platzhalterwerten und nicht mit echten Daten an Ihre Datenbank senden. (z. B. ? oder :param). Die echten Daten werden separat gesendet. Dadurch wird sichergestellt, dass Benutzereingaben als Daten und nicht als ausführbarer SQL-Code behandelt werden. Die Verwendung eines ORM-Tools verhindert somit unbefugten Datenzugriff über SQL-Injektion.
Verbesserte Leistung
Ein ORM kann die Systemleistung verbessern, indem es transparentes Objekt-Caching auf der Anwendungsebene ermöglicht. Es kann die am häufigsten abgerufenen Daten näher an der Anwendung speichern, um einen schnelleren Zugriff zu ermöglichen.
Welche Herausforderungen bringt die Verwendung von objektrelationalen Abbildungen mit sich?
ORMs bringen die folgenden Herausforderungen mit sich.
Impedanz-Fehlanpassungen
Es kann sich als schwierig erweisen, komplexe Datenstrukturen zwischen objektorientierten Programmen und Datenbanken abzubilden. Hierarchien, die in OOP codiert werden können, lassen sich in einer Datenbank nur sehr schwer darstellen, unabhängig davon, wie ausgefeilt Ihr ORM ist.
Leistungsprobleme bei höherer Komplexität
Das direkte Abfragen einer Datenbank ist rechentechnisch effizienter als die Verwendung eines ORM. Bei hochkomplexen Abfragen kann es effizienter sein, SQL-Code anstelle eines objektrelationalen Abbildungs-Tool (ORM) zu verwenden.
Lernkurve
ORMs ersparen Ihnen zwar das Erlernen komplexer SQL-Codes, Ihre Entwickler müssen jedoch dennoch den Umgang mit ORM-Tools erlernen.
Wann sollten Sie objektrelationale Abbildungen verwenden?
Da ein ORM-Tool Datenbankabfragen abstrahiert und automatisiert, können sich Ihre Entwickler mehr auf die Anwendung konzentrieren, anstatt potenziell komplexe Abfragen zu codieren. Verwenden Sie ORM in den folgenden Fällen:
Ihre Anwendung hat viele Objekte
Das manuelle Erstellen von Abfragen für komplexe Objektschnittstellen und -strukturen kann eine zeitaufwändige und mühsame Aufgabe sein. Wenn Sie einem ORM-Tool erlauben, Objekte auf Daten in Ihrer Datenbank abzubilden, kann dies den Abruf genauer, schneller und zuverlässiger gestalten.
Ihre Anwendung wiederholt ähnliche Datenbankabfragen
ORMs können viele routinemäßige CRUD-Operationen (Daten erstellen, lesen, aktualisieren und löschen) problemlos automatisieren, sodass Sie weniger SQL-Code benötigen.
Die Schema-Entwicklung ist noch im Gange
Wenn sich Ihr Datenmodell noch in der Entwicklung befindet, kann ein ORM dabei helfen, Änderungen am Datenbankschema einfacher zu verwalten. Viele ORMs enthalten Migrationstools, mit denen Sie Änderungen strukturiert versionieren und anwenden können und das Risiko von Inkonsistenzen zwischen Umgebungen verringern.
Datenbankportabilität ist wichtig
Ein ORM ist eine Abstraktionsebene, die die von Ihrer Anwendung aufgerufenen Operationen gezielt von einer bestimmten Datenbank trennt. Diese Abstraktion ist zwar keine Garantie für vollständige Portabilität, reduziert aber den Aufwand für den Wechsel zwischen Systemen. Wenn zum Beispiel Ihre Automobilanwendung von einer MySQL-Datenbank auf PostgreSQL umgestellt werden muss, müssen Sie nicht die gesamte Anwendung neu schreiben. Sie müssen nur geringfügige Anpassungen an Ihrem ORM vornehmen, wenn sich eine der Tabellen ändert.
Wann sollten Sie objektrelationale Abbildungen nicht verwenden?
Obwohl sie leistungsstarke Tools sind, gibt es immer noch Umstände, unter denen objektrelationale Abbildungen nicht die beste Lösung sind.
Für einfache Datenbankinteraktionen
Wenn Sie eine Anwendung entwickeln, die nur einfache CRUD-Operationen ausführt, kann der Zeit- und Arbeitsaufwand für die Wartung eines ORM größer sein als die einfache manuelle Wartung der Abfragen innerhalb Ihrer Anwendung.
Wenn High Performance Computing entscheidend ist
Für viele Anwendungen sind die zusätzliche Rechenzeit und Ressourcen, die durch ein ORM entstehen, irrelevant. Bei Aufgaben wie Analytik in Echtzeit, bei denen es auf Millisekunden ankommt, ist dies jedoch möglicherweise nicht akzeptabel.
Wenn Sie denormalisierte Schemata verwenden müssen
In manchen Situationen möchten Ihre Entwickler möglicherweise redundante Daten über mehrere Tabellen in Ihren Datenbank-Webservices hinweg warten, was als denormalisierte Schemata bezeichnet wird. Dies kann die Leistung verbessern, wenn eine Anwendung komplexe relationale Abfragen durchführen muss, die viele Tabellen miteinander verbinden. Die Abbildung dieser Abfragen in einem ORM ist nicht immer effektiv.
Wie kann AWS Sie bei Ihren Anforderungen an die Datenverwaltung unterstützen?
AWS bietet eine Reihe von Cloud-Datenbanklösungen, die die Datenverwaltung effizient und kostengünstig machen.
Amazon Relational Database Service (Amazon RDS) ist ein verwalteter Service, der die einfache Einrichtung, den Betrieb und die Skalierung einer relationalen Datenbank in der Cloud ermöglicht. Er stellt kostengünstige und anpassbare Kapazitäten zur Verfügung und erledigt gleichzeitig zeitraubende Datenbank-Verwaltungsaufgaben, sodass Sie sich besser auf Ihre Anwendungen und Ihr Unternehmen konzentrieren können.
Amazon Aurora ist ein moderner relationaler Datenbank-Service, der hohe Leistung und hohe Verfügbarkeit in großem Maßstab bietet. Er bietet vollständig Open-Source-MySQL- und PostgreSQL-kompatible Editionen sowie eine Reihe von Entwicklertools für die Erstellung von Serverless- und Machine Learning (ML)-gesteuerten Anwendungen.
Amazon Redshift ermöglicht moderne Datenanalytik in großem Maßstab und bietet ein bis zu 3-mal besseres Preis-Leistungs-Verhältnis und einen 7-mal besseren Durchsatz als andere Cloud-Data-Warehouses.
Amazon DocumentDB (mit MongoDB-Kompatibilität) ist eine schnelle, skalierbare, hochverfügbare und vollständig verwaltete Unternehmensdokumentdatenbank, die Daten in Dokumenten speichert, die JSON-Objekten ähneln. Sie nutzen die Treiber, die von nativen Objekten an die vom Entwickler verwendete Programmiersprache zurückgegeben werden, wodurch ORM-Tools überflüssig werden.
Beginnen Sie mit Datenbanken in AWS, indem Sie noch heute ein kostenloses Konto erstellen.